我们在我们的一台服务器上收到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
%cpu和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会在79天内耗费300万年的cputime的任何其他方式!
解决方法
我刚刚遇到了类似的问题,但几乎所有进程在重启后都会立即显示极大的cpu时间.
通过查看utime和stime列的/ proc / $PID / stat(我的内核上的第14列和第15列,检查proc(5)手册页以查看是否存在),可以确保ps中的溢出不是问题是不同的),例如:
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)并重新启动来修复它.
我看到各种发行版都报告了类似的问题:
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1023214
> https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.4_Technical_Notes/kernel.html