CPU停留在99%的状态几个小时:找出日志


8

摘自syslog

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

现在,我的CPU停留在99%的状态已经有几个小时了,我认为是因为这个原因。会有人碰巧知道这是什么,它是如何开始的以及如何停止的吗?

编辑:我尝试过top -n1,我多次看到此返回:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

这条线重复大约8次。

编辑2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

编辑3:

重新启动后,系统返回到99% cpu usage相同的top -n1结果。


3
该命令中有一个错误。按照设计,热熔器的stderr输出将发送到/ dev / null。但是find的stderr输出也是如此,可能不是。(因为-execdir实际上不通过外壳启动命令,因此2> / dev / null由cron直接调用的外壳处理)。但是,尽管这可能掩盖了相关的症状,但2> / dev / null的位置并不是导致CPU使用率升高的原因。
James Youngman 2012年

3
这很奇怪:僵尸进程不应该使用CPU时间(它甚至没有代码要执行)。您在过程报告工具或内核中都有错误。这是什么操作系统(版本,内核等)?有虚拟化吗?uname -a和的输出是lsb_release -a什么?
吉尔斯(Gillles)“所以-别再作恶了”

1
fuser命令寿命很短。它花费大量时间消耗CPU时间(系统时间,而不是用户时间)来生成(简单地)消耗的/ proc数据。的每个实例fuser可能很快完成。但它可能被运行了很多次,因为我想其中有很多会话文件。99.9%的数字可能仅表示该实例fuser在死之前大量使用了CPU。 find在收养孩子方面可能不是很激进;它waitpid只有在离开目录或fuser再次运行时才可能再次调用。
James Youngman 2012年

uname user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux -a : lsb_release -a:没有可用的LSB模块。发行者ID:Ubuntu说明:Ubuntu 11.10版本:11.10代号:code
Jack

糟糕,更正:-execdir ... \;等待应该立即进行,因为谓词的结果需要返回代码(我想将其与-execdir ...+返回值始终为true的结果混合在一起)。
James Youngman 2012年

Answers:


5

这是一项cron作业,用于清理/ var / lib / php5 /中的旧会话文件。如果它挂在99%上,则应该检查出目标文件夹(/ var / lib / php5 /)中是否有过多的文件甚至文件系统损坏。

该过程从crontab开始。请参阅crontab清单(此处描述)。您可以杀死该进程并将其从crontab中删除,但是您更有可能遇到潜在问题,例如需要修复的文件过多。


1
如果最终运行了多个清理进程,则它们可能会在删除文件时在目录上生成锁,从而相互干扰。尝试暂时将其从crontab中删除,直到清除负载为止。然后以两次运行之间的较长间隔添加它。您可能希望将其移动到具有锁定机制的脚本中,以确保仅运行一个实例。现在终止该命令的所有多个实例。
BillThor 2012年

2

在这里找到答案:http : //www.flynsarmy.com/2011/11/fuser-using-100-cpu-in-ubuntu-11-10/

/etc/cron.d/php5 on Ubuntu 11.10:

更换
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete


09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete


这行得通,问题似乎已经解决。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.