Назад | Перейти на главную страницу

ps возвращает необоснованно высокие значения для% cpu и cputime

Мы получили предупреждение от Nagios на одном из наших серверов, что у нас запущенный процесс. Вход в систему и запуск top не показывает ничего плохого, но когда я смотрю на вывод ps, я вижу что-то странное:

oxygen@mail-1:~$ ps -e -o %cpu,comm,cputime --sort %cpu | tail
 0.2 amavisd         00:00:11
 0.2 zmlogger        00:00:54
 0.2 zmstat-allprocs 03:44:19
 0.2 amavisd         00:00:07
 0.2 amavisd         00:00:14
 0.3 amavisd         00:00:08
 0.3 top             00:00:05
 0.5 amavisd         00:00:04
 8.1 mysqld          3-23:07:17
 7413 java            1184016091-02:47:13

%ЦПУ и cputime не выглядят разумно. Есть идеи относительно того, почему это может быть так?

oxygen@mail-1:~$ ps --version
procps version 3.2.8
oxygen@mail-1:~$ uname -a
Linux mail-1 2.6.32-35-server #78-Ubuntu SMP Tue Oct 11 16:26:12 UTC 2011 x86_64 GNU/Linux

РЕДАКТИРОВАТЬ: Ответ на комментарии ниже:

Да, думаю, это сервер Zimbra.

Средняя нагрузка довольно высока, этот сервер привязан к диску:

top - 09:55:06 up 71 days,  3:23,  1 user,  load average: 4.03, 3.82, 3.60
Tasks: 301 total,   1 running, 300 sleeping,   0 stopped,   0 zombie
Cpu(s): 10.7%us,  1.7%sy,  0.0%ni, 59.3%id, 27.5%wa,  0.0%hi,  0.7%si,  0.0%st
Mem:   8192360k total,  7867364k used,   324996k free,   171704k buffers
Swap:  1953784k total,   950944k used,  1002840k free,  1619948k cached

pstree вывод, как показано ниже

 oxygen@mail-1:~$ pstree
 init─┬─amavisd───10*[amavisd]
      ├─atd
      ├─clamd───{clamd}
      ├─cron
      ├─6*[getty]
      ├─ha_logd───ha_logd
      ├─heartbeat───3*[heartbeat]
      ├─hpasmxld───8*[{hpasmxld}]
      ├─httpd─┬─4*[httpd]
      │       └─sh───rotatelogs
      ├─httpd─┬─6*[httpd]
      │       └─2*[sh───rotatelogs]
      ├─irqbalance
      ├─master─┬─anvil
      │        ├─3*[cleanup]
      │        ├─2*[lmtp]
      │        ├─pickup
      │        ├─2*[proxymap]
      │        ├─qmgr
      │        ├─showq
      │        ├─3*[smtp]
      │        ├─6*[smtpd]
      │        ├─tlsmgr
      │        └─2*[trivial-rewrite]
      ├─miniserv.pl
      ├─mysqld_safe───mysqld───37*[{mysqld}]
      ├─named───10*[{named}]
      ├─nginx───nginx
      ├─nrpe
      ├─ntpd
      ├─nullmailer-send
      ├─openhpid───3*[{openhpid}]
      ├─perl───zmlogger───zmlogger
      ├─rsyslogd───3*[{rsyslogd}]
      ├─saslauthd───4*[saslauthd]
      ├─screen───2*[bash]
      ├─slapd───9*[{slapd}]
      ├─snmpd
      ├─sshd───sshd───sshd───bash───pstree
      ├─swatch───perl
      ├─udevd───2*[udevd]
      ├─upstart-udev-br
      ├─zmconfigdctl─┬─java───19*[{java}]
      │              └─sleep
      ├─zmmailboxdmgr───java───166*[{java}]
      ├─zmstat-allprocs
      ├─zmstat-convertd
      ├─zmstat-cpu
      ├─zmstat-df
      ├─zmstat-fd───zmstat-fd
      ├─2*[zmstat-io───iostat]
      ├─zmstat-mtaqueue
      ├─zmstat-mysql
      ├─zmstat-proc
      └─zmstat-vm───vmstat

Как бы то ни было, это больше похоже на ошибку переполнения внутри ps чем что-либо еще. Я не могу придумать другого способа, которым Java могла бы потреблять 3 миллиона лет процессора за 79 дней!

У меня была аналогичная проблема, но почти все процессы показывали чрезвычайно большое время ЦП сразу после перезагрузки.

Вы можете убедиться, что это не проблема переполнения в ps, посмотрев в / proc / $ PID / stat для столбцов utime и stime (столбцы 14 и 15 в моем ядре, проверьте справочную страницу proc (5), чтобы узнать, есть ли у вас разные), например:

cut -d' ' -f14,15 /proc/$PID/stat

Это количество тактов часов, и если это не проблема с ps, это будут очень большие значения.

Я использую Scientific Linux 6.4 (дистрибутив на основе RHEL) и обнаружил проблему с kernel-2.6.32-358.6.2.el6.x86_64.

Я исправил это установкой более новой версии ядра (kernel-2.6.32-431.el6.x86_64) и перезагрузкой.

Я вижу, что похожие проблемы были зарегистрированы для различных дистрибутивов:

Так что обновление, вероятно, лучший способ решить проблему.

Установить sysstat (по крайней мере, это пакет Linux) и запустите sar в течение недели или около того, а затем проанализируйте его журналы / статистику. Это дает вам более длительный просмотр, а не просто снимок, когда вы случайно замечаете и входите в систему.

Что-нибудь странное в журналах не только для самой системы, но и для различных приложений, которые вы запускаете?