记录一次time_wait与close_wait的检查

框架与语言:php  tp6+swoole

原因:每隔几天就会出现,redis:Cannot assign requested address

开始想法,谷歌、百度。然后结果都是配置系统参数。比如下面例子

vi /etc/sysctl.conf

vm.overcommit_memory = 1
net.core.somaxconn = 6024
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 32768  65000
net.ipv4.tcp_max_tw_buckets = 11000
net.ipv4.tcp_timestamps=0

保存后 sysctl -p

其实这种方式是对的,但是,我要说但是了。我一开始也是像上面配置系统参数,结果不行的。

然后去查看网络状态,开始time_wait是超高,close_wait也是超高,这种明显就是端口使用了没释放。然后去查看代码。发现redis链接配置没有配置超时断开链接。swoole的链接池是短链接,所以不是长链接的原因。

打开 tp6的cache.php 、queue.php redis 配置选项,填写上timeout参数 设置为10;配置重启服务后time_wait明显的上升速度变慢了,但是还是在上升。

最后看redis服务器的配置,我也无语了...

redis的timeout 参数也是为0。这个参数是不能为0的,不然不活跃链接是不会断开的。最后timeout 设置成60。time_wait 保持很好!

查询端口链接数量

 netstat -ano |grep 6379 |wc -l

查询结果

查询网络状态数量

  1.  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    

    查询结果

     

close_wait

正式服务程序都是部署在docker容器的,文件、系统、系统内核参数都是一样的,但是,容器里面的close_wait一直居高不下,我也没找到原因,不在容器里面close_wait就是正常的,有大佬知道原因吗。最后一行命令解决。

netstat -nap |grep :6379|grep CLOSE_WAIT | awk '{print $7}'|awk -F"\/" '{print $1}' |awk '!a[$1]++'  |xargs kill

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值