获取打开的连接数

Getting count of open connections

我已经通过 fabric 自动部署了我的应用程序,并且需要添加一个新步骤,我将我的应用程序从负载均衡器中的轮换中取出,然后观察来自均衡器的入站连接,直到它们变为 0 . 问题是,我不确定如何获取入站连接数。

我可以使用 tcpdump 来查看我的端口 POST。然而,这有点难以在织物中使用。我想要的只是 运行 一个带有计时器的循环,该循环不断获取活动入站连接的数量并在 0 时退出。有人做过这样的事情吗?或者也许有人会知道我如何从 shell 中实现这一点,然后我可以将其放入织物中?

netstat 是获取此信息的最简单方法之一,但是,正如您所指出的,仅使用 grep 解析 netstat 的输出会产生次优结果,因为它将匹配传入和传出连接(至少没有足够复杂的搜索表达式,或使用 cut 等进行预处理)。我建议改用这条路线:

netstat -ap | awk ' == "tcp" &&  ~ /:(80|443)$/' | wc -l

这将计算基于 TCP 的连接,并且本地端连接到端口 80 或 443,这将与传入连接相对应。将 </code> 替换为 <code> 以捕获传出连接。

某处可能会有细微的变化,但是,这就是现在的工作方式。

netstat -an | awk ' == "tcp" &&  ~ /:(80|443)$/' | wc -l
netstat -an | awk ' == "tcp" &&  ~ /:(80|443)$/' | wc -l

根据当前的 netstat 帮助,-n means don't resolve names-p only means display PID/Program name for sockets。因此,上述解决方案中 awk 中对 </code> 和 <code> 的检查将失败。

此外,上述命令还returns关闭了端口和其他未建立的连接。所以,我们应该改用这个:

netstat -an | awk ' == "tcp" &&  ~ /:(80|443)$/ && ==ESTABLISHED' | wc -l
netstat -an | awk ' == "tcp" &&  ~ /:(80|443)$/ && ==ESTABLISHED' | wc -l

此外,这也有效::

netstat -ap | awk ' == "tcp" &&  ~ /:(http|https)$/' | wc -l
netstat -ap | awk ' == "tcp" &&  ~ /:(http|https)$/' | wc -l