一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路

 

第一天故障:

现象:

公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~

后台504打不开,偶尔能刷出来也是很慢。。大概过了10分钟新后台也挂了,也就是公司所有业务全瘫痪了。。。问题严重了。。。

排查及原因:

先登陆到我们比较重视的新后台查看,有慢日志看慢日志没有慢日志先加慢日志。

简单查看了一下top  发现load较高,有时候能到20左右,忽高忽低不是很稳定,其他都还算正常。。

接着netstat大法查看下连接数情况,统计了一下大概8000多time_wait,平常肯定没这么多的量。

次数省略几千行...

 
  1. strace -p http的pid

  2.  
  3. strace -p php的pid

  4.  
  5. #通过strace工具追踪了一下web服务和php的进程id,查看他正在做什么?

 

通过跟踪发现有很多调用一个数据库的函数在堆积,找到相应文件下发现原来这里有一个数据库已经下线了,在切换数据库的时候没有更改这个地方,白天切换的时候没发现问题,到了晚上高峰期大量的调用在排队,(今天早上来了问了一下研发,这个调用超时时间是5秒) 导致了大量的TIME_WAIT等待。。堵死。。

处理:

将数据库更改为正常的IP解决了~

 

第二天老后台问题:

 晚上9点左右同样的情况。直接查看连接数情况,果然又堵车了。

 

又堵塞了,大量的连接数不释放,目前业务已经崩了大量的投诉,先快速释放连接数恢复业务。

 
  1. [root@vm-10 ]# cat /etc/sysctl.conf

  2. kernel.sysrq = 1

  3. kernel.core_uses_pid = 1

  4. kernel.msgmnb = 65536

  5. kernel.msgmax = 65536

  6. kernel.shmmax = 68719476736

  7. kernel.shmall = 4294967296

  8. net.ipv4.ip_forward = 0

  9. net.ipv4.conf.default.accept_source_route = 0

  10. net.ipv4.tcp_syncookies = 1

  11. net.ipv4.conf.default.rp_filter = 2

  12. net.ipv4.conf.all.rp_filter = 2

  13. net.ipv4.conf.all.arp_announce = 2

  14.  
  15. net.ipv4.tcp_tw_reuse = 1 #新增

  16. net.ipv4.tcp_tw_recycle = 1 #新增

  17. net.ipv4.tcp_fin_timeout = 30 #新增

  18. [root@vm-10 ]#

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

果然调整完后连接数快速降下来了,然后strace查了一下系统调用,发现还有一个数据库没更改

 
  1. lstat("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", {st_mode=S_IFREG|0644, st_size=14994, ...}) = 0

  2. stat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)

  3. lstat("/aaa", {st_mode=S_IFDIR|0755, st_size=103, ...}) = 0

  4. lstat("/aaa/www", {st_mode=S_IFDIR|0755, st_size=38, ...}) = 0

  5. lstat("/aaa/www/html", {st_mode=S_IFDIR|0755, st_size=107, ...}) = 0

  6. lstat("/aaa/www/html/hangye.aaa.com", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0

  7. lstat("/aaa/www/html/hangye.aaa.com/s", 0x7ffd5f5e22b0) = -1 ENOENT (No such file or directory)

  8. setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={60, 0}}, NULL) = 0

  9. rt_sigaction(SIGPROF, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, {0x7f5710190cc0, [PROF], SA_RESTORER|SA_RESTART, 0x7f5719175660}, 8) = 0

  10. rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0

  11. getcwd("/", 4095) = 2

  12. chdir("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO") = 0

  13. setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0

  14. gettimeofday({1502634914, 509085}, NULL) = 0

  15. open("/aaa/www/html/hangye.aaa.com/bbb_OPEN_VIDEO/index.php", O_RDONLY) = 31

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值