是否有工具或命令可以帮助捕获特定进程(PID)的带宽消耗,就像系统监视器一样,但对于单个特定进程,如以下屏幕截图所示
我会对至少将此类历史记录导出到文件的命令行工具感到满意。 (我使用的是 Ubuntu 16.04)
更新1
我至少想要一个像这样的工具网猪可以输出到文件中(Nethogs 仅捕获 TCP 连接)一个针对 TCP 和 UDP 的类似工具会很棒
更新2
任何脚本、其他工具(如wireshark)的组合也会有所帮助。
答案1
你看过上面的工具吗?根据它的手册页:
“如果已安装内核模块‘netatop’,则会显示每个进程的网络负载。”
答案2
因此,由于我没有找到任何简单/明确/“立即开始运行”的解决方案,我不得不做出一个适度的解决方案,进行修复、重构和更多选择。
答案3
Nethogs 可能就是您想要的。
Debian/Ubuntu/等
apt-get install nethogs
或 rhel/cent/等
yum install nethogs
您在网络接口上运行它,例如
nethogs eth0
然而,它的输出是每个进程发送和接收的带宽。您还可以监控多个接口。
描述 NetHogs 是一个小型“网顶”工具。它不像大多数此类工具那样按协议或按子网分解流量,而是按进程对带宽进行分组,并且不依赖于加载的特殊内核模块。因此,如果突然出现大量网络流量,您可以启动 NetHogs 并立即查看哪个 PID 导致了这种情况,如果是某种旋转进程,则将其终止。
更新:OP要求输出到文件。你可以用 nethogs 来做到这一点:
nethogs -d 1 eth0 > output.txt
-d 指定写入之间的时间间隔...因此您可以执行上述命令并获得所需的结果。
更新2OP 说 TCP 和 UDP 是必需的。然后尝试使用网络顶。有点老了,但是有 TCP 和 UDP。它可以在 deb/ubuntu 中使用,我认为是 RHEL 衍生品。例子:
jnettop --display text -t 5 --format CSV
这应该可以通过管道传输到文件。
答案4
nethogs 工具将有助于监控每个进程的网络流量。您可以使用nethogs -t
。这里的-t表示遍历。
要显示发送和接收总数,请使用以下命令。
nethogs -t -v3
您可以将输出重定向到文件中以进行进一步的进程过滤。