Networking
iproute 包中的“ss”命令;為什麼要查詢時間等待套接字的平板表?
如果這不是解決這個問題的最佳論壇,請原諒我,但它似乎與核心比與程式本身更相關。
我正在編寫一個腳本來查詢系統的開放埠,以便我們可以繪製和監控統計資訊。為此,我使用了 iproute 包中的“ss”命令。如果您執行
ss -s|grep estab
,您將收到類似於此的輸出:TCP: 296 (estab 6, closed 238, orphaned 0, synrecv 0, timewait 238/0), ports 0
我的問題與 timewait 變數有關,它顯示了處於 TIME_WAIT 狀態的計算套接字。當我試圖找出斜線後引用的數字時,它變成了搜尋原始碼的旋風冒險,最終導致我找到以下程式碼段:
printf("TCP: %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n", s.tcp_total + slabstat.tcp_syns + s.tcp_tws, sn.tcp_estab, s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws), s.tcp_orphans, slabstat.tcp_syns, s.tcp_tws, slabstat.tcp_tws, slabstat.tcp_ports );
我必須承認,我對“slabstat”應該意味著什麼的搜尋最終導致我了解了 /proc/slabinfo 上的slab 記憶體及其報告介面。
問題:slabtable 與 TIME_WAIT 套接字計算有什麼關係?我無法弄清楚為什麼會報告這個數字,因為每次我在我嘗試過的每台伺服器上執行命令時,這個數字總是為零。
看起來
tcp_tw_buckets
是最終被輪詢的,這是從 Linux 2.6.12 開始刪除的結構所以最後一個數字可能總是 0,除非它是在 7 歲的核心上。
至於查詢平板,據我所知,它比其他可用方法快得離譜。