Node服务高并发之可用性99.99%
文章目錄
之前有段时间,Node服务的可用性从99.99%跌到了99.3%,502错误明显增加,于是得排查下原因。
在本地打包镜像,启动容器后,把并发打上去,发现PM2守护的进程会时不时重启, 日志如下
1 | PM2 | App [server:1] exited with code [0] via signal [SIGKILL] |
仔细观察后发现是内存到达上限后会把进程杀死,重启。估计是内存泄漏的原因,一时半会找不到原因,于是只好祭出开始佬写的内存回收插件,加上插件之后内存急剧下降,服务稳如泰山。带来的副作用是内存GC存在时间开销,整体响应时间比原先的服务慢20%,这就得做个取舍。
把插件发布到测试环境后,再次测试,一样稳如狗,于是发布到线上环境,结果还是存在很多502错误,想不到错在哪里。联系网关服务的开发一起排查。网关服务的开发推测是keepalive时间设置的原因。因为请求先到网关,再到服务中,而网关设置的keepalive大于服务设置的keepalive时间时,就会出现网络连接不可用的情况,于是就会认为服务502。
在Express中keepalive时间默认是5秒,改一下keepalive时间即可,配置如下。
1 | const server = app.listen(port); |
最终服务可用性达到99.99%,达到目标。