如何检查当前打开了多少个 HTTP 连接?

如何检查当前打开了多少个 HTTP 连接?

我想知道有多少人连接到我的服务器。由于我正在开发 Comet 应用程序,因此这一点很重要

答案1

有无数种方法可以做到这一点,但是:

netstat | grep http | wc -l

请记住,http 是一种无状态协议。每行可以代表一个客户端打开多个套接字来获取不同的文件(css、图像等),这些文件将在 timewait 状态下停留一段时间。

答案2

下面是一些 netstat 命令,您可以使用它们检查服务器的连接数。

要显示与服务器的所有活动的 Internet 连接,仅包括已建立的连接。

netstat -na

仅显示端口 80 上到服务器的活动 Internet 连接并对结果进行排序,允许识别来自一个 IP 的多个连接

netstat -an | grep :80 | sort

显示涉及的所有 IP 地址的列表,而不仅仅是计数。

netstat -n -p | grep SYN_REC | sort -u

答案3

如果你的 Web 服务器是 Apache,你也可以使用服务器状态页面(启用后)。

答案4

我知道这是一个老问题,但我在寻找一种简洁的方式来计算到给定端口的所有传入连接时发现了它。全面搜索端口的问题在于,您还会发现传出连接,从而使您的数字出现偏差。

例如:

tcp        0      0 10.224.38.158:8080          10.225.239.6:38194          ESTABLISHED
tcp        0      0 10.224.38.158:8080          10.225.239.6:56825          ESTABLISHED
tcp        0      0 10.224.38.158:51512         10.226.194.28:8080          ESTABLISHED
tcp        0      0 10.224.38.158:51960         10.226.194.28:8080          TIME_WAIT
tcp        0      0 10.224.38.158:46937         10.226.194.28:8080          ESTABLISHED
tcp        0      0 10.224.38.158:51331         10.226.194.28:8080          TIME_WAIT
tcp        0      0 10.224.38.158:8080          10.225.239.6:29634          ESTABLISHED

不加区分的 grep -c 或 awk | wc -l 会返回“7”,但实际上只有“3”个入站连接。无论如何,我还没有找到一个优雅的方式来做到这一点,我的 awk-fu 也不是那么好,但我最终选择了 netstat -an,使用 awk 仅打印“本地地址”列,并计算我正在寻找的端口的实例。

netstat -an | grep -c 8080

输出:91

netstat -an | awk '{print $4}' | grep -c 8080

输出:31

因此,端口 8080 上有 31 个连接的套接字。希望这能有所帮助。如果有人知道更简洁的方法来做到这一点,请分享。

相关内容