我有一个Ubuntu的机器上运行的几个cron作业。 每个人都做一些相当重的东西。 cron作业parsing文件,文件越大,parsing文件就越长。 奇怪的是,如果我把文件太大(像30mb)的脚本types挂起。 它开始真正热情地处理它们,但经过一段时间(如5-10分钟),进程的CPU使用率下降了很多,进入了“僵尸”状态。 如果在此之前在htop的过程中使用70-80%的CPU,那么在发生这种下降之后,它会减慢到5-10%。 负载平均值也下降。 这个进程的状态有时会变成Dtop,这个AFAIR代表僵尸。 今天,我注意到执行繁重的查询时,mysql的进程的相同行为(查询花了4小时执行)。 cron的工作主要是php和在他们的处理大部分的CPU吃PHP进程,而不是MySQL。 所以我认为这个问题不是用特定的语言/程序,而是用“pipe理”的方式。
我见过类似行为的唯一的地方就是在我的Amazon EC2微型实例上,当一些积极使用CPU之后,CPU配额生效,一切都在急剧减速。
这是一个运行ubuntu的专用机器。 可能是什么原因?
编辑:添加一些细节
内存是好的,这不是交换恕我直言的问题。
iostat对IO活动的说法如下: http : //img13.imageshack.us/i/captureehm.png/对我来说看起来不错,因为有些IO预计会发生,而且看起来IO处理器没有被IO等待。 如我错了请纠正我 :)
sar (1)将提供您需要在这里分析的数据。 您可以查看sar -A以查看所有收集到的sar统计信息,然后向下钻取。 例如sar -b会给你I / O统计信息,看你是否陷入了磁盘活动。
sar的一个很好的function是在后台login,因此您可以使用它查看历史数据,而不仅仅是当前的统计数据。
那么,你可以检查它是否被“ 敲定 ”,但这听起来更像是由于内存或IO问题导致进程停滞不前。 你可以发布内存使用情况?
“D”状态表示该命令正在等待IO。 这和僵尸程序不太一样。
检查你的stream程使用了多less内存 – 如果它使用太多,并且正在交换,这可能会显示为你所看到的症状。