在一次发版之后,例行去看监控的时候,我发现某一台服务器的内存使用量不正常,比其他服务的内存使用量高了将近一倍。
我登录到服务器上,执行命令
ps -ef | grep php | wc -l
发现,swoole服务的worker进程数量比我们设置的数量高了一倍。
如果你以为我要写一大段迷宫似找坑经验,那你就大错特错了。
我凭我对swoole、supervisord的了解,很快就意识到这是由于supervisord的stopwaitsecs参数设置过短(默认10s),而swoole在收到关闭信号的时候,会等待子进程的事件循环为空才会关闭子进程,如果这个过程超过10s,主进程就会被强制kill掉,然后子进程由于没有收到关闭信号,一直没有被kill掉。
解决方案很简单,将supervisord配置项改一下即可
stopwaitsecs=60 #你也可以调的更大
填坑,有时也是很简单的。
更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号:PHP架构师