一次大量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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章