監控與性能分析系列:2)netstat、ss對比使用

從下面這個圖來看,netstat和ss都是網絡相關的監控,netstat在協議棧中每一層都可以做監控統計:TCP、路由表、網絡接口、協議等,但是在Linux中,netstat已經不爲推薦,取而代之的是ss。
 
1)netstat參數和使用
常用參數-anplt
-a 顯示所有活動的連接以及本機偵聽的TCP、UDP端口
-l 顯示監聽的server port
-n 直接使用IP地址,不通過域名服務器
-p 正在使用Socket的程序PID和程序名稱
-r 顯示路由表
-t 顯示TCP傳輸協議的連線狀況
-u 顯示UDP傳輸協議的連線狀況
-w 顯示RAW傳輸協議的連線狀況

在Linux下,raw格式的數據通常可以通過/proc/net/dev獲得。在Windows平臺,netstat信息可以通過IP Helper API的GetTcpTable和GetUdpTable函數獲得。
2)ss(socket statistics)參數和使用
常用參數和netstat類似,如-anp
-a顯示所有的sockets
-l顯示正在監聽的
-n顯示數字IP和端口,不通過域名服務器
-p顯示使用socket的對應的程序
-t只顯示TCP sockets
-u只顯示UDP sockets
-4 -6 只顯示v4或v6V版本的sockets
-s打印出統計信息。這個選項不解析從各種源獲得的socket。對於解析/proc/net/top大量的sockets計數時很有效
-0 顯示PACKET sockets
-w 只顯示RAW sockets
-x只顯示UNIX域sockets
-r嘗試進行域名解析,地址/端口
 
統計信息:
 
ss還可以使用IP地址篩選如ss src xxxxIP:port,以及使用端口篩選ss dport OP PORT,OP支持的運算符有le ge eq ne lt gt。

3)原理對比
ss比netstat快的主要原因是,netstat是遍歷/proc下面每個PID目錄,ss直接讀/proc/net下面的統計信息。所以ss執行的時候消耗資源以及消耗的時間都比netstat少很多。
當服務器的socket連接數量非常大時(如上萬個),無論是使用netstat命令還是直接cat /proc/net/tcp執行速度都會很慢,相比之下ss可以節省很多時間。ss快的祕訣在於,它利用了TCP協議棧中tcp_diag,這是一個用於分析統計的模塊,可以獲得Linux內核中的第一手信息。如果系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍微慢但仍然比netstat要快。
同樣的大量socket連接情況下,netstat和ss獲取同樣的統計數據時的耗時,ss明顯比netstat少很多。我們也可以簡單測試一下在少數socket情況下(基本無差別):
time netstat -atn以及time ss -atn對比
 
netstat屬於net-tools工具集,ss屬於ipoute工具集。替換方案如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章