CNode

node 内存泄漏

问答
Mmario56发布于9 年前最后回复9 年前13 回复5730 浏览0 收藏

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

查看回复

回复 (13)

M
mario56#1·9 年前

人工置顶。。。

F
fangker#2·9 年前

不会,帮你置顶 、、

J
JexCheng#3·9 年前

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

M
mario56#4·9 年前

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

J
JexCheng#5·9 年前
引用 mario56@JexCheng 就是运行在那里没有任何操作,100M+ 这样的增加。

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

M
mario56#6·9 年前

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

H
hyj1991#7·9 年前

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

  • Buffer的使用
  • 如果调用了c/c++扩展,查看其中自行申请内存的地方
C
CRwming#8·9 年前
J
JexCheng#9·9 年前
引用 mario56@JexCheng 时长基本上是一夜,下面前开着的,第二天上班在看的,是最终结果

@mario56

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

M
mario56#10·9 年前

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

M
mario56#11·9 年前

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

A
atian25#13·9 年前

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

参与回复
登录后即可参与回复。登录