HTML教程10:Linux下查看并发连接数
站长提醒:徒弟们注意了,awk要掌握,这个东西很重要的,关于shell的东西,我都汇总到了《趣谈shell》,有需要的请找我来要。
使用下面shell语句即可查看当前linux系统中并发连接数:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
给大家简单介绍一下awk的用法吧。
awk不是shell的子民,shell和awk之间是宗主国与藩属国之间的关系,犹如朝鲜属于明朝和清朝的藩属国。
awk不是命令而是编程语言,它与shell一样,有自己的语法规范,可以定义变量、定义数组,执行条件判断。
awk的操作对象是文件行,也就是说,awk是逐行处理的,处理完当前行,再处理下一行。awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
(1)/^tcp/:表示搜索以tcp开头的行,然后awk自动会将每行数据以空格为分隔符进行切分成列。
(2)$NF是内置变量,搜索到以tcp开头的行,awk自动会切分成列。$NF变量引用最后一列,可能是ESTABLISHED,也可能是TIME_WAIT,如下所示:
[root@root~]# netstat -n
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.31.250.129:6379 47.244.242.115:56516 ESTABLISHED
tcp 0 0 127.0.0.1:52294 127.0.0.1:9200 ESTABLISHED
tcp 0 0 172.31.250.129:52378 47.244.242.115:6379 ESTABLISHED
tcp 0 0 127.0.0.1:9200 127.0.0.1:59592 ESTABLISHED
tcp 0 0 127.0.0.1:9000 127.0.0.1:45702 TIME_WAIT
tcp 0 0 127.0.0.1:59596 127.0.0.1:9200 ESTABLISHED
tcp 0 0 127.0.0.1:9200 127.0.0.1:59650 ESTABLISHED
tcp 0 0 127.0.0.1:9200 127.0.0.1:59630 ESTABLISHED
tcp 0 0 127.0.0.1:59624 127.0.0.1:9200 ESTABLISHED
tcp 0 0 172.31.250.129:38966 47.244.242.115:6379 ESTABLISHED
tcp 0 0 127.0.0.1:9200 127.0.0.1:52348 ESTABLISHED
(3)++S[$NF]:新建数组S,此时数组的下标不是0,1,2...,而是$NF的值,也就是说,下标是ESTABLISHED、TIME_WAIT等tcp的状态。由于awk是逐行处理的,处理完当前行,再处理下一行,所以++S[$NF]的作用是累加ESTABLISHED、TIME_WAIT等tcp状态的数量。
(4)END:表示awk逐行统计完毕之后,打印出统计结果,而统计结果存放在数组S中。
(5){for(a in S) print a, S[a]}:表示打印数组s里面存放的统计结果。
总之,上述整个shell命令的执行结果如下所示:
[root@root ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 169
TIME_WAIT 25
由此,可以查看Linux系统中并发连接数。