sleep()默默地占用CPU

时间:2008-08-21 23:17:42

标签: php performance sleep

我在VMWare中的Linux上运行Apache。

我要求的一个PHP页面是sleep(),我发现如果我尝试在第一页sleep()'ing时请求第二页,则第二页挂起,等待从第一页开始的sleep()完成。

还有其他人看到过此行为吗?

我知道PHP不是多线程,但这似乎是对CPU的严重错误处理。

编辑:我应该提到CPU使用率没有达到峰值。 CPU“hogging”的意思是,当页面处于sleep()时,没有其他PHP页面能够使用CPU。

3 个答案:

答案 0 :(得分:11)

可能是被调用的页面打开一个会话然后不提交它,在这种情况下,请参阅this answer以获得解决方案。

答案 1 :(得分:4)

这可能意味着你的Apache只使用了1个子进程。

因此:

1子进程正在处理请求(在这种情况下是睡眠,但它可能正在做实际工作,Apache无法区分),因此当新请求到来时,它将不得不等到第一个进程完了。

解决方案是增加允许Apache生成的子进程数(MaxClients指令,如果你正在使用prefork MPM),只需从PHP脚本中删除sleep()即可。

如果不知道你的剧本中发生了什么,很难说,但你可以摆脱睡眠()。

答案 2 :(得分:1)

您是否真的看到CPU达到100%或者只是没有其他页面被提供?你跑了多少个apache-instances?当你在线程中运行sleep()时它们都停止了吗?

PHP的sleep()函数基本上在空闲循环中运行n秒。它不释放任何内存,但不应显着增加CPU负载。