一般的后端语言中,在基本的内存使用上是没有限制的,但是在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 命令也可以查看内存

内存限制

介绍

  1. Node.js默认的内存限制

    Node.js默认的内存限制取决于你的操作系统和Node.js的版本。在大多数情况下,Node.js默认的内存限制应该是1.4GB(1024 * 1024 * 1400 字节),这是在64位系统下的情况。而在32位系统下,默认的内存限制大约是0.7GB。此外,这个默认的内存限制可能会因Node.js的不同版本以及你的操作系统而有所变化。

  2. 解决

    如果你的Node.js进程消耗了大量内存,可能是因为有内存泄漏或者其他性能问题。你可以:

case

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知道其极限并且设定值小于容器极限。

-max-new-space-size 新生代—!!!问题

按照常理,好多gc都是可以支持这些的,node不太一样,有些文章的有你搜不到,不知道这些人是从哪里知道的

具体能配置的,参考这个node18.17.0 Option

或者node官网

或者node版本下,自行查看