有没有类似top的命令显示正在运行的进程的网络带宽和文件访问

有没有类似top的命令显示正在运行的进程的网络带宽和文件访问

例如,我们希望看到:

PROCESS       IF       TX       RX       FILE(regular) R/W
prog1         eth0     200kB/s  12kB/s   --            --
              wlan0    12kB/s   100kB/s  --            --
              --       --       --       file1         R
              --       --       --       file2         R
              --       --       --       file3         W
prog2         eth0     0kB/s    200kB/s  --            --
              --       --       --       file4         W
              --       --       --       file5         W

这可能吗? nethogs 仅显示 TX/RX,而 lsof 仅显示文件访问。

我目前正在做一个两步过程,如下所示:

sudo nethogs
sudo lsof -a -d 1-999 -c hogging_program /

有没有更好的办法?

答案1

尝试伊夫托普对于网络和 pidstat 来自系统状态

对于您选择的发行版来说,两者都可能很容易安装(apt-get 等)。

答案2

atop尽管它不像通过文件句柄分解 I/O 那样具体,但它会以某种方式为您提供您想要的东西。要获得完整的网络统计信息,您必须应用内核补丁。

答案3

据我所知,没有。您想要完成的任务可以像您当前正在做的那样组合多个命令,尽管我不知道其他应用程序可以为您提供更易于解析的数据(编辑:另一个答案建议 iftop ,我不知道添加了一个可管道的单行文本输出模式)。通过一些巧妙的 shell 脚本、管道数据和一些手动格式化,您至少可以接近您正在寻找的输出。

您对显示网络和文件统计信息的搜索(这些统计信息将由操作系统的两个不同部分提供)似乎与“UNIX 哲学”的某些租户相悖:

  • 让每个程序做好一件事。要完成一项新工作,请重新构建,而不是通过添加新功能来使旧程序复杂化。
  • 期望每个程序的输出都成为另一个未知程序的输入。不要用无关的信息来扰乱输出。

这在输出文本的程序(例如 lsof)中尤其明显。您通常不会看到 *NIX 控制台程序提供与通过管道传输到另一个程序的数据一样多的用户界面,也可能不会看到使用 shell 命令的脚本,例如创建自己专门定制的输出。

多年后,道格·麦克罗伊总结了他之前的言论:

编写只做一件事并把它做好的程序。编写程序以协同工作。编写程序来处理文本流,因为这是一个通用接口。

虽然它可能无法帮助您获得所需的格式化输出,UNIX 编程的艺术是一本很好的读物,我在哪里找到了这些引用的来源。

答案4

您可能还想考虑网络猪这是一个积极维护的项目,标题是net top工具。

相关内容