一,在系统执行命令时报错error: too many open files

在linux中一切皆文件,例如监听的端口,设备,文件,进程等,都需要占用一个文件描述符(fd)。故在linux系统中最大打开文件描述符数open files,就很容易在大并发请求的系统上成为瓶颈。

调整的方法:

# echo "ulimit -n 1000000" >> /etc/profile


二,SYN Flood***

SYN Flood是当前最流行的DoS(拒绝服务***)与DDoS(分布式拒绝服务***)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被***服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被***服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

我们看到业务曲线大跌时,检查机器和DNS,发现只是对外的web机响应慢、CPU负载高、ssh登陆慢甚至有些机器登陆不上,检查系统syslog,会有类此如下的信息:

# tail -f /var/log/messages

Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.

检查连接数增多,并且SYN_RECV 连接特别多:

# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

TIME_WAIT 16855

CLOSE_WAIT 21

SYN_SENT 99

FIN_WAIT1 229

FIN_WAIT2 113

ESTABLISHED 8358

SYN_RECV 48965

CLOSING 3

LAST_ACK 313

我们可以通过调优kernel来缓解***:

1)net.ipv4.tcp_synack_retries = 0

这个比较重要,表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,进行0次重试,加快回收“半连接”。

2)net.ipv4.tcp_max_syn_backlog=16384

进入SYN包的最大请求队列长度,默认1024。对重负载服务器,增加该值显然有好处。

3)net.ipv4.tcp_syncookies = 1

打开syn cookie功能,***当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN,默认为0,表示关闭。

如果,调节kernel仍不能减轻syn flood***的话,直接用nginx或iptables封有嫌疑的ip。

三,系统socket TIME_WAIT过多

当socket连接由client端主动关闭后,socket连接最后会处于TIME_WAIT状态一段时间。一般情况下,这段时间为

2MSL(MSL:tcp报文段最大生存时间,他是任何报文段被丢弃前在网络内的最大时间,这样做也是为了让那些传输慢的报文段能被成功接收)。RFC 793[ Postel 1981c]指出MSL为2分钟,但是现实中常用值为30s或1min或2min。

当系统中有大量socket TIME_WAIT状态时,导致占用过多系统端口(而一个端口就是fd)。例如我们有个服务监听的端口为8012,重启的时候经常会提示端口被占用。

通过查看/proc/sys/net/ipv4/ip_local_port_range可以知道设置的Linux内核自动分配端口的端口范围:

# cat /proc/sys/net/ipv4/ip_local_port_range

1025 65535

减少方法:

1)net.ipv4.tcp_tw_reuse = 1

表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

2)net.ipv4.tcp_tw_recycle = 1

表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;

3)net.ipv4.tcp_fin_timeout = 30

#表示如果套接字由本端主动要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

四,使用ip_conntrack模块导致系统丢包

kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并把每条记录保存到 table 里(这个 table 在内存里,可以通过/proc/net/ip_conntrack 查看当前已经记录的总数),如果网络状况繁忙,比如高连接,高并发连接等会导致逐步占用这个 table 可用空间,一般这个 table 很大不容易占满并且可以自己清理,table 的记录会一直呆在 table 里占用空间直到源 IP 发一个 RST 包,但是如果出现被***、错误的网络配置、有问题的路由/路由器、有问题的网卡等情况的时候,就会导致源 IP 发的这个 RST 包收不到,这样就积累在 table 里,越积累越多直到占满。无论,哪种情况导致table变满,满了以后就会丢包,出现外部无法连接服务器的情况。内核会报如下错误信息:kernel: ip_conntrack: table full, dropping packet。

在/proc/net/ip_conntrack中,每一个跟踪连接表会占用304字节的内核存储空间,跟踪连接越多,越占用系统内存:

# cat /var/log/messages|grep conn

Nov 28 13:18:20 yd_82_231 kernel: ip_conntrack version 2.4 (8192 buckets, 65536 max) - 304 bytes per conntrack

调整方法:

1)net.ipv4.netfilter.ip_conntrack_max = 655360

增大跟踪的最大条数

2)net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 10800

减少跟踪连接的最大有效时间

五,server连接数高一般调整的tcp相关参数

1)/proc/sys/net/ipv4/tcp_mem

# cat /proc/sys/net/ipv4/tcp_mem

786432  2097152  3145728

确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)。

2)/proc/sys/net/ipv4/tcp_wmem

# cat /proc/sys/net/ipv4/tcp_wmem

4096  65536  8388608

为自动调优定义每个 socket 使用的内存。第一个值是为 socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。

3)/proc/sys/net/ipv4/tcp_rmem

# cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 8388608

与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。

转载于:https://blog.51cto.com/leejia/1422219

常见问题kernel调优相关推荐

  1. 分布式-MQ-07 kafka高级特性及常见问题调优

    kafka高级特性及常见问题调优 一.kafka高级特性 1.1 producer发布消息机制 1.2 Controller及partition选举机制 1.2.1 Controller选举机制(zk ...

  2. 第14课:Spark 分布式模型训练及调优(实战)

    上节课已经为大家介绍了 Apache Spark 项目的基本情况,以及分布式深度神经网络的解决方案.这节课我们将给出一个 Deeplearning4j+Spark 的建模实例,包括从配置 Maven ...

  3. (三)大话深度学习编译器中的自动调优·Empirical Search

    前面的第一篇"(一)大话深度学习编译器中的自动调优·前言"与第二篇"(二)大话深度学习编译器中的自动调优·DSL与IR"分别介绍了背景与一些相关概念,这第三篇我 ...

  4. linux7 kernel.sem,centos7.4内核调优,tcp单服务器万级并发

    在使用linux的centos7.4遇到的各种坑,其中一个项目采用四层架构,配置层,平台层,逻辑服务器管理层和集体逻辑服务器层的,一个整体的游戏项目,其中,作为整个项目负责人和架构打架着,项目运行一年 ...

  5. 中间件业务在网易轻舟容器平台的性能调优实践

    随着业务容器化的推进,经常有客户抱怨应用 QPS 无法和在物理机或者云主机上媲美,并且时常会出现 DNS 查询超时.短连接 TIME_OUT.网络丢包等问题,而在容器中进行调优与诊断的效果因为安装工具 ...

  6. 深度学习入门知识整理-训练技巧以及模型调优

    目录 网络模型先简单后复杂 确认模型损失 检查中间输出和连接 关于可视化神经网络的主要方法,Faizan Shaikh 举出了三个例子: 超参数的选择 学习率范围侧视图Colab Notebook N ...

  7. erlang调优方法

    2019独角兽企业重金招聘Python工程师标准>>> 1. 来自Scaling Erlang的方法 内核调优: # Increase the ipv4 port range: sy ...

  8. 开源sk-dist,超参数调优仅需3.4秒,sk-learn训练速度提升100倍

    作者 | Evan Harris 译者 | Monanfei 编辑 | Jane  出品 | AI科技大本营(ID:rgznai100) [导语]这篇文章为大家介绍了一个开源项目--sk-dist.在 ...

  9. Java线程池面试必备:核心参数、工作流、监控、调优手段

    欢迎关注方志朋的博客,回复"666"获面试宝典 1. Java的线程池 ① 合理使用线程池的好处 Java的线程池是运用场景最多的并发框架,几乎所有需要异步或者并发执行任务的程序都 ...

最新文章

  1. python批量命名变量_python变量命名的7条建议
  2. python详细安装教程linux-Linux手动安装新版本Python教程(CentOS)
  3. CSAPP(8):系统级IO
  4. 使用CInternetSession和CHttpFile提取网页源码
  5. Activity到底是什么时候显示到屏幕上的呢
  6. 在Android中实现异步任务
  7. bat执行时,跳转到当前bat文件所在盘符的根目录下面
  8. java udp判断端口是否打开,java udp 端口
  9. 网络工程师HCNA认证学习笔记Day1
  10. php hprose扩展1.5.5,Laravel框架RPC解决方案--Hprose
  11. MySQL大略学习(二) 表格的操作 增删查改
  12. java星号心形代码_心形原创符号
  13. excel电子表格发展历史
  14. 帆软 大屏BI模板(含报表滚动,图表联动等)下载
  15. texturepacker 打包图集
  16. 数据库--sql文件
  17. 横河川仪压力变送器故障代码_EJA压力变送器常见故障处理方法
  18. Flutter 实现原理及跨平台实践
  19. lnmp 一键安装包
  20. 什么是光纤接入网?PON有什么优点

热门文章

  1. 关闭fedroa19开关机画面
  2. 组合表头_单双斜线表头——520,想单就单,想双就双
  3. php找不到gearmanClent类,centos 使用docker搭建Gearman任务分发系统 ,Gearman的安装和使用...
  4. MySQL高级 - SQL优化 - limit优化
  5. Nacos服务端流程图
  6. kubernetes-Deployment
  7. Protobuf序列化的原理-字符如何转化为编码
  8. AQS.acquireQueued
  9. 负责域名解析的DNS服务
  10. Redis中的淘汰策略