Linux系统运维命令:查看http的并发请求数及其TCP连接状态(使用netstat结合awk和sort,组合命令实现功能)

一、需求

二、解决方法

(一)解决思路

(二)命令

三、实例演示和命令解释

(一)实例演示

(二)命令解释

四、扩展

一、需求
用户访问一个视频监控平台的web服务特别频繁,据客户说,有大概2000个用户,要随机访问这个视频监控平台,这样对带宽的要求非常大。因此,他们需要查看到底有多少个http的并发请求,并想了解这些请求是不是活跃的。

二、解决方法
(一)解决思路
这个本来是个网络问题,但是客户给我们提出了这个请求,我们只能先办法满足这个要求。

可以使用netstat结合awk,组合命令来实现:netstat显示的TCP连接状态是底层的TCP连接状态,,然后通过分析TCP连接状态来间接了解HTTP的并发情况。

这个web服务的端口是26039,因此要针对这个端口进行过滤。

(二)命令
经过反复斟酌,考虑使用netstat结合awk和sort,形成组合命令,实现需求,如下:

netstat -n --tcp | awk '/:26039/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rn

  

三、实例演示和命令解释
(一)实例演示
直接在系统中输入命令,如下:

[root@ecs-52a1 home]# netstat -n --tcp | awk '/:26039/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rn
TIME_WAIT 1
ESTABLISHED 7
[root@ecs-52a1 home]#
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# date
Sun Feb 25 22:37:05 CST 2024
[root@ecs-52a1 home]#
过一会再运行

[root@ecs-52a1 home]# date
Sun Feb 25 22:37:26 CST 2024
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# netstat -n --tcp | awk '/:26039/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rn
TIME_WAIT 2
FIN_WAIT2 2
ESTABLISHED 7
[root@ecs-52a1 home]#

(二)命令解释
本命令的作用是:统计通过端口26039 (视频监控平台的HTTP端口)的TCP连接的不同状态的数量,并按数量降序排序。

1、netstat -n --tcp

netstat:这是一个命令行工具,用于显示网络连接、路由表、接口统计等网络相关信息。
(1)-n:这个选项告诉 netstat 以数字形式显示地址和端口号,而不是尝试解析主机名、服务名等。使用数字形式可以加快命令的执行速度,因为它避免了DNS查找和服务名到端口号的转换。
(2)--tcp:这个选项限制netstat的输出只显示TCP连接的信息。
2、|
这是一个管道符,用于将前一个命令的输出作为下一个命令的输入。在这个例子中,netstat -n --tcp的输出被传递给awk命令进行处理。
3、awk '/:26039/ {++S[$NF]} END {for(a in S) print a, S[a]}'
awk是一个强大的文本处理工具,用于模式扫描和文本/数据提取。
(1)/:26039 /:这是awk的模式部分,它匹配包含:26039 (即端口26039)的行。这通常意味着这些行表示的是通过HTTP默认端口的连接。
(2){++S[$NF]}:这是awk的动作部分,对于匹配到模式的每一行,它都会执行这个动作。$NF是awk中的一个特殊变量,代表当前行的最后一个字段(通常是TCP连接状态,如LISTEN、ESTABLISHED等)。++S[$NF]将数组S中以TCP状态为索引的值加一,从而统计每种状态出现的次数。
(3)END {for(a in S) print a, S[a]}:这是awk的结束部分,当所有行都被处理完后,它会执行这个动作。这部分代码遍历数组S,打印出每个TCP连接状态(即数组S的索引a)以及它出现的次数(即数组S的值S[a])。
4、| sort -rn
sort命令用于对文本行进行排序。
-r 选项表示逆序排序,即从大到小。
-n 选项表示按数值排序,而不是按字符排序(这对于数字来说很重要,因为按字符排序可能会导致例如“10”在“2”之前)。

四、扩展
在实际使用中,你可能会用到的是其他端口,你可稍微做些修改,就可以适合您的应用了。比如,http接口默认是80端口,经常会用到,你可以用如下命令即可:

netstat -n --tcp | awk '/:26039/ {++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rn

  

原文链接:https://blog.csdn.net/weixin_70208651/article/details/136288714

posted @ 2024-07-09 09:15  人生苦短,知足常乐!  阅读(16)  评论(0编辑  收藏  举报