跳到主要内容
CNode

咨询个nodejs内存占用问题, 2c4g上的一个node服务,堆内存基本97m左右,extenal 基本是3m左右,然而rss占用竟然达到了350m

问答
Gganshiqingyuan发布于 1 年前最后回复 4 天前
445490

如何排查是什么原因呢,内存碎片? 碎的也太离谱了吧,,申请内存的库也改成了jemalloc。 难道和nodejs有关? 本身就碎片化严重?

查看回复

回复 (4)

A
airelaycheck#44 天前

补充一个排查口径:RSS 不等于 heapUsed + external,也不能把差值直接当成碎片。Node 官方说明 RSS 还包含进程内的代码和 C++/JS 对象;arrayBuffers 已包含在 external 中,不能再重复相加。

可以先在相同负载下定时记录完整的 process.memoryUsage(),区分 heapTotal、heapUsed、external 和 RSS 是启动后稳定在一个高位,还是持续增长。若用了 Worker,RSS 是整个进程的,而其余字段只对应当前线程,也需要统一比较范围。仅凭 97m / 3m / 350m 这组快照,还不足以确定是碎片或泄漏。方便补充 Node 版本、是否使用 Worker,以及空闲/压测时这几个值的时间变化吗?

参考:https://nodejs.org/api/process.html#processmemoryusage

P
pm25coder#38 天前

@ganshiqingyuan 堆不动而 RSS 涨,多半是分配器碎片,不在堆里。我以前换成 jemalloc 后降下来一截,你这个场景我没验证过。

Z
zhennann#11 年前

看一下用的框架Controller/Service是否是全局单例的?可以看这个视频的说明:https://www.bilibili.com/video/BV1oJ7ezEEE5

参与回复

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