同事說系統越來越慢,出現一堆TIME_WAIT,是以前的幾十倍,是否跟這個有關係。
上去看看什麼情況。
[xxx@xxx ~]$ netstat -ntal #一堆TIME_WAIT沒釋放,幾乎由程序本身發起。 tcp 0 0 ::ffff:127.0.0.1:60110 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60303 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60329 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60088 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60044 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60359 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60132 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60306 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60061 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60101 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60083 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60243 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60035 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60080 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60198 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60151 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60003 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60070 ::ffff:127.0.0.1:28080 TIME_WAIT tcp 0 0 ::ffff:127.0.0.1:60189 ::ffff:127.0.0.1:28080 TIME_WAIT [xxx@xxx ~]$ netstat -ntal |awk '{print $6}'|sort |uniq -c |sort -nr 10558 TIME_WAIT #這個數量多的不太正常。 23 ESTABLISHED #這裏連接數少是做了緩存,命中率達98%以上,很少穿透進來。 [xxx@xxx ~]$ cat /etc/issue #操作系統版本不一樣,內核參數也有些變化。 CentOS release 6.3 (Final) Kernel \r on an \m
/etc/sysctl.conf 配置文件末尾添加如下3個參數,然後執行 /sbin/sysctl -p
讓參數生效。
net.ipv4.tcp_tw_reuse = 1 #允許TIME-WAIT sockets重新用於新的TCP連接,默認爲0。 net.ipv4.tcp_tw_recycle = 1 #開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0。 net.ipv4.tcp_fin_timeout = 20 #修改默認的 TIMEOUT 時間。
接着看下TIME_WAIT數量,恢復正常。
[xxx@xxx ~]$ netstat -ntal |awk '{print $6}'|sort |uniq -c |sort -nr 54 TIME_WAIT 25 ESTABLISHED
現在訪問系統變得非常快。
現將這3個參數加入系統初始化腳本,但以後程序出現這種情況不易被發現,如何監控值得考慮。
能不動內核參數,最好別動,很多情況下默認已夠用,切忌爲了優化而優化。目前這只是暫時解決問題,治標不治本。
最後還需聯繫開發一起排查問題原因~