系统连接数问题处理
作者:会飞的zxl
最近web服务器在大流量情况下经常出现假死现象,后台log报 too many open files 的错误,加大linux系统的文件打开数是可以解决部分问题,但是时间长了同样出问题,通过查询网络连接发现是tcp连接不关闭造成的。如下:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 1
SYN_RECV 15
CLOSE_WAIT 7729
ESTABLISHED 471
FIN_WAIT1 3
FIN_WAIT2 52
SYN_SENT 1
TIME_WAIT 725
从结果可以看到有大量的连接处于CLOSE_WAIT状态。
要解决这个问题的可以修改系统的参数,系统默认超时时间的是7200秒,也就是2小时。
默认如下:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效
修改后
sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
经过这个修改后,服务器会在短时间里回收没有关闭的tcp连接
猜你喜欢
您可能感兴趣的文章:
- PHP json_encode 空对象和空数组处理
- mac无法将“*.zip”解压到“文件夹”。错误22 无效的参数
- 我的web前端学习之路
- 2019主流的前端框架
- 史上最全的前端学习路线图,干货满满
- javascript学习路线图
- tree 树形结构搜索 显示子集
- 关于在vue项目中使用wangEditor 富文本编辑器
- mac 每次要重启bash_profile
- 项目总结(css3中的阴影效果)
- JavaScript之递归 详解!
- go/goland/phpstorm/webstorm 激活码
- php mysql 最后一个id(mysql_insert_id())
- 错误22无效的参数
- mysql alter table修改/ 增加表字段操作
- golang - 安装go
- golang - 包管理go modules
- golang -配置编辑工具GoLand
- golang - 字符串(string)长度