Мы получили предупреждение от 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
в течение недели или около того, а затем проанализируйте его журналы / статистику. Это дает вам более длительный просмотр, а не просто снимок, когда вы случайно замечаете и входите в систему.
Что-нибудь странное в журналах не только для самой системы, но и для различных приложений, которые вы запускаете?