文章目錄

在使用Express搭建Node服务时,会遇到内存持续增长的情况,增长到一定程度后,进程就会被PM2强制重启。而如果进程正好重启时,接收了请求,这个请求就会没有响应,测试就会返回一个502给请求方。这种情况502情况一旦多起来,就会有告警,服务的可用性也就没法做到99.99%。

此时去排查为啥内存会持续增长,看看是不是哪里存在内存泄漏。排查下来后发现,并没有存在内存泄漏的情况,单纯是因为内存的释放速度赶不上内存的占用速度,如果并发不是很高的情况下,内存一直可以稳定释放,而一旦并发高了,内存就来不及释放,就会持续增长。此时只好强制开启内存释放,调用V8中的强制回收内存函数,实现内存的强制回收,使内存一直稳定在健康的状态。

具体如何操作,参考开始佬的编译nodejs c插件-纯笔记一文

当然,鱼和熊掌不可兼得,使用强制内存回收是个很耗时的操作,对请求响应时间会有影响,例如请求20次之后强制内存回收,平均请求时间会慢20%。

打赏作者

文章目錄