Docker 容器中無ss命令解決方法

2022-06-23 20:21:08 字數 1161 閱讀 6951

在早期運維工作中,檢視伺服器連線數一般都會用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命令,可以如下安裝:

[[email protected] ~]# yum install iproute iproute-doc

當伺服器維持30000個socket連線時,使用netstat和ss命令統計連線數的耗時情況如下

[[email protected] ~]# netstat -at | wc -l     //耗時15.60秒 

[[email protected] ~]# ss -atr | wc -l          //耗時5.40秒(未利用tcp_diag) 

[[email protected] ~]# ss -atr | wc -l         //耗時0.47秒(利用tcp_diag)