【发布时间】:2015-12-05 10:50:26
【问题描述】:
我需要计算给定服务器上多个进程的 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 使用率。
但是忽略前几行将不适用于多个 grep 字符串(进程名称),并且进程中的位置可能并不总是出现在顶部,因为它们会不断更改其状态。
顶部 -b -n 2 -d 1 | grep 'mysqld\|apache' |尾 -n 1
因此,对多个进程执行此操作的一种方法是维护一种映射类型的结构,然后仅使用仅第二次出现的那些进程的 cpu 使用率。但不确定这是否有效。每次都做一个顶部对于一个特定的进程显然不够有效,我想还是它与一个顶部有多个进程的 grep 相同。
4) 由于 top 内部使用 /proc/stats 信息,我们可以自己显式地实现这个逻辑。
How to calculate the CPU usage of a process by PID in Linux from C?
哪一个可能是更好的选择?
【问题讨论】:
-
有人能说出关闭这个的原因吗。我想总结一下所有的方法,看看有没有更好的方法。当你不敏锐的时候,像使用top这样的东西也有隐藏的问题观察,我也想包括在内。有时最好公开你为什么要关闭某些东西。也不要根据你所知道的来判断,因为会有人会寻找可能看起来像基础的信息。
标签: linux performance process cpu-usage top-command