从C程序获取CPU利用率统计信息


8

我想从C程序中读取CPU使用率统计信息,我对CPU使用率,窃取时间等感兴趣。这些统计信息显示在top命令的第三行中。

我试图topawktop -n 1 -b | awk '{print $0}')解析输出,但似乎top在开始显示正确的统计信息之前,总是给出相同的“虚构”值。

有没有办法通过代码或通过解析某些命令的输出来获取CPU利用率统计信息?

编辑:

该平台是Linux

谢谢。


可以,但是没有标准方法。精确定位目标操作系统。
jlliagre 2011年

Answers:


5

您想阅读的前几行/proc/stat。您需要阅读两次,相隔一定时间,然后从第二组减去第一组数字。这些行如下所示:

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

第一行是所有内核的汇总。下一行显示了每个核心。当您看到以开头的行时intr,您就知道要停止解析。

每个数字是CPU在特定状态下所花费的时间。单位通常为百分之一秒。这些字段是usernicesystemidleiowaitirqsoftirqstealguest,和guest_nice

当然,权威文档是源代码。如果您手头有Linux内核源代码的副本,请查看fs/proc/stat.c,特别是show_stat函数。


您知道proc / stat的更新频率是多少?例如每1毫秒一次,谢谢。
0xFF

它们不是真实文件。当您打开它们时,将计算它们的内容。
David Schwartz

3

网络上有一些示例显示了如何使用/proc/pid/statC 进行阅读。

您可以在两个不同的时刻读取值utimestime值,然后计算所需的CPU利用率统计信息。(我想也top使用此原始数据。)

(我忘记了:这是特定于Linux的。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.