Linux下netstat查看處于TIME_WAIT的socket過多

在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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容