node 内存泄漏
发布于 2 年前 作者 mario56 2472 次浏览 来自 问答

node 版本 6.9.4 node app 运行了一天。没有任何操作。 ps aux | grep node rss 的大小有明显的增加 比较了 node-heapdump 的工具生产的快照,发现heap 几乎没有增加。 为什么 rss 增加了呢? 另外 process.memoryUsage().rss 输出的rss值和ps命令看到的值也有几M的差别。

13 回复

人工置顶。。。

不会,帮你置顶 、、

「有明显的增加」,有多大?是随着时间或者请求数量增加的吗?

@JexCheng 就是运行在那里没有任何操作,100M+ 这样的增加。

@mario56 时长,增量。100M+是最终结果,还是每隔多少小时,就多增加100M?

@JexCheng 时长基本上是一夜,下面前开着的,第二天上班在看的,是最终结果

rss是堆外的内存吧,可能是Buffer这样的不走v8堆内内存分配的数据在不停增大,这种情况下node内存不会爆掉但是确实也是泄漏,我觉得主要可以排查两个地方:

  • Buffer的使用
  • 如果调用了c/c++扩展,查看其中自行申请内存的地方

<p style=“text-align:right”><a href=“https://github.com/lumia2046/cnode”> — — 来自lumia2046-react-cnode</a></p>

@mario56

heap如果一直不增加那就没问题,rss可以粗略理解成实际使用中的内存。你开启应用后,发一堆请求预热一下,看看内存升到多少,那个值才有参考价值。

@hyj1991 有使用protobuff ,buffer 都有使用。只不过这些都是要有请求才会做的操作。日志里也没有出现请求。c++ 扩展的话,使用第三方库里面有使用到c++ 比如 canvas吧。

@JexCheng 这种预热的情况,会有一定的增幅,到一定程度就会基本上不增,每次请求增一点,然后会降,但是不会降到初始值。这应该没什么问题吧?

@mario56 参考下 linux ps命令的文档,看下rss具体什么含义就明白了

这种问题就要 @JacksonTian 朴老师啦,alinode

回到顶部