生产环境swoole日志出现报错提示

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

经排查发现原因为配置中max_request设置过小,导致定时的task被提前释放,便会出现以上报错。

官方max_request的作用

以下为laravelS的配置文件内容 config/laravels.php

'swoole' => [
        'daemonize'          => env('LARAVELS_DAEMONIZE', false),
        'dispatch_mode'      => 2,
        'reactor_num'        => env('LARAVELS_REACTOR_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() : 8),
        'worker_num'         => env('LARAVELS_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() : 8),
        'task_worker_num'    => env('LARAVELS_TASK_WORKER_NUM', function_exists('swoole_cpu_num') ? swoole_cpu_num() * 2 : 8),
        'task_ipc_mode'      => 1,
        'task_max_request'   => env('LARAVELS_TASK_MAX_REQUEST', 100000),
        'task_tmpdir'        => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
        'max_request'        => env('LARAVELS_MAX_REQUEST', 100000),	// 此处默认十万,运维为了减少服务器资源占用在.env中设置值仅为70
        'open_tcp_nodelay'   => true,
        'tcp_fastopen'       => true,
        'pid_file'           => storage_path('laravels.pid'),
        'log_level'          => 4,
        'log_file'           => storage_path(sprintf('logs/swoole-%s.log', date('Y-m'))),
        'document_root'      => base_path('public'),
        'buffer_output_size' => 200 * 1024 * 1024,
        'socket_buffer_size' => 256 * 1024 * 1024,
        'package_max_length' => 200 * 1024 * 1024,
        'reload_async'       => true,
        'max_wait_time'      => 60,
        'enable_reuse_port'  => true,
        'enable_coroutine'   => false,
        'upload_tmp_dir'     => @is_writable('/dev/shm/') ? '/dev/shm' : '/tmp',
        'http_compression'   => false,
    ],

总结:
swoole运行时会有很多个worker来处理task任务。
max_request可以理解为worker最大处理任务数,比如max_request设置了70,那么worker处理完第70个task后,就会把70个吃完食物剩下的碟子全部清掉,重新生成worker,把之前的占用的资源释放,如果设置了10万,那理论上就会积压10万个吃剩碟子。
而报错的原因是定时任务在没到期执行时,worker的max_request却已经超出,提前释放了没有处理的task,定时器到期执行就找不到之前的task了。

不过不管max_request设置多大,这个问题是不是说明swoole定时器不可靠的问题?

更多推荐