linux – 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

%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

因此,升级可能是解决问题的最佳方法.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...