PHP sleep()导致CPU使用率高
我运行的CLI脚本大部分都处于休眠状态。每隔10秒左右,脚本就会执行一些操作。问题是,该脚本在睡眠时占用了94%的CPU 我的设置方式是:PHP sleep()导致CPU使用率高,php,Php,我运行的CLI脚本大部分都处于休眠状态。每隔10秒左右,脚本就会执行一些操作。问题是,该脚本在睡眠时占用了94%的CPU 我的设置方式是: while(1){ sleep(10); doStuff(); } 虽然这是预期的效果,但有一个明显的问题。在C++/Java中,我可以简单地设置一个计时器来消除循环问题。另外,我希望我不需要cron工作 有没有其他方法可以做到这一点 更新 显然,我的原始脚本(相当大)从未真正进入睡眠模式,因此while循环爆发并消耗CPU周期。对于任何
while(1){
sleep(10);
doStuff();
}
虽然这是预期的效果,但有一个明显的问题。在C++/Java中,我可以简单地设置一个计时器来消除循环问题。另外,我希望我不需要cron工作
有没有其他方法可以做到这一点
更新
显然,我的原始脚本(相当大)从未真正进入睡眠模式,因此while循环爆发并消耗CPU周期。对于任何有相同问题的人,请确保您的情况并非如此 过去,当我需要将PHP脚本设置为守护程序时,我使用了下面概述的PEAR模块:
如果不想使用PEAR模块,可以检查其源代码并执行类似操作。我的脚本是这样设置的:
define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep
while(1){
if($sleep){
sleep(THREAD_SLEEP);
}
$sleep = true; // By default, the script enters sleep mode each loop.
if(doSomethingAndHaveMoreToDo()){
$sleep = false; // If more stuff to do, remove sleep and keep doing it.
}
}
问题是,脚本一直将
$sleep
设置为false
,这意味着它从未进入睡眠模式,并消耗了近100%的CPU。从web服务器或CLI调用?修复了此问题。在实际的脚本中,它一直在循环,从未真正睡觉。我的不好。为什么评论这么低-不是几秒钟内睡觉-10秒钟是CPU时间很长的时间-你能解释为什么会发生这种情况吗?我无法重现这个问题(PHP5.3.10,Ubuntu服务器12.04 x64)…我能创造任何显著CPU使用率的唯一方法是去掉sleep()
:请让我确保脚本实际上是睡眠的,而不是一直跳回while循环…@AdrianCornish,说得好,我认为睡眠是以毫秒为单位的。我不知道具体是什么问题。我将编辑我的答案,但保留该守护程序模块的链接,因为我发现它非常有用。它一直被设置为false,这意味着它一直返回while循环,而不是睡眠。修复后,CPU的占用率为0.0%:)