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

使用puphpeteer时Chrome僵尸进程过多,求排查思路

Puphpeteer 僵尸Chrome进程排查方案
  • 检查资源释放逻辑

    • 确认代码中是否显式调用浏览器关闭方法:必须执行$browser->close(),同时确保页面实例$page也调用$page->close()。僵尸进程核心原因是父进程未回收子进程资源,PHP若未触发Node侧的资源销毁,Chrome进程就会残留。
    • 排查异常分支:如果获取iframe时抛出错误,需在finally块中强制执行浏览器关闭,避免异常导致资源释放代码未执行。
  • 验证Rialto-PHP的进程管理

    • 检查Node进程状态:执行ps aux | grep node,观察每次调用后Node进程是否也变为僵尸。若Node正常退出但Chrome未被回收,说明Rialto未正确向Puppeteer发送关闭信号。
    • 尝试更新Rialto到最新可用版本(虽已废弃,但部分修复分支仍可使用),或指定Rialto启动Node的参数,确保它能正确处理子进程退出逻辑。
  • 调整Chrome启动参数

    • 添加--single-process参数测试:该参数会让Chrome以单进程模式运行(性能略有下降),可快速判断是否为多进程模式下的回收问题。若单进程无僵尸,说明多进程的父进程回收逻辑存在异常。
    • 补充--disable-dev-shm-usage参数:部分环境下/dev/shm空间不足会导致进程异常退出并变为僵尸,添加该参数可规避此问题。
  • 对比原生Puppeteer行为

    • 将业务逻辑转为JS版本(使用Puppeteer 20 + Node 16.20环境),执行后观察是否出现僵尸进程。若原生环境无问题,说明故障出在Puphpeteer/Rialto的PHP-Node通信层;若原生也存在僵尸,需排查Chrome版本或系统进程回收机制(如系统进程表异常)。
  • 系统层面排查

    • 检查PHP进程管理模式:若使用FPM,查看FPM子进程是否在请求结束后正常回收。若FPM进程未正确退出,其下属的Chrome进程会变为僵尸。
    • 使用strace跟踪PHP进程:观察调用结束时是否发送SIGCHLD信号回收子进程,或检查Chrome进程的父ID(PPID)是否变为1(init进程)。若PPID为1但仍为僵尸,可能是系统进程表存在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:40:02