swoole / swoole-src

🚀 Coroutine-based concurrency library for PHP
https://www.swoole.com
Apache License 2.0
18.48k stars 3.16k forks source link

WARNING swManager_check_exit_status: worker#11 abnormal exit, status=255, signal=0 #2333

Closed giantwu closed 5 years ago

giantwu commented 5 years ago

目前用nginx做反代,偶尔会报504 ,nginx设置的超时时间为5S。目前 启动了8个worker,出现504时,看到的现象是:1)其中有两个worker 会退出,swoolelog里面记录:WARNING swManager_check_exit_status: worker#2 abnormal exit, status=255, signal=0 2)strace -p 最后会的输出:write(1, "127.0.0.19506order/online_pos_li"…, 34) = -1 EIO (Input/output error) exit_group(-1) = ? +++ exited with 255 +++ 目前代码里面没有exit,或者die之类的语句。 register_shutdown_function 也没有任何异常信息。 php: 7.1.26 ,swoole:4.2.12
业务代码是使用GuzzleHttpClient调用了一个远程的http接口 。现在的问题是任何一个接口都可能出现这个问题。但是不能重现该问题。

matyhtf commented 5 years ago

请将Server程序设置为守护进程

giantwu commented 5 years ago

请将Server程序设置为守护进程

目前运行就是以demo形式运行的,配置项:daemonize=>1

matyhtf commented 5 years ago

请检查你的设置,或者使用 nohup ,write(1 表示写入标准输出(打印屏幕),这时 shell已退出,write(1 会立即返回 eio ,而 php 底层遇到 echo 失败会立即退出。

giantwu commented 5 years ago

多谢韩大大,这个我检查下,确保是守护进程形式存在的。另外还有个您帮看下:WARNING swSignal_callback (ERROR 707): Unable to find callback function for signal Hangup: 1

matyhtf commented 5 years ago

这个可能与上一个问题是相同的。未设置守护进程,shell 退出时会向 Server 发送 sighup 信号。

giantwu commented 5 years ago

韩大大,确认是 守护进程,而且代码中没有任何输出语句。目前用的是easyswoole3 Server 启动时 跟踪了,确认是 daemonize=>1

kiss291323003 commented 5 years ago

他确认了,是以php easyswoole start d这样的形式启动的。这样启动的形式确实是正确的守护。不过我目前这边没有碰见过相同的情况。建议升级下gcc和php,然后重新编译下swoole

giantwu commented 5 years ago

他确认了,是以php easyswoole start d这样的形式启动的。这样启动的形式确实是正确的守护。不过我目前这边没有碰见过相同的情况。建议升级下gcc和php,然后重新编译下swoole

多谢,费心了,我在试试看。