在早期運維工作中,查看服務器連接數一般都會用netstat命令。其實,有一個命令比netstat更高效,那就是ss(Socket Statistics)命令!
ss命令可以用來獲取socket統計信息,它可以顯示和netstat類似的內容。
ss的優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。原因如下:
1)當服務器的socket連接數量變得非常大時,無論是使用netstat命令還是直接cat /proc/net/tcp,執行速度都會很慢。可能你不會有切身的感受,但請相信我,當服務器維持的連接達到上萬個的時候,使用netstat等於浪費 生命,而用ss才是節省時間。
2)而ss快的秘訣在於它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,可以獲得Linux內核中第一手的信息,這就確保了ss的快捷高效。當然,如果你的系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍慢(但仍然比 netstat要快)。
為了驗證ss比netstat更快更高效,可以如下做幾個實驗看看效果:
幾乎所有的Linux系統都會默認包含netstat命令,但並非所有系統都會默認包含ss命令。
netstat命令是net-tools工具集中的一員,這個工具一般linux系統會默認安裝的;ss命令是iproute工具集中的一員;
net-tools是一套標准的Unix網絡工具,用於配置網絡接口、設置路由表信息、管理ARP表、顯示和統計各類網絡信息等等,但是遺憾的是,這個工具自2001年起便不再更新和維護了。
iproute,這是一套可以支持IPv4/IPv6網絡的用於管理TCP/UDP/IP網絡的工具集
如果沒有ss命令,可以如下安裝:
[root@wang ~]# yum install iproute iproute-doc
當服務器維持30000個socket連接時,使用netstat和ss命令統計連接數的耗時情況如下:
[root@wang ~]# netstat -at | wc -l //耗時15.60秒
[root@wang ~]# ss -atr | wc -l //耗時5.40秒(未利用tcp_diag)
[root@wang ~]# ss -atr | wc -l //耗時0.47秒(利用tcp_diag)
