You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP的sleep()函数是否允许服务器运行其他进程?问题排查与解决

问题解答

关于sleep()/usleep()的作用

  • sleep()或usleep()会让当前PHP脚本暂停执行,此时对应的Apache工作线程会进入休眠状态,会释放CPU资源给服务器其他进程/线程使用,不会占用CPU时间片。但这种方式无法解决内存占用过高的问题——脚本休眠时,已经占用的内存(比如$_SESSION中存储的大量报表数据)不会被释放。
  • 如果服务器问题是CPU资源耗尽导致的,这种方法可能有一定缓解作用,但对你遇到的内存耗尽引发的实例异常完全无效,甚至可能因为脚本执行时间被拉长,让内存占用的问题持续更久,反而增加服务器崩溃的风险。

实际问题根源与临时解决方案

经过进一步排查,问题的核心是Apache每个工作线程的内存占用过高,主要原因有两点:

  • PHP内存限制设置较高
  • 报表的所有查询结果都存储在$_SESSION中,导致会话内存持续膨胀

尝试随机插入usleep()的方案(例如if rand(0, 100) == 25 then usleep(...))并未解决内存耗尽问题,最终采用以下临时方案解决:

  1. 替换数据存储方式:不再将报表数据存入$_SESSION,改为追加写入服务器本地的非外网可访问文本文件
  2. 性能提升:报表运行时间从10-15分钟大幅缩短至20秒,内存占用被控制在合理范围
  3. 磁盘清理机制:设置小型Cron任务,自动删除超过XX分钟的旧文本文件,避免磁盘空间被占用

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:05:21