一般的后端语言中,在基本的内存使用上是没有限制的,但是在node中通过JavaScript使用内存时就会发现只能使用部分内存(64位系统约为1.4G,32位系统约为0.7G),在这样的限制下,node无法直接将一个大文件读入内存进行处理,即使电脑的物理内存有16G,在单个node进程的情况下,内存也无法得到充足的使用。
const v8 = require('v8')
console.log('HeapStatistics:',v8.getHeapStatistics()) // 查询堆内存上限设置
不同版本结果可能不太医院 跟机器也可能有关系
let neiCun = process.memoryUsage();
console.log('内存大小:',neiCun);
输出
内存大小: {
rss: 19619840,
heapTotal: 4481024,
heapUsed: 2817824,
external: 941362,
arrayBuffers: 9898
}
属性名 说明
rss 常驻集大小,是进程在主内存设备(即总分配内存的子集)中占用的空间量,包括所有 C++ 和 JavaScript 对象和代码。
heapTotal V8 的内存使用量,已申请到的内存 单位是:B
heapUsed V8 的内存使用量,当前已使用的内存 单位是:B
external 绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用量。
arrayBuffers 为 ArrayBuffer 和 SharedArrayBuffer 分配的内存,包括所有 Node.js Buffer。 这也包含在 external 值中。
当 Node.js 被用作嵌入式库时,此值可能为 0,因为在这种情况下可能不会跟踪 ArrayBuffer 的分配
小知识:在浏览器的控制台中输入 window.performance 命令也可以查看内存
Node.js默认的内存限制
Node.js默认的内存限制取决于你的操作系统和Node.js的版本。在大多数情况下,Node.js默认的内存限制应该是1.4GB(1024 * 1024 * 1400 字节),这是在64位系统下的情况。而在32位系统下,默认的内存限制大约是0.7GB。此外,这个默认的内存限制可能会因Node.js的不同版本以及你的操作系统而有所变化。
解决
如果你的Node.js进程消耗了大量内存,可能是因为有内存泄漏或者其他性能问题。你可以:
-max_old_space_size参数来手动设置内存限制的大小。https://developer.ibm.com/articles/nodejs-memory-management-in-container-environments/ node 容器中内存限制
When Node.js applications are running within containers with memory limits set (using the --memory option for docker or any other flags with your orchestration system), use the --max-old-space-size
option to ensure that Node knows its limit and that the set value is smaller than the container limit.
当 Node.js 应用程序在设置了内存限制的容器中运行时(使用 docker 的 --memory 选项或编排系统的任何其他标志),请使用 --max-old-space-size 选项来确保 Node知道其极限并且设定值小于容器极限。
按照常理,好多gc都是可以支持这些的,node不太一样,有些文章的有你搜不到,不知道这些人是从哪里知道的
具体能配置的,参考这个node18.17.0 Option
或者node官网
或者node版本下,自行查看