workerman 服务因为业务代码异常而导致服务频繁重启

小白同学丶

生产环境Web服务因为业务代码异常,出现了服务频繁重启,按照手册尝试了增加 stdoutFile 参数来记录以及增加try catch ,但是也没有记录到业务的异常。请教下, 还有什么办法可以定位到具体的问题?

图1是 web的 status 状态下截图
截图

图2 使用 stdoutfile 记录的打印日志
截图

阅读 533
1个回答

six

看下workerman.log下的日志呢。

onMessage里最外层 try Catch试下。

$worker->onMessage = function($con, $data) {
    try {
        // 业务代码
    } catch (\Throwable $e) {
        // 日志文件写绝对路径
        file_put_contents('/tmp/exception.log');
    }
}

还有是不是业务设置了 set_exception_handler ,导致异常没有抛出来。

  • 小白同学丶 2020-12-15

    在项目中搜索了下。没有发现设置 set_exception_handler 在 onMessage 这里也有设置 不过现在catch 里面用的是 Excepiton 异常类。 您的意思是改成 他的父类 Throwable?

  • six 2020-12-15

  • 小白同学丶 2020-12-16

    @1393: 把 catch 改成 Throwable 是可以的。目前观察服务没有在重启了。 也捕获到错误了哈~ 感谢~