445490
如何排查是什么原因呢,内存碎片? 碎的也太离谱了吧,,申请内存的库也改成了jemalloc。 难道和nodejs有关? 本身就碎片化严重?
如何排查是什么原因呢,内存碎片? 碎的也太离谱了吧,,申请内存的库也改成了jemalloc。 难道和nodejs有关? 本身就碎片化严重?
补充一个排查口径:RSS 不等于 heapUsed + external,也不能把差值直接当成碎片。Node 官方说明 RSS 还包含进程内的代码和 C++/JS 对象;arrayBuffers 已包含在 external 中,不能再重复相加。
可以先在相同负载下定时记录完整的 process.memoryUsage(),区分 heapTotal、heapUsed、external 和 RSS 是启动后稳定在一个高位,还是持续增长。若用了 Worker,RSS 是整个进程的,而其余字段只对应当前线程,也需要统一比较范围。仅凭 97m / 3m / 350m 这组快照,还不足以确定是碎片或泄漏。方便补充 Node 版本、是否使用 Worker,以及空闲/压测时这几个值的时间变化吗?
@ganshiqingyuan 堆不动而 RSS 涨,多半是分配器碎片,不在堆里。我以前换成 jemalloc 后降下来一截,你这个场景我没验证过。
@zhennann 堆内存基本没咋变化,不像是普通的代码内存泄漏问题
看一下用的框架Controller/Service是否是全局单例的?可以看这个视频的说明:https://www.bilibili.com/video/BV1oJ7ezEEE5