Nodejs 在 Linux 上程序内存溢出问题,如何排查
Nodejs 在 Linux 上程序内存溢出问题,如何排查
写了一个 nodejs 小程序,部署在 linux 上,跑五六个小时后,内存占用就达到 90%,要怎么排查呢
网上搜索的一圈,说用 heapdump,但这个在 linux 上部署不了,大家有办法吗
heapdump 为啥 linux 上部署不了?
heapdump 不行的话,用 inspect,然后远端用 chrome devtool 也可以 dump 出 heap
检查下代码, 是不是有数组一直往里加没有清的情况.
其实可以用 alinode
是不是有事务没提交的
上一次 headdump 没装上是因为 g++没安装
把内存快照导入 chrome 控制台后发现存在大量未销毁 socket 对象
排查代码,是因为 close socket 的代码写错了,而且没打印异常日志。
现在正常了,程序跑一个礼拜,内存都没有增长。
谢谢大家了
针对Node.js在Linux上程序内存溢出的问题,以下是一些排查步骤和可能的解决方案:
-
使用
top
或htop
监控内存: 首先,使用top
或htop
命令监控Node.js进程的内存使用情况,确认是否存在内存溢出。top -p <Node.js_PID>
-
启用Node.js的内存分析工具: Node.js提供了
--inspect
和--inspect-brk
选项,可以使用Chrome DevTools进行内存分析。node --inspect-brk your_script.js
然后在Chrome浏览器中打开
chrome://inspect
,连接到Node.js进程,使用“Memory”面板进行快照分析。 -
检查代码中的内存泄漏: 使用第三方库如
heapdump
生成堆快照,分析内存使用情况。const heapdump = require('heapdump'); heapdump.writeSnapshot((err, filename) => { if (err) console.error(err); else console.log('Heap snapshot written to', filename); });
-
优化代码和数据结构: 检查代码中是否存在全局变量、未释放的回调函数或大型数据结构。尝试优化数据结构,减少内存占用。
-
增加Node.js的内存限制: 如果确认是内存需求过高而非内存泄漏,可以通过
--max-old-space-size
选项增加Node.js的内存限制。node --max-old-space-size=4096 your_script.js
以上步骤可以帮助你排查和解决Node.js在Linux上的内存溢出问题。如果问题依然存在,建议深入分析代码逻辑或寻求社区帮助。