我的机器上运行着 Ubuntu 14.04。我需要获取在所需监控间隔内运行的进程的 CPU 利用率。
我尝试了以下方法,但有几个问题。
我考虑按如下方式计算两点之间的有效使用量:
进程运行时间(P)= utime + stime + cstime + cutime
总 CPU 运行时间(C)= 我从 /proc/stat 获取此值。
考虑监控间隔 t,CPU 利用率计算如下
CPU 使用率 = (P2 - P1)/(C2 - C1)* 100
问题:
- 读取的 CPU 使用率值包括所有 4 个(在我的计算机上)核心的总和。但顶部显示的值除以 4。我发现有一个 Irix 模式,如果打开(默认情况下),则给出乘以 4 的值。 我想知道哪个值是正确的?我应该将我的值乘以 4 吗?。
- 我想获取采样周期为 1ms 的使用情况。但显然 /proc/stat 的更新速率并不相同,而且两者都不是 top。使用此方法可以达到的最小采样周期是多少?
请告诉我。另外,如果有任何其他建议,请告诉我。我们是否可以编写一个内核模块来按照我所需的采样率执行相同操作?是否存在这样的模块?
谢谢
Ankit
答案1
使用 cpustat 怎么样?它能够监控特定进程,并允许以 0.3333Hz 以上的速率进行监控。-a 选项允许以所有 CPU 刻度(而不是仅一个 CPU 刻度)来指定总 CPU 时间。
例如,在 compiz 进程中每秒进行 2 次采样,共计 120 个样本:
cpustat -a -p $(pidof compiz) 0.5 120
我为 Ubuntu 开发了此工具,用于测量低功耗设备上的 CPU 利用率,因此我对其进行了优化,以尽可能减少 CPU 开销。有关更多信息,请参阅cpustat 项目页面