node中heaptotal缓慢增长内存泄漏导致重启
发布于 7 年前 作者 Borkes 3579 次预览 最后一次回复是 7 年前 来自 问答
node统计的process.memoryUsage()中 rss heaptotal heapused external
代码取和栈可以先不考虑。 对外内存external是buffer分配的,每天的对比没有什么变化 堆内存的分配就比较奇怪heaptotal每天是缓慢递增,大概一周增加了100~300M,而heapused对比没有变化,导致heap使用率每天都下降。 但是heaptotal递增到1.3G左右(应该是到了V8限制)node进程就会发生重启,这个是不希望出现的。
用heapdump获取两天的内存快照发现内存的使用都有增加,没有什么奇怪的地方。由于整个项目代码比较多,就不贴代码了。主要是有下面几个问题,希望大佬能帮忙解答一下 1.heaptotal和heapused分别是在什么情况下分配增加的? 2.想这种heaptotal分配增加,heapused不变,大致什么情况下回发生,算是内存泄漏吗?毕竟heaptotal分配过高会导致进程重启 3.heapdump获取的内存快照是rss的还是heaptotal的?
3 回复
看你的堆快照,堆内实际使用 50M,heapTotal 1.3G ?? 如果真的是这样,那说明全是 hole。。。
可以参考下这篇文章: A tour of V8: Garbage Collection
可以接入 Node.js 性能平台 做一个 gc trace 确认下
@hyj1991 那个是heapdump文件的大小,里面是各个节点指针。