侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

TIME-WAIT状态连接过多问题解决

zze
zze
2020-09-04 / 0 评论 / 0 点赞 / 289 阅读 / 1697 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

问题

最近在 Zabbix Server 上启用了 zabbix-trapper 来接收 zabbix-sender 上报的数据,然后第二天查看监控发现 Zabbix Server 这台主机的 TIME-WAIT 连接异常的多。。。如下图:

image.png

我这里当前的监控环境中,大概有 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 让参数生效。

调整了这些参数后,隔几分钟检查监控,状态如下:

image.png

从常态 500+ 直接到了个位数。。给力。。

0

评论区