Linux
獲取 TCP 建立的連接數
在 Linux 伺服器上可以使用
netstat -tan | grep ESTABLISHED| wc -l
,但這不適用於具有watch -n1
.如果伺服器不是很忙或監視間隔足夠大,這種方法可以正常工作。但是可以推薦什麼作為高負載伺服器的替代方案?
使用 /proc 減少工作量
我喜歡直接通過
/proc
. 這是非常有效、快速且系統友好的。有一個名為
/proc/net/tcp
where 核心儲存 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
變數可能會快很多。