1. 程式人生 > >解決-伺服器Linux存在大量time_wait的問題,導致服務效能問題,甚至嚴重的將訪問不了應用

解決-伺服器Linux存在大量time_wait的問題,導致服務效能問題,甚至嚴重的將訪問不了應用

netstat -an檢視到大量的TIME_WAIT狀態的解決辦法

近期伺服器出現大量time_wait的TCP連線造成伺服器連線數過多而最終導致tomcat假死狀態。連線伺服器檢視連線數的時候提示如下。

[[email protected] apache-tomcat-7.0.53]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

TIME_WAIT 521

FIN_WAIT2 6

ESTABLISHED 133

很明顯可以看出是請求太多頻繁,主要由於後端伺服器之間是通過rest請求相互呼叫的,而java伺服器回收tcp執行緒速度比較慢,雖然已經有顯性的關閉連線了,但是實際在調

解決辦法是修改Linux核心引數,

修改系統socket最大連線數,在檔案/etc/security/limits.conf最後加入下面兩行:

* soft nofile 32768

* hard nofile 32768

或者縮小2MSL的時長、允許重用處於TIME_WAIT狀態的TCP連線、快速回收處於 TIME_WAIT狀態的TCP連線,修改/etc/sysctl.conf,新增如下幾行:

 

#改系統預設的TIMEOUT時間
net.ipv4.tcp_fin_timeout=2

#啟重用,允許將TIME_WAIT sockets重新用於新的TCP連線 預設為0表示關閉
net.ipv4.tcp_tw_reuse=1

#開啟TCP連線中TIME_WAIT sockets的快速回收 預設為0 表示關閉
net.ipv4.tcp_tw_recycle=1

對於windows環境,可通過修改登錄檔進行配置:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

新增一個DWORD型別的值TcpTimedWaitDelay,值可以根據實際情況配置。

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters

新增一個DWORD型別的值MaxUserPort ,值可以根據實際情況配置。

 

上面這些引數根據實際情況進行配置。

 

http://www.cnblogs.com/hjwublog/p/5114380.html