使用pm2启动node项目,内存直接暴增,原因是高IO读写

  |  
  1. 出现原因介绍
    因为我们使用了神策埋点,正好神策过期了,没有及时关闭配置,导致日志上传不了,一直保存在本地,存了上百 M 的日志,在代码发布的时候需要重启,导致 pm2 的内容直接超过 8G,把服务器直接卡死,等了半个小时了之后 内存慢慢下降,刚开始以为是代码太多,打包内存不够用,升级了服务器内存,还是出现了同样的问题,排查了几天都没有发现。后面使用node-tick才发现原因是神策在上传日志,他里面写的是 foreach 循环一起上传所有日志,由于有上传不了,又保存在本地。
  1. 问题排查
    安装 node-tick 方式sudo npm -g install tick
    使用启用的配置文件运行您的应用程序node --prof app.js
    在 CPU 100% 使用一段时间后停止您的应用程序
    您可以在您的应用目录中看到 v8.log,现在您可以使用 node-tick-processor isolate-0x5138fd0-15431-v8.log 读取它,直接看。但是不方便,推荐直接第 3 步,存入文件看

  2. 解析到文件中,查看堆栈信息

    node --prof-process isolate-0x102884000-14025-v8.log > 11.txt

  3. 实例 创建一个 app.js 文件

1
2
3
4
5
6
7
let i = 0;
(() => {
while (true) {
++i;
console.log(i);
}
})();

执行当前文件 node --prof app.js 跑到 cpu 特别高的时候 关闭,就会生成一个日志文件isolate-0x102884000-14025-v8.log(文件名字会不一样);

解析到文件中 node --prof-process isolate-0x102884000-14025-v8.log > 11.txt;

查看文件 找到对应的执行的地方

在这里插入图片描述

感谢

感谢梁老师让我学习到如果排查此问题!!!

文档

使用 V8 和 node 轻松 profile 分析 nodejs 应用程序

Node.js – how to debug node.js causing 100% cpu usage

文章目录
  1. 1. 感谢
  2. 2. 文档