swoole 遇到一个定时器 tick 的问题

WARNING Worker_reactor_try_to_exit() (ERRNO 9101): worker exit timeout, forced termination

今天突然发下 swoole 报错了,后来找资料才发现原来是定时器的问题,大概是说定时器设置的时间大于进程退出的时间了

官方文档 :


worker exit timeout, forced to terminate

发现形如以下报错:

WARNING swWorker_reactor_try_to_exit (ERRNO 9012): worker exit timeout, forced to terminate
Copy to clipboardErrorCopied

表示在约定的时间 (max_wait_time 秒) 内此 Worker 没有退出,Swoole 底层强行终止此进程。

可使用如下代码进行复现:

use Swoole\Timer;

$server = new Swoole\Server('127.0.0.1', 9501);
$server->set(
[
'reload_async' => true,
'max_wait_time' => 4,
]
);

$server->on('workerStart', function (Swoole\Server $server, int $wid) {
if ($wid === 0) {
Timer::tick(5000, function () {
echo 'tick';
});
Timer::after(500, function () use ($server) {
$server->shutdown();
});
}
});

$server->on('receive', function () {

});

$server->start();