
sleep() silently hogs CPU我在 VMWare 中的 Linux 上运行 Apache。 我请求的一个 PHP 页面执行 有其他人看到过这种行为吗? 我知道 PHP 不是多线程的,但这似乎是对 CPU 的严重错误处理。 编辑:我应该提到 CPU 使用率不会飙升。我所说的 CPU"占用"的意思是,当页面处于 sleep()'ing 状态时,似乎没有其他 PHP 页面能够使用 CPU。 可能是被调用页面打开了一个会话,然后没有提交它,在这种情况下,请参阅此答案以获得解决方案。 这可能意味着您的 Apache 只使用了 1 个子进程。 因此: 第一个子进程正在处理一个请求(在这种情况下处于hibernate状态但它可能正在做真正的工作,Apache 无法区分),所以当一个新请求到来时,它必须等到第一个过程完成。 解决方案是增加允许 Apache 生成的子进程的数量(如果您使用的是 prefork MPM,则为 MaxClients 指令),只需从 PHP 脚本中删除 sleep()。 如果不确切知道脚本中发生了什么,很难说,但您可能可以摆脱 sleep()。 您是否真的看到 CPU 达到 100% 或者只是没有其他页面正在服务?您正在运行多少个 apache 实例?当您在线程中运行 sleep() 时,它们是否都停止了? PHP 的 sleep() 函数本质上是通过一个空闲循环运行 n 秒。它不会释放任何内存,但不会显着增加 CPU 负载。 |