没有合适的资源?快使用搜索试试~ 我知道了~
首页看我如何搞定Nodejs内存泄漏问题
看我如何搞定Nodejs内存泄漏问题
545 浏览量
更新于2023-05-30
评论
收藏 218KB PDF 举报
最近又用node写了一个小工具,需要常驻进程,经过几天的观察,发现内存占用有持续增加的趋势(虽然不明显,但还是让我察觉到了,我真屌)。突然发现,我竟然不知道怎么排查nodejs的内存泄漏,吓死宝宝了!花时间看了一下相关资料(google真好,外果仁真屌),看来这部分也已经有比较完善的方法论+工具了。所以这篇文章记录一下自己从不懂到入门的经历~~我希望这篇文章不仅能提供具体的工具供大家使用,还提供足够的理论知识来辅助大家思考,当然,也可能是我自己想多了~~哇哈由于没有太多运维经验,也不知道啥逆天的工具来帮我一键式监控所需要的指标,如果你和我情况一样,那我们只能手动来造个简陋的但够用的监控脚本了。
资源详情
资源评论
资源推荐

看我如何搞定看我如何搞定Nodejs内存泄漏问题内存泄漏问题
最近又用node写了一个小工具,需要常驻进程,经过几天的观察,发现内存占用有持续增加的趋势(虽然不明显,但还是让我
察觉到了,我真屌)。突然发现,我竟然不知道怎么排查nodejs的内存泄漏,吓死宝宝了!
花时间看了一下相关资料(google真好,外果仁真屌),看来这部分也已经有比较完善的方法论+工具了。所以这篇文章记录一
下自己从不懂到入门的经历~~
我希望这篇文章不仅能提供具体的工具供大家使用,还提供足够的理论知识来辅助大家思考,当然,也可能是我自己想多了
~~哇哈
发现问题
由于没有太多运维经验,也不知道啥逆天的工具来帮我一键式监控所需要的指标,如果你和我情况一样,那我们只能手动来造
个简陋的但够用的监控脚本了。
别告诉我你和我一样shell也不熟,直接就node吧。少废话~
先装上pm2,然后写一个脚本,来定时打印目标应用的内存使用率,当然,前提是目标应用也都放在pm2中管理。
const exec = require('child_process').exec;
var Later = require('later');
var schedule = Later.parse.text('every 5 mins'); // 每5分钟正点触发
Later.setInterval(function(){
exec('pm2 jlist', { // 打印出pm2中应用的基本状态信息,输出是json字符串
timeout: 2000
}, (err, data, stderr)=>{
if (err) {
console.error(err, err.stack); // an error occurred
return;
}
//将结果写入日志
data = JSON.parse(data);
if(data[0]){ // 这里取0是因为我希望监控的应用在pm2中的顺序是第一位
console.log(data[0].monit.memory/(1024*1024)); // 直接输出到pm2的log中
}
});
}, schedule);
然后就等一段时间,就会在对应的log文件中拿到相关的内存数据,然后只需要用电子表格生成一个图标即可,我推荐使用
google drive的spreadsheet:
上面的图是我收集了大概2天的内存数据绘制成的图标,可以看出内存使用量成上升趋势。没错,就是泄漏了!!


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0