使用Lavavel8框架的队列功能,写了一个短信群发功能,运行了将近1年,一直都很正常。
今天晚上群发短信,在图形界面操作后,一点反应没有.排查故障原因,发现supervisor(使用它做队列处理器,管理队列进程)中的队列没有写入日志,说明队列没有启动。
一时有点懵逼,使用restart重启命令后,还是一样没有反应。
然后发现在日志目录里,多了一个supervisord.log-20220612 这样的文件,这里面到时记录了相关的内容。
INFO success: groupsms_01 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
百度搜索后才知道,原来是Linux系统中somaxconn 这个值不够引起的,这个参数值的作用是:
net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。
backlog是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。
而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。
当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。
修改somaxconn的方法
vi /etc/sysctl.conf
net.core.somaxconn= 511
然后 按 wq!保存退出
最后要在运行下面的命令让配置文件生效
sysctl -p
以上步骤操作完成后,保险起见在对supervisor执行一次restart重启操作,然后测试程序,一切恢复正常。