2

我需要计算给定服务器上多个进程的 cpu 使用率。几个选项如下

a)虽然我们可以使用ps来查找进程的 cpu 使用情况,但 ps 给出了进程在其生命周期内的 cpu 使用情况,而不是即时的。当然,当我的意思是即时时,我的意思是一些小的特定时期,比如 1 秒左右,因为在任何给定时刻,cpu 是否被进程使用。

b)vmstat 不显示进程明智的 cpu 使用情况。

c) 我们可以使用 top 来查找进程的 cpu 使用率。

顶部 -b -n 2 -d 1 | grep 'mysqld' | 尾-n 1

对于 n=1,top 命令的行为更像 ps,其中它给出了自启动以来进程的 cpu 使用率,因此使用 n=2 并通过尾部忽略第一行将在那个时刻给出 cpu 使用率。

https://superuser.com/questions/609949/what-are-the-methods-available-to-get-the-cpu-usage-in-linux-command-line

但是忽略前几行将不适用于多个 grep 字符串(进程名称),并且进程中的位置可能并不总是出现在顶部,因为它们不断改变它们的状态。

顶部 -b -n 2 -d 1 | grep 'mysqld\|apache' | 尾-n 1

因此,对多个进程执行此操作的一种方法是维护一种映射类型的结构,然后仅使用仅第二次出现的那些进程的 cpu 使用率。但不确定这是否有效。每次都针对特定的我想这个过程显然不够高效,或者它与一个顶部有多个进程的 grep 相同。

4)由于 top 内部使用 /proc/stats 信息,我们可以自己显式地实现这个逻辑。

如何从 C 中通过 PID 在 Linux 中计算进程的 CPU 使用率?

哪一个可能是更好的选择?

4

1 回答 1

0

您应该使用/proc您已经发现的方法。或者,如果您选择的语言提供了一个,也许可以使用一些更高级别的库。解析 and 的输出pstop不会为您赢得任何东西。您需要的数据都在里面/proc,您只需要小心检查每个进程的身份,以防您在收集数据时回收 PID(在大多数系统上,PID 回收不会在几秒钟内发生) ,所以它是可行的)。

于 2015-12-05T11:01:12.370 回答