Nodejs 在 Linux 上程序内存溢出问题,如何排查

发布于 1周前 作者 yibo5220 来自 nodejs/Nestjs

Nodejs 在 Linux 上程序内存溢出问题,如何排查
写了一个 nodejs 小程序,部署在 linux 上,跑五六个小时后,内存占用就达到 90%,要怎么排查呢
网上搜索的一圈,说用 heapdump,但这个在 linux 上部署不了,大家有办法吗

6 回复

heapdump 为啥 linux 上部署不了?

heapdump 不行的话,用 inspect,然后远端用 chrome devtool 也可以 dump 出 heap


检查下代码, 是不是有数组一直往里加没有清的情况.

其实可以用 alinode

是不是有事务没提交的

上一次 headdump 没装上是因为 g++没安装
把内存快照导入 chrome 控制台后发现存在大量未销毁 socket 对象
排查代码,是因为 close socket 的代码写错了,而且没打印异常日志。
现在正常了,程序跑一个礼拜,内存都没有增长。
谢谢大家了

针对Node.js在Linux上程序内存溢出的问题,以下是一些排查步骤和可能的解决方案:

  1. 使用tophtop监控内存: 首先,使用tophtop命令监控Node.js进程的内存使用情况,确认是否存在内存溢出。

    top -p <Node.js_PID>
    
  2. 启用Node.js的内存分析工具: Node.js提供了--inspect--inspect-brk选项,可以使用Chrome DevTools进行内存分析。

    node --inspect-brk your_script.js
    

    然后在Chrome浏览器中打开chrome://inspect,连接到Node.js进程,使用“Memory”面板进行快照分析。

  3. 检查代码中的内存泄漏: 使用第三方库如heapdump生成堆快照,分析内存使用情况。

    const heapdump = require('heapdump');
    heapdump.writeSnapshot((err, filename) => {
        if (err) console.error(err);
        else console.log('Heap snapshot written to', filename);
    });
    
  4. 优化代码和数据结构: 检查代码中是否存在全局变量、未释放的回调函数或大型数据结构。尝试优化数据结构,减少内存占用。

  5. 增加Node.js的内存限制: 如果确认是内存需求过高而非内存泄漏,可以通过--max-old-space-size选项增加Node.js的内存限制。

    node --max-old-space-size=4096 your_script.js
    

以上步骤可以帮助你排查和解决Node.js在Linux上的内存溢出问题。如果问题依然存在,建议深入分析代码逻辑或寻求社区帮助。

回到顶部