对于我的一个项目,我需要以编程方式获取资源(CPU、I/O 和磁盘空间)的使用情况。
目前我正在运行 shell 命令(iostat
)并解析结果,这对于磁盘空间统计来说效果相对较好。
另一方面,对于 CPU 和 I/O 统计数据,我遇到了一个问题。
通过测试iostat
和top
命令Mac OSX 10.9
,Centos 6.5
问题是打印的第一个结果是静态的。
我说的“静态”是指常量。无论你重新运行命令多少次,它始终是相同的数字。不过似乎重新启动之间该值确实会发生变化。
这只是第一个值的情况,后续值也很好,反映了可能的系统资源使用情况。
现在,我运行测试的 CentOS 盒子是一个 VM,但 OSX 盒子只是一个普通的 MacBook Pro。
因此我的三个问题如下:
为什么统计数据是静态的 - CPU 和 I/O 使用率
iostat
保持不变?top
我怎样才能解决这个问题 ?
如果无法修复或这是预期行为,是否有适用于 MacOSX 和 CentOS 的替代方案?
以下是示例日志:
在 CentOS 上进行一次简单的操作,
iostat
无需刷新:Linux 2.6.32-431.5.1.el6.x86_64 08/04/2014 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 24.64 0.00 0.57 0.10 0.00 74.70
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.44 0.22 26.26 656556 76917802 sdb 3.89 0.17 61.83 492714 181116136 dm-0 3.29 0.22 26.26 647474 76917776 dm-1 0.00 0.00 0.00 2416 0 dm-2 6.76 0.17 61.83 491914 181116136
CentOS 上很简单
iostat 1
,但这次具有1 second
刷新频率:
Linux 2.6.32-431.5.1.el6.x86_64 08/04/2014 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 24.64 0.00 0.57 0.10 0.00 74.70
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.44 0.22 26.26 656556 76918018 sdb 3.89 0.17 61.83 492714 181118872 dm-0 3.29 0.22 26.26 647474 76917992 dm-1 0.00 0.00 0.00 2416 0 dm-2 6.76 0.17 61.83 491914 181118872
avg-cpu: %user %nice %system %iowait %steal %idle 0.51 0.00 0.00 0.00 0.00 99.49
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 7.00 0.00 56.00 0 56 sdb 0.00 0.00 0.00 0 0 dm-0 7.00 0.00 56.00 0 56 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 1.00 0.00 1.50 0.50 0.00 97.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 3.00 0.00 32.00 0 32 sdb 8.00 0.00 176.00 0 176 dm-0 4.00 0.00 32.00 0 32 dm-1 0.00 0.00 0.00 0 0 dm-2 14.00 0.00 176.00 0 176
avg-cpu: %user %nice %system %iowait %steal %idle 0.51 0.00 0.00 0.00 0.00 99.49
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 1.00 0.00 1.00 0.00 0.00 98.01
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.50 0.00 0.00 99.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.50 0.00 0.00 99.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.51 0.00 0.00 99.49
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle 0.50 0.00 0.50 0.00 0.00 99.00
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 2.00 0.00 24.00 0 24 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 3.00 0.00 24.00 0 24
avg-cpu: %user %nice %system %iowait %steal %idle 0.51 0.00 0.51 0.00 0.00 98.99
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0 sdb 4.00 0.00 80.00 0 80 dm-0 0.00 0.00 0.00 0 0 dm-1 0.00 0.00 0.00 0 0 dm-2 7.00 0.00 80.00 0 80
两个“实验”都是在几秒钟的时间间隔内进行的。
如您所见,对于 CPU 使用率,第一个值%user
始终为24.64%
。%system
0.57
答案1
如果你想以编程方式获取 cpu%,那么最好直接从 /proc/stat 获取信息
讨论https://stackoverflow.com/questions/3017162/how-to-get-total-cpu-usage-in-linux-c
并且还记录在http://www.linuxhowtos.org/System/procstat.htm
希望这可以帮助