2

Для одного из моих проектов мне необходимо программно использовать ресурсы (ЦП, В / В и дисковое пространство).

В настоящее время я запускаю команды оболочки (iostat) и анализирую результаты, что сравнительно хорошо работает для статистики дискового пространства.

С другой стороны, для процессора и статистики ввода / вывода у меня есть проблема.

При тестировании команды iostat и top в Mac OSX 10.9 и Centos 6.5 проблема заключается в том, что самый первый напечатанный результат является статическим.

Под "статичным" я подразумеваю константу. Это всегда одно и то же число, независимо от того, сколько раз вы повторяете команду. Кажется, однако, что значение меняется между перезагрузками.

Это относится только к самому первому значению, последующие значения просто хороши и отражают возможное использование системных ресурсов.

Теперь на CentOS, на котором я запускал тесты, есть виртуальная машина, а OSX - обычный MacBook Pro.

Итак, мои три вопроса следующие:

  • Почему статистика является статической - константы на iostat и top для использования процессора и ввода-вывода?

  • Как я могу это исправить ?

  • Если это не может быть исправлено или является предполагаемым поведением, есть ли альтернативы, которые работают как на MacOSX, так и на CentOS?

Вот примеры журналов:

  1. Простой одноразовый iostat на CentOS без обновления:

    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. Простой iostat 1 на CentOS, но на этот раз с частотой обновления 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

Оба "эксперимента" были выполнены с интервалом в несколько секунд.

Как видите, для использования ЦП %user всегда находится на 24.64% а %system на 0.57 для самого первого значения.

1 ответ1

1

Если вы хотите получить ЦП% программным путем, вам лучше получить информацию непосредственно из /proc /stat

Это обсуждается на https://stackoverflow.com/questions/3017162/how-to-get-total-cpu-usage-in-linux-c

И также задокументировано на http://www.linuxhowtos.org/System/procstat.htm

Надеюсь это поможет

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .