process.memoryUsage 可以查看 nodejs占用的内存
内存指标
- rss
- Resident Set Size,表示一个地址空间,就像门牌号一样
- nodejs执行时,为进程执行分配的总内存
- heap 表示空间内地址的集合
- heapTotal
- V8分配的堆的总大小
- heapUsed
- V8执行旗舰实际使用的内存
- external
- 进程使用的一些 C的系统库,占用的内存
OOM内存泄漏
OOM,out of memory 内存泄漏
为什么会出现内存泄漏?
nodejs的底层 V8 引擎对内存的使用是有上限的;
- 64位系统,约为 1.4GB
- 32位系统,约为 0.7GB
因为 V8对内存的使用限制,当内存超过了这个限制,就会提示内存泄漏 OOM
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
出现内存泄露的场景
- 前端打包内存溢出Javascript heap out of memory https://www.jianshu.com/p/797ce6d93e69
- 云服务器的内存区太小导致执行出错,解决需要增大该内存区域
export NODE_OPTIONS="--max-old-space-size=8192"
Core
内存最初使用线圈做的,所以称之为 Core
CoreDump
CoreDump是在程序运行异常中止或崩溃时,操作系统系统会将内存状态记录下来,保存到某一个文件里面;
这个行为就是 Core dump,类似于快照,或 X光片。
- CoreDump就像一张照片,所以也叫内存快照
- 类似叫法,HeapSnapshot,V8 HeapSnapshot分析
- 排查内存泄漏只能通过 CoreDump,内存监控只能发现内存泄漏问题,不能知道为什么泄漏!