记一次Node.js OOM.md
概述
运维同学发现某个服务器,会出现频繁读写磁盘、cpu直接100%的情况。
排查问题
因为我们的某个Node.js服务没有做监控,所以内存占用、GC我们都看不到详情,在加监控的同时,我们首先怀疑是否有定时任务在做频繁读取磁盘的功能。经过几轮代码review、git diff、日志分析,并没有发现明显的错误代码。但是diff某一个版本的时候发现了引入的一个新的SDK包。
安装监控
- Node.js性能平台
分析堆栈信息
- 内存占用

- 堆栈信息时间节点1

- 堆栈信息时间节点2

很明显的可以看到TLSSocket这项一直在增加并且没有被释放,而且增长幅度很小。这也是当时我们没有安装监控时不好排查的原因。
修复
- 查看TLSSocket详情发现请求了下图地址,经过review这是一个第三方的包请求的地址。

- 修复后的内存占用

总结
- 不管服务有多么不重要也一定要安装监控。