《深入浅出Node.js》内存控制

2022-02-27  本文已影响0人  我叫Aliya但是被占用了

依托 V8 的 NODE 在使用内存时是有大小限制的,具体大小与系统类型、版本、NODE 版本相关(64 位系统 1.4GB 和 32 位系统 0.7 GB 的大小)。

NODE 与 C++不同,垃圾回收 GC 由系统自动执行,不由开发者参与,当代码使用不当时,会导致 GC 不能正确回收发生内存泄漏

V8 对象(内存)分配 及回收

> node --max-old-space-size=1700 test.js // 单位为MB,老生代内存大小限制
> node --max-new-space-size=1024 test.js // 单位为KB,新生代内存大小限制
>
> process.memoryUsage() // 查看内存使用情况
< {
    rss: 14958592,
    heapTotal: 7195904, // 申请到的堆内存
    heapUsed: 2821496   // 使用的量
}

作用域和闭包对内存的影响

查看内存使用情况

> process.memoryUsage() // 查看内存使用情况
< {
    rss: 14958592,      // 常驻集大小,包括所有 C++ 和 JavaScript 对象和代码;
    heapTotal: 7195904, // 申请到的堆内存
    heapUsed: 2821496,  // 使用的量
    external: 13522,    // 绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用量。
    arrayBuffers: 15159 // 所有 Node.js Buffer
}
> os.totalmem() // 系统的总内存
< 8589934592
> os.freemem()  // 系统闲置内存
< 185921536

heapTotal 不包含 rss、arrayBuffers、external。external 包含 arrayBuffers。批量操作 buffer 后,heapTotal、heapUsed 不变,arrayBuffers、external 变大(rss 短时涨一些,很快就下去了)

内存泄漏

内存泄漏排查工具

上一篇 下一篇

猜你喜欢

热点阅读