确定出站流量的发起流程

确定出站流量的发起流程

我可以看到我的服务器正在发送大量流量。如果我转到 netstat -apln | grep httpd,我可以看到所有流量都流向一个 IP。

有没有办法可以查看使用哪个脚本/文件将数据发送到该 IP?或者一般情况下是任何 IP?

我知道 tcpdump 可以查看数据包但似乎没有办法做到这一点。

答案1

netstat命令只能告诉您当前打开了哪些连接,但无法告诉您每个连接发送和接收了多少流量。要找出哪些连接正在传输大部分数据,您需要使用其他工具,例如iftoptcpdump

接下来要做什么在很大程度上取决于每个连接的生命周期以及建立连接的一端。如果您的一端是服务器,那么您应该能够识别属于服务器进程的监听套接字。

如果它确实是一个httpd过程(正如您在问题中暗示的那样),那么您的 Web 服务器访问日志就是要查看的地方。需要记住的一点是,每个请求仅在该请求的传输完成后才会被记录。如果您正在提供数 MB 大小的文件,这可能会产生很大的不同。

如果您的终端恰好是客户端,那么您将看不到监听套接字,但如果连接持续时间较长,那么netstat一旦您确认了哪个连接正在消耗带宽,您就可以使用 找到连接和相应的进程。

如果上述调查导致您发现大多数流量发生在从您端建立的短暂连接上,那么netstat不足以确定哪个进程负责。该特定场景已在一个老问题

答案2

您可以尝试使用它lsof来检查哪些进程正在使用网络连接。

列出所有网络连接:lsof -i

列出所有 TCP 或 UDP 连接: lsof -i tcp; lsof -i udp;

监听特定端口的进程:lsof -i :80

列出进程正在使用的网络文件:lsof -i -a -p 234

列出以ssh开头的进程打开的网络文件:lsof -i -a -c ssh

答案3

网猪报告每个进程使用的带宽,每秒更新一次。

答案4

这是一个有趣的问题,看起来内核默认不存储每个进程的网络吞吐量利用率的计数器,但是内核模块 netatop[1] 增加了此功能,然后可以使用 atop[2] 进行日志记录和报告。


[1]:参见http://www.atoptool.nl/netatop.php
[2]参见http://www.atoptool.nl/

相关内容