15

我在 VMWare 中的 Linux 上运行 Apache。

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

有没有其他人看到过这种行为?

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

编辑:我应该提到 CPU 使用率不会飙升。我所说的 CPU“占用”的意思是,当页面处于 sleep() 状态时,似乎没有其他 PHP 页面能够使用 CPU。

4

3 回答 3

11

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

于 2009-01-31T11:28:58.803 回答
4

这可能意味着您的 Apache 仅使用 1 个子进程。

所以:

1 个子进程正在处理一个请求(在这种情况下处于休眠状态,但它可能正在做真正的工作,Apache 无法区分),因此当一个新请求到来时,它必须等到第一个进程完成。

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

如果不确切知道脚本中发生了什么,很难说,但您可能可以摆脱 sleep()。

于 2008-08-22T14:01:07.120 回答
1

您实际上是看到 CPU 达到 100% 还是只是没有提供其他页面?您正在运行多少个 apache 实例?当您在线程中运行 sleep() 时,它们是否都停止了?

PHP 的 sleep() 函数本质上是通过一个空闲循环运行 n 秒。它不会释放任何内存,但不会显着增加 CPU 负载。

于 2008-08-21T23:20:26.160 回答