标签:out 端口范围 系统 调整 接收 打开 如何 socket serve
问题根源:为什么会产生time-wait?
当客户端与服务器之间进行四次断开时,当客户端接收
到服务器端发送过来的断开确认报文后,会发送最后一次
ACK报文,发送之后客户端会进入time-wait状态,这个过
成会持续一分钟,用来完成接收剩余所有从服务器端发送
过来的数据[由于网络延迟等原因导致数据延迟达到],
同时也可以确自己发送的最后一个ACK断开确认报文能被
服务器端收到!
time-wait状态的危害:
1 time-wait状态会占据一定量的内存资源,虽然很少但
是如果这种连接在一个繁忙的服务器中过于多的话,会额外消耗内存资源
2 time-wait状态会占据文件描述符,因为要通过网络和
web程序通信,需要监听套接字文件,这样不仅会占用端
口还会占用文件描述符,在高并发短连接的场景中,额外
致命,往往一个连接请求一个资源需要几秒中,但是time
-wait连接却要等待1分钟,这往往会迅速消耗端口和描述符资源
当达到设置的阀值时,新的TCP连接的建立将会受到影响
如何检测这种状态:
方法1:
netstat -tnl | awk ‘/^tcp/{print $6}‘ | uniq -c
可以设置周期性任务计划将这类数据追加至一个文件中
进行查看!
方法2:
使用zabbix自定义key time-wait connection
在agent端使用UserParameter= 来创建一个收集这个值
的命令定期传递给服务器端,在服务器端设置触发器来
监控这个值的正常范围
解决方案思路:
1 linux系统自身参数设置过小:
调整如下参数:
所有用户一共可以打开的文件数:
[root@zabbix-server13:35:11~]#sysctl -a|grep file-max
fs.file-max = 44348
单用户可打开的文件数:
[root@zabbix-server13:35:11~]#sysctl -a|grep file-max
fs.file-max = 44348
web服务器自身是否开放进程数过小:
可以调整最大并发访问值等参数
linux系统端口范围:
[root@zabbix-server13:44:32~]#sysctl -a | grep ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
可以选择开放1024端口之上的所有端口!
1024 ~ 65535
2 如果是因为软件开发原因导致可暂时设置如下参数:
net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout = 60
缩短系统设定的time-wait时间
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;
先有效控制time-wait的数量然后在排查问题所在!
标签:out 端口范围 系统 调整 接收 打开 如何 socket serve
原文地址:http://blog.51cto.com/13878078/2322335