在上一篇中,我们提到了一个配置项max_wait_time。这个配置项决定了在服务端在进程结束的时候,在max_wait_time时间内onWorkerStop事件会完成扫尾工作。
那什么时候worker进程会结束呢?那当然是手动关闭(管理进程收到重启、关闭信号后)或者自动关闭(达到 max_request 时)啦。
这里我们就会遇到一个问题:当更新了服务端的代码后,为了让新代码生效,如何优雅地终止 / 重启swoole服务端才能保证正在执行的业务不丢失?
因为一台繁忙的后端服务器随时都在处理请求,如果运维人员通过 kill 进程方式来终止 / 重启服务器程序,有可能导致刚好代码执行到一半终止,没法保证整个业务逻辑的完整性。
幸好,Swoole 提供了柔性终止 / 重启的机制,管理员只需要向 Server 发送特定的信号或者调用 reload 方法,worker进程就可以保证做好善后工作并结束进程,之后再重新拉起。
管理员发送信号 :
# 重启所有worker进程
kill -USR1 主进程PID
# 仅重启task进程
kill -USR2 主进程PID
#SIGTERM: 向主进程 / 管理进程发送此信号服务器将安全终止
kill -15 主进程PID
reload()方法:安全地重启所有 Worker/Task 进程。
Swoole\

最低0.47元/天 解锁文章
804

被折叠的 条评论
为什么被折叠?



