计算 cpu 在 linux 中使用多个进程的有效方法

Efficient way to calculate cpu usage of multiple processes in linux

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

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

b)vmstat 不显示进程明智的 cpu 用法。

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

top -b -n 2 -d 1 | grep 'mysqld' |尾-n 1

对于 n=1,top 命令的行为更像 ps,它给出了自启动以来进程的 cpu 使用情况,因此使用 n=2 并忽略 tail 的第一行将在那一刻给出 cpu 用法。

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

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

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

因此,对多进程执行此操作的一种方法是维护映射类型的结构,然后仅采用 cpu 那些仅出现在第二个 time.But 的进程的用法,不确定这是否是 efficient.Doing 每次特定进程的顶部显然不够有效我想还是它与一个顶部有多个进程的 grep 相同。

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

How to calculate the CPU usage of a process by PID in Linux from C?

哪个是更好的选择?

您应该按照您已经发现的那样使用 /proc 来完成。或者,如果您选择的语言提供了一个高级库,那么也许可以使用一些高级库。解析 pstop 的输出并没有给你带来任何好处。您需要的数据都在 /proc 中,您只需要小心检查每个进程随时间的身份,以防 PID 在您收集数据时被回收(在大多数系统中 PID 回收不会发生几秒钟的时间,所以它是可行的)。