Iostat 和 top 显示第一个值的静态资源使用情况

Iostat 和 top 显示第一个值的静态资源使用情况

对于我的一个项目,我需要以编程方式获取资源(CPU、I/O 和磁盘空间)的使用情况。

目前我正在运行 shell 命令(iostat)并解析结果,这对于磁盘空间统计来说效果相对较好。

另一方面,对于 CPU 和 I/O 统计数据,我遇到了一个问题。

通过测试iostattop命令Mac OSX 10.9Centos 6.5问题是打印的第一个结果是静态的。

我说的“静态”是指常量。无论你重新运行命令多少次,它始终是相同的数字。不过似乎重新启动之间该值确实会发生变化。

这只是第一个值的情况,后续值也很好,反映了可能的系统资源使用情况。

现在,我运行测试的 CentOS 盒子是一个 VM,但 OSX 盒子只是一个普通的 MacBook Pro。

因此我的三个问题如下:

  • 为什么统计数据是静态的 - CPU 和 I/O 使用率iostat保持不变?top

  • 我怎样才能解决这个问题 ?

  • 如果无法修复或这是预期行为,是否有适用于 MacOSX 和 CentOS 的替代方案?

以下是示例日志:

  1. 在 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

  2. 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%%system0.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

希望这可以帮助

相关内容