onWorkerError

Worker/Task进程发生异常后会在Manager进程内回调此函数。

void onWorkerError(swoole_server $serv, int $worker_id, int $worker_pid, int $exit_code, int $signal);
  • $worker_id 是异常进程的编号
  • $worker_pid 是异常进程的ID
  • $exit_code 退出的状态码,范围是 0~255
  • $signal 进程退出的信号

此函数主要用于报警和监控,一旦发现Worker进程异常退出,那么很有可能是遇到了致命错误或者进程CoreDump。通过记录日志或者发送报警的信息来提示开发者进行相应的处理。

常见错误

  • signal = 11:说明Worker进程发生了segment fault段错误,可能触发了底层的BUG,请收集core dump信息和valgrind内存检测日志,向我们反馈此问题
  • exit_code = 255:说明Worker进程发生了Fatal Error致命错误,请检查PHP的错误日志,找到存在问题的PHP代码,进行解决
  • signal = 9:说明Worker被系统强行Kill,请检查是否有人为的kill -9操作,检查dmesg信息中是否存在OOMOut of memory
  • 如果存在OOM,分配了过大的内存。检查Serversetting配置,是否创建了非常大的Swoole\TableSwoole\Buffer等内存模块


  • ucpuw

    这边提到发生异常会回调此函数 请问可举例有哪些异常会回调吗 我测试很多异常都不会回调

  • Durant.Lin

    同上,SD框架,"exit_code":0,什么原因?

  • Rango

    @Durant.Lin 文档存在错误,已修正。exit_code0说明是正常退出,请检查signal

  • か

    刚踩坑:onStart回调里面的错误不会出发onWorkerError

  • 跨省少年

    onWorkerStart里面会不会触发?