今天發現一個很好用的命令:ss
ss是socket statistics 的縮寫,可以用來獲取socket的統計信息,顯示內容和netstat類似, 但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。
ss快的祕訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,可以獲得Linux 內核中第一手的信息,這就確保了ss的快捷高效。當然,如果你的系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍慢(但仍然比 netstat要快)。
ss命令部分參數項:
ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )'
ss -o state established '( dport = :http or sport = :http )'
ss -x src /tmp/.X11-unix/*
ss -s 列出當前socket詳細信息
其他參數項目man下。
查看socket信息:
特別要注意timewait這個項,如果值比較大的話,說明有很多處於TIME_WAIT狀態的連接,系統負載會變大,這時候要系統的連接情況調優。
首先可以對系統內核參數優化下:
net.ipv4.tcp_tw_reuse
當服務器需要在大量TCP連接之間切換時,會產生大量處於TIME_WAIT狀態的連接。TIME_WAIT意味着連接本身是關閉的,但資源還沒有釋放。將net_ipv4_tcp_tw_reuse設置爲1是讓內核在安全時儘量回收連接,這比重新建立新連接要便宜得多。
net.ipv4.tcp_fin_timeout
這是處於TIME_WAIT狀態的連接在回收前必須等待的最小時間。改小它可以加快回收。
然後檢查web服務器的連接參數設置情況,具體就不多說咯。
查看所有tcp socket:
又快信息又全,是不是很方便啊!