Linux

獲取 TCP 建立的連接數

  • January 23, 2017

在 Linux 伺服器上可以使用netstat -tan | grep ESTABLISHED| wc -l,但這不適用於具有watch -n1.

如果伺服器不是很忙或監視間隔足夠大,這種方法可以正常工作。但是可以推薦什麼作為高負載伺服器的替代方案?

使用 /proc 減少工作量

我喜歡直接通過/proc. 這是非常有效、快速且系統友好的。

有一個名為/proc/net/tcpwhere 核心儲存 TCP 連接和偵聽列表的偽文件(核心變數表)。第 6個欄位,呼叫*st*狀態可以包含監聽條目和已建立的連接。0A``01

計算TCP 建立的連接:

通過使用grep

grep </proc/net/tcp -c '^ *[0-9]\+: [0-9A-F: ]\{27\} 01 '

通過使用awk

awk  </proc/net/tcp 'BEGIN{t=0};{if ($4 == "01") {t++;}};END{print t}'

或者

awk  </proc/net/tcp 'BEGIN{t=0};/^ *[0-9]+: [0-9A-F: ]{27} 01 /{t++};END{print t}'

通過使用sed

sed  </proc/net/tcp '/^ *[0-9]\+: [0-9A-F: ]\{27\} 01 /p;d' | wc -l

執行時間處理時間

因為這個問題代表高工作量系統。我做了一個小板凳:

以毫秒為單位的方法答案

grep 技術 2.48
awk 沒有正則表達式 ($4=="01") 2.51
但 廁所 2.67
使用正則表達式 2.93 的 awk

ss -neopt 狀態建立| wc -l Suprjami 15.14
lsof -i tcp -s tcp:已建立 Tonioc 25055.00

Ok Tonioc 的回答很慢,但他的冗長很有趣。所以顯然不能在高工作負載系統上使用。

這個工作台讓你看到如果ss是一個非常有用的專用工具,那麼詢問/proc變數可能會快很多。

引用自:https://serverfault.com/questions/646729