Linux查看並發連接數
指令(查看Apache的並發請求數及其TCP的連接狀態)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
結果
[root@izbp10ebr6tsvo83iahgzdz ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' CLOSE_WAIT 3 ESTABLISHED 87 FIN_WAIT2 9 TIME_WAIT 25
語句解析
命令的核心是awk指令簡單的說就,用awk以 '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'規則去解析netstat -n的結果
第一步:netstat -n,結果如下
[root@izbp10ebr6tsvo83iahgzdz ~]# netstat -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.0.162:57616 100.100.30.25:80 ESTABLISHED tcp 0 0 192.168.0.162:6379 120.26.55.92:55830 ESTABLISHED tcp 0 0 192.168.0.162:55764 120.26.55.92:6379 ESTABLISHED tcp 0 0 192.168.0.162:48556 47.111.164.6:9092 ESTABLISHED tcp 0 0 192.168.0.162:55776 120.26.55.92:6379 ESTABLISHED tcp 0 0 192.168.0.162:50172 47.111.219.84:3306 ESTABLISHED tcp 0 0 192.168.0.162:55766 120.26.55.92:6379 ESTABLISHED tcp 0 0 192.168.0.162:443 101.247.3.249:41142 ESTABLISHED tcp 0 0 192.168.0.162:55792 120.26.55.92:6379 ESTABLISHED tcp 0 0 192.168.0.162:6379 120.26.55.92:55832 ESTABLISHED tcp 0 0 192.168.0.162:443 101.247.3.249:41082 FIN_WAIT2 tcp 0 0 192.168.0.162:27017 119.61.6.133:53930 ESTABLISHED tcp 0 0 192.168.0.162:34212 120.26.55.92:27017 ESTABLISHED tcp 0 0 192.168.0.162:55830 120.26.55.92:6379 ESTABLISHED tcp 0 0 192.168.0.162:443 49.98.141.94:23375 TIME_WAIT tcp 0 0 192.168.0.162:6379 120.26.55.92:55782 ESTABLISHED
這里特別留意下第一列Proto和最后一列state
第二步:awk的解析,規則是 '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}',awk是逐行解析;
2-1- /^tcp/,正則匹配當前行數據是以tcp開頭
2-2- $NF,是指當前行的最后一個字段,比如ESTABLISHED
2-3- S[$NF],以$NF為index,建立數組S
2-4- {++S[$NF]} ,每當找到一個$NF,就在給數組(下標是$NF)的值加1;
2-5- END, 表示執行完'/^tcp/ {++S[$NF]} ,在執行后面指令
2-6- {for(a in S) print a, S[a]},這是一個for循環語句,表示遍歷數組S,同時打輸出下標和值
2-7- awk '...' 解析並輸出結果
簡單版
netstat -na | grep ESTABLISHED | wc -l 查找連接狀態為ESTABLISHED 的連接信息,並統計數量(wc表示 word count,-l表示統計行數line )
[root@izbp10ebr6tsvo83iahgzdz ~]# netstat -na | grep ESTABLISHED | wc -l 114
END