一、背景
之前使用websocket服务为H5页面进行实时数据推送,突然有一天产品给我反馈,说该页面的实时刷新功能失效了,于是开始进行排查和处理,并将过程记录下来。
这个服务是有监控程序的,每分钟检查一次websocket是否正常,不正常的话会将进程全部杀掉进行重启。
当天接到反馈后,我看了下服务,监控程序是正常的,会对websocket进行重启,但每次重启过后不超过30s,websocket的master节点就又挂了。
情况就是这样的,下面进入排查流程。
二、master节点为什么会挂掉?
在官网上有列举以下三种情况会导致无法提供服务:
(1)系统负载过大swoole无法申请到内存而挂掉
(2)swoole底层发生段错误
(3)Server占用内存过大被内核Kill,或者被某些程序误杀
但是根据当前环境,并不符合上述情况,所以这个问题暂时还没有找到具体的原因。
三、根据日志报错解决
(1)首先看了下nginx的error.log,发现大量报错:
13247#0: *176909901 connect() failed (111: Connection refused) while connecting to upstream,
看了下nginx配置,可以看出一开始的配置是很小的,所以对几个配置进行增大
worker_processes 1; //worker角色的进程个数
worker_rlimit_nofile 1024;// 更改worker进程的最大打开文件数限制。
worker_connections 1024;