【问题标题】:Efficient way to calculate cpu usage of multiple processes in linux在linux中计算多个进程的cpu使用率的有效方法
【发布时间】: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 使用率。

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 信息,我们可以自己显式地实现这个逻辑。

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

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

【问题讨论】:

  • 有人能说出关闭这个的原因吗。我想总结一下所有的方法,看看有没有更好的方法。当你不敏锐的时候,像使用top这样的东西也有隐藏的问题观察,我也想包括在内。有时最好公开你为什么要关闭某些东西。也不要根据你所知道的来判断,因为会有人会寻找可能看起来像基础的信息。

标签: linux performance process cpu-usage top-command


【解决方案1】:

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

【讨论】:

  • 好的。但是获取所有 PID,然后为每个 PID 从 proc/stats 获取其 cpu 使用情况,这不会花费更多时间,如果我想以粒度推送这些指标秒。
  • 如果我想在 linux 中执行此操作,shell 或 python 或任何其他语言(如 C)会更好。
  • 我认为 Python 会是一个不错的选择,至少对于第一个版本来说是这样。如果以后你需要更快的速度,你总是可以用 C 重写它的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多