问题
最近在 Zabbix Server 上启用了 zabbix-trapper
来接收 zabbix-sender
上报的数据,然后第二天查看监控发现 Zabbix Server 这台主机的 TIME-WAIT
连接异常的多。。。如下图:
我这里当前的监控环境中,大概有 20 台机器是使用 zabbix-sender
每一分钟向 Zabbix Server 上报监控数据的,所以 Zabbix Server 每分钟都会开启近 20 个连接用于 zabbix-trapper
接收数据,而这些连接的释放不及时导致大量的连接一直处于 TIME-WAIT
状态。。。
解决
如发现系统存在大量 TIME_WAIT
状态的连接,可通过调整如下内核参数解决:
net.ipv4.tcp_syncookies
:表示开启 SYN Cookies,当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;net.ipv4.tcp_tw_reuse
:表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;net.ipv4.tcp_tw_recycle
:表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭。net.ipv4.tcp_fin_timeout
:修改系默认的 TIMEOUT 时间
可以先检查一些这些内核参数的当前状态:
$ sudo sysctl -a | egrep 'tcp_syncookies|tcp_tw_reuse|tcp_tw_recycle|tcp_fin_timeout'
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
下面来修改一下这些内核参数,编辑文件 /etc/sysctl.conf
,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p
让参数生效。
调整了这些参数后,隔几分钟检查监控,状态如下:
从常态 500+ 直接到了个位数。。给力。。
评论区