onWorkerError
最后更新于:2022-04-02 06:24:23
# onWorkerError
[TOC]
当`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`内存检测日志,向我们[反馈此问题](提交错误报告.md)
* `exit_code = 255`:说明`Worker`进程发生了`Fatal Error`致命错误,请检查`PHP`的错误日志,找到存在问题的`PHP`代码,进行解决
* `signal = 9`:说明`Worker`被系统强行`Kill`,请检查是否有人为的`kill -9`操作,检查`dmesg`信息中是否存在`OOM`(`Out of memory`)
* 如果存在`OOM`,分配了过大的内存。检查`Server`的`setting`配置,是否创建了非常大的`Swoole\Table`、`Swoole\Buffer`等内存模块
';