Networking

iproute 包中的“ss”命令;為什麼要查詢時間等待套接字的平板表?

  • June 13, 2012

如果這不是解決這個問題的最佳論壇,請原諒我,但它似乎與核心比與程式本身更相關。

我正在編寫一個腳本來查詢系統的開放埠,以便我們可以繪製和監控統計資訊。為此,我使用了 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 歲的核心上。

至於查詢平板,據我所知,它比其他可用方法快得離譜。

引用自:https://unix.stackexchange.com/questions/31019