获取Linux进程资源使用情况(CPU、磁盘、网络)

18

我希望使用/proc每秒钟找到特定进程的资源使用情况。这些资源包括CPU时间、磁盘使用和网络使用。我查看了/proc/pid/stat文件,但我不确定是否得到了所需的详细信息。我想要所有3种资源使用情况,并且我想每秒监视它们。


1
我想要所有3个资源(CPU、磁盘和网络)的信息。 - sethu
/proc/pid/stat 可以给我 CPU 时间,但我只能收集整个机器的总网络和磁盘统计信息,而不是特定进程的。 - sethu
没有办法按进程基础收集磁盘和网络统计数据,这主要是由于磁盘和网络流量的处理方式是内核工作。例如,对磁盘的读写是通过内核缓冲区进行的,因此在实际刷新到磁盘之前,多个进程可能会访问同一个缓冲区。对于读取操作也是一样,多个进程可能会读取同一个文件,只有第一个进程会导致实际的磁盘访问,而第二个进程只会获取内核缓冲区的指针。 - Soren
有两个工具叫做iostat和nethog,它们为我提供了这种功能。我对Linux的内部工作不太确定。我会阅读相关资料并尝试理解,以便在某个地方设置钩子。 - sethu
为了每秒监控,您可以使用 watch - etuardu
这是一个非常好的问题,我很惊讶居然没有答案。有htop、iotop和speedometer等工具,但没有一个工具将它们全部整合在一起,这太糟糕了,因为这将对诊断错误程序非常有帮助。 - stu
8个回答

8

一些较新的内核有 /proc/<pid_of_process>/io 文件,记录了 IO 统计信息。尽管它在 man proc 中没有文档,但您可以自己尝试理解这些数字。

希望对您有所帮助。 Alex。


我正在使用CentOS 5.6,它是一个相当老的内核。我在那里找不到IO统计信息!! - sethu

2

请查看glances以完成结账。

它可以在一个屏幕上显示CPU、磁盘和网络状态。虽然不是针对每个进程,但比查看三个单独的工具更好。


1

getrusage() 可以完成 CPU、内存和磁盘等操作。

man 2 getrusage

我不知道网络方面的。


很好,但是有没有一个系统命令可以实现这个功能,并报告给定PID的所有使用细节? - Bernd Wechner

0

不要认为有一种方法可以按进程基础获取磁盘和网络信息。

您能得到的最好的是全局磁盘和网络,以及每个进程的CPU时间。

所有文档都记录在man proc中。


你可以追踪一些IO信息(例如查看iotop实用程序),但并非所有内核都支持。 - user149341
iotop需要一个更新的内核版本。我看到了iotop用于io和nethog用于网络统计,但我需要重新编译一个更新的内核版本才能使用它们。这是我最后的选择。 - sethu

0

这种技术需要系统重新启动,而且必须由root启用系统范围内的统计信息收集。 - Valerio Schiavoni
使用-x-X选项时,我只能看到minflt/s majflt/s %user %system nswap/s CPU的统计信息,而没有磁盘或网络统计信息。例如,如果我还指定了-n DEV以查看网络统计信息,则sar会给出单独的行和单独的标题。我在RHEL 5.7上进行了测试。 - haridsv

0

解决这类问题的最佳方法是查找执行类似监控和报告功能的工具的源代码。虽然不能保证它们直接使用/proc,但它们会引导您找到有效的解决方案。 对于您的情况,可以考虑使用 top(1)、iotop(8) 和 nethogs(8)。



0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接