Linux系统下,TCP连接断开后,会以 TIME_WAIT 状态保留一定时间,然后才释放端口。当并发请求过多时,会产生大量 TIME_WAIT 状态连接,无法及时断开会占用大量的端口资源和服务器资源。这时可优化TCP内核参数,及时将TIME_WAIT状态的端口清理掉。

下面方法只对大量 TIME_WAIT 状态的连接导致系统资源消耗有效,如不是这种情况,效果可能不明显。可用 netstat 命令查 TIME_WAIT 状态,输入下面命令,

查看当前TCP连接的状态和对应的连接数量:

netstat -atn|awk '/^tcp/{++count[$NF]} END {for(a in count) print a,count[a]}'#这个命令会输出类似下面的结果:
LAST_ACK18
SYN_RECV364
ESTABLISHED70
FIN_WAIT1342
FIN_WAIT260
CLOSING43
TIME_WAIT15649

只用关心 TIME_WAIT 个数,看到有15000多个 TIME_WAIT,这就占了15000多个端口。端口数量只有65535个,占一个少一个,严重影响到新连接。这时,有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接。

编辑配置文件:/etc/sysctl.conf,在这个文件中,加入下面几行内容:

net.ipv4.tcp_syncookies= 1  #开启SYNCookies。当SYN等待队列溢出时,启用cookies处理,可防范少量SYN攻击,默认0,表关闭;
net.ipv4.tcp_tw_reuse= 1   #开启重用。允许将TIME-WAITsockets重用于新的TCP连接,默认0,表示关闭;
net.ipv4.tcp_tw_recycle= 1 #开启TCP连接中TIME-WAITsockets的快速回收,默认0,表关闭;
net.ipv4.tcp_fin_timeout= 30   #修改系統默认的 TIMEOUT 时间。

输入下面的命令,让内核参数生效:

sysctl -p

经过这样调整后,除进一步提升服务器的负载能力外,还能防御小流量程度的DoS、CC和SYN攻击。

此外,如果连接数本身就很多,可再优化TCP 的可用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面配置:

net.ipv4.tcp_keepalive_time= 1200   #当keepalive起用时,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range= 1024 65535   #用于向外连接的端口范围。缺省情况下很小,改为1024到65535。
net.ipv4.tcp_max_syn_backlog= 8192 #SYN队列长度,默认为1024,加大队列长度为8192,可容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets= 5000  #表示系统同时保持TIME_WAIT最大数量,如果超过,TIME_WAIT将立刻被清除并打印警告信息。默认180000,改为5000。此项参数可控制TIME_WAIT 最大数量。

这几个参数,建议在流量非常大的服务器上开启,会有显著效果。一般的流量小的服务器上,没必要去设这几个参数。

内核其他TCP参数说明:

net.ipv4.tcp_max_syn_backlog= 65536     #记录尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存系统则是128。
net.core.netdev_max_backlog= 32768     #每个网络接口接收数据包的速率比内核处理的速率快时,允许送到队列的数据包的最大数目。
net.core.somaxconn= 32768      #如web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而 nginx 定义的 NGX_LISTEN_BACKLOG 默认511,所以有必要调整这个值。
net.core.wmem_default= 8388608
net.core.rmem_default= 8388608
net.core.rmem_max= 16777216 #最大socket读buffer,可参考优化值:873200
net.core.wmem_max= 16777216 #最大socket写buffer,可参考优化值:873200
net.ipv4.tcp_timestsmps= 0 #时间戳可避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用的序列号。时间戳能让内核接受这种“异常”的数据包。这里需将其关掉。
net.ipv4.tcp_synack_retries= 2 #为打开对端的连接,内核需发送个SYN并附带个回应前一个SYN的ACK。即三次握手中的第二次握手。该设置决定内核放弃连接前发SYN+ACK包的数量。
net.ipv4.tcp_syn_retries= 2    #在内核放弃建立连接前发送SYN包的数量。
#net.ipv4.tcp_tw_len= 1
net.ipv4.tcp_tw_reuse= 1       #开启重用。允许将TIME-WAITsockets重用于新TCP连接。
net.ipv4.tcp_wmem= 8192 436600 873200  #TCP写buffer,可参考优化值:8192 436600 873200net.ipv4.tcp_rmem = 32768 436600 873200   #TCP读buffer,可参考优化值:32768 436600 873200net.ipv4.tcp_mem= 94500000 91500000 92700000#同样有3个值,意思是:
#net.ipv4.tcp_mem[0]:低于此值,TCP无内存压力。
#net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。
#net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。
#上述内存单位是页,而不是字节。可参考优化值是:7864321048576 1572864net.ipv4.tcp_max_orphans= 3276800
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如超过,连接将即刻被复位并打印警告信息,这个限制仅是为防止简单的DoS攻击,不能过分依靠它或人为减小这个值,更应该增加这个值(如果增加内存后)。net.ipv4.tcp_fin_timeout= 30
#如果套接字由本端要求关闭,这个参数决定它保持在FIN-WAIT-2状态的时间。对端可出错并永不关闭连接,甚至意外当机。缺省值是60秒。2.2 内核的通常值是180秒,你可以按这个设置,但即使是个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2 的危险性比FIN-WAIT-1 小,因为它最多只能吃掉1.5K内存,但它们的生存期长些。

内核 TCP 参数调优相关推荐

  1. linux tcp参数调优,Linux TCP 性能调优笔记

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 为了保证可靠连接,tcp 建立连接需要"三次握手",这三次握手对 tcp 的性能有至关重要的影响. ...

  2. Windows TCP参数调优

    最近研究TCP的性能优化,这里先总结下TCP的参数调优,主要参考下面网址并加上自己的一些理解和总结: 网址:https://www.speedguide.net/articles/windows-8- ...

  3. Linux内核Socket参数调优

    可调优的内核变量存在两种主要接口:sysctl命令和/proc文件系统,proc中与进程无关的所有信息都被移植到sysfs中.IPV4协议栈的sysctl参数主要是sysctl.net.core.sy ...

  4. ambari_HDP之mapreduce参数调优

    一.基础环境 基础环境: centos6.8 ambari版本: 2.2.1 HDP版本: 2.3.2.0 HDP的默认配置文件:(本文以ambari-2.2.1为例): 配置文件目录:/usr/hd ...

  5. java linux 调用32位so_Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...

  6. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms changing a readonly file (linu single user mode) ...

  7. Linux云计算架构-系统调优【CPU、IO、网络、内核参数调优】

    文章目录 Linux云计算架构-系统调优[CPU.IO.网络.内核参数调优] 1. CPU调优 2. IO调优 3. 网络调优 3.1 网络冗余(主备模式) 3.2 负载均衡模式 4. 内核参数调优 ...

  8. CentOS7 内核版本3.10 内核参数调优参考

    查看网络上大部分内核参数文档,整理出如下内容,如有错误请指正,过程很辛苦,转载请附上原地址. 前言 常用的Linux内核参数,具体优化值要参考应用场景. 通过/var/log/message查看系统日 ...

  9. CPU-IO-网络-内核参数调优

    一. 有关使用CPU资源的调优 1. nice概述 在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的 ...

最新文章

  1. (转)搭建企业内部yum仓库(centos6+centos7+epel源)
  2. ItemAdding事件接收器中无法取到【创建者】的字段的值
  3. SpringBoot框架+Thymeleaf模板引擎实现发送HTML格式邮件(可带附件)
  4. 线性表【项目 - 求集合并集C语言】
  5. 搜索引擎:你选谷歌还是百度?
  6. 微信小程序页面跳转的方法
  7. C++轮子队-第三周(需求改进原型设计)
  8. 华为路由交换VRRP配置
  9. linux无法设置变量,linux – crontab在作业之前无法设置变量
  10. 标题在图表上_Excel 2010基础应用:图表的创建与编辑
  11. 【100题】第十二题(特殊的递加)
  12. 顺序表查找及其优化(Java)
  13. [Java集合源码阅读]-ArrayList扩容机制
  14. 时间序列谐波分析(HANTS)的MATLAB实现
  15. 《编程之美》中买书问题算法。空间复杂度O(n),时间复杂度O(n),求挑战
  16. 海外版TikTok培训课程怎么选择
  17. 塔防类游戏实现(一)
  18. 一文看懂什么是文本挖掘
  19. 荣耀手机怎么使用鸿蒙系统,荣耀供应链6月全面恢复,安卓系统依然是第一选择,鸿蒙只是备选...
  20. 计算机usb接口是一种通用,USB接口大科普,你用的是哪一种?

热门文章

  1. H3C Telnet、SSH登录 用户名和密码一致
  2. PHP Switch语句写法示例
  3. 智能水电表:远程抄表系统原理
  4. matlab 李萨如_毕业论文--基于MATLAB的李萨如图形研究.doc
  5. java毕业生设计校园外卖零食商城系统计算机源码+系统+mysql+调试部署+lw
  6. Java-swing坦克大战游戏
  7. Qt Creator 报错:启动程序失败,路径或者权限错误
  8. 2011最给力最温暖的爱情语录
  9. 服务器系统坏了怎么拷贝数据,服务器系统坏了如何导出sql数据库
  10. 国外酷站设计:10个漂亮的个人作品网站