在Linux中使用如下的命令查看Linux內(nèi)核中各種狀態(tài)的socket
netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
在答主電腦中如下所示:

各個狀態(tài)的socket:
CLOSED:無連接是活動的或正在進(jìn)行
LISTEN:服務(wù)器在等待進(jìn)入呼叫
SYN_RECV:一個連接請求已經(jīng)到達(dá),等待確認(rèn)
SYN_SENT:應(yīng)用已經(jīng)開始,打開一個連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
如果目前內(nèi)核中存在大量處于TIME_WAIT狀態(tài)的socket,那么說明這些socket還沒有被釋放掉,它們還占用著資源,這樣就有可能導(dǎo)致操作系統(tǒng)的負(fù)載過高,怎么解決這個問題呢?
通過調(diào)整內(nèi)核參數(shù)來解決:
vim /etc/sysctl.conf
增加如下內(nèi)容:
#表示開啟SYN cookies,當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可以防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉。
net.ipv4.tcp_syncookies = 1
#表示開啟重用,允許將TIME_WAIT狀態(tài)的socket重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉。
net.ipv4.tcp_tw_reuse = 1
#表示開啟TCP連接中的TIME_WAIT狀態(tài)的socket的快速回收機(jī)制,默認(rèn)為0,表示關(guān)閉。
net.ipv4.tcp_tw_recycle = 1
#修改系統(tǒng)默認(rèn)的TIMEOUT時間,默認(rèn)是1分鐘。
net.ipv4.tcp_fin_timeout = 30
執(zhí)行下面命令讓參數(shù)生效:
/sbin/sysctl -p