如何增加 Windows 上的 NodeJS 内存限制?
How do you increase NodeJS memory limit on Windows?
我需要 运行 npm install
Windows 10(16GB RAM)上的 NodeJS 14 内存限制为 8GB。
我试过以下方法都没有用:
node --max-old-space-size=8192 "C:\Program Files\nodejs\npm" install
- 意外行为但在使用 CTRL + C 后似乎仍为 4GB
set NODE_OPTIONS=--max-old-space-size=8192&&npm install
- 仍然是 4GB
添加 NODE_OPTIONS 环境变量(到用户和系统变量)- 仍然是 4GB
相关问题:
NODE_OPTIONS 应该可以,尤其是在环境变量中。但是,其中一些应该是下划线而不是连字符。改为在 NODE_OPTIONS 环境变量中尝试 --max_old_space_size=8192
。 Here 是支持这一点的 link。
解决问题
到目前为止,您还没有显示任何故障排除结果,这让我相信问题是由 “HEAP 的 MAX_SIZE
Env 变量”引起的 ,您也没有显示任何证据表明该变量没有被分配您试图分配给它的值。我并不是说问题不是由 env 变量引起的。但是,我是说,需要进行更多的故障排除才能确定您的问题的根本原因是什么..
就个人而言,根据您迄今为止向社区展示的内容,我认为问题是由于 运行在堆以外的位置内存不足,如果您使用的是典型的 PC Windows 10,可能是你的机器内存不足,不是句号,但你正在尝试下载。
这就是我认为您可能 运行内存不足的原因:
在我的机器中我有:
- 16GB 内存,
- 4 个硬盘,每个 2TB,总共 8TB 内存
- 英特尔的 8 倍线程四核 I7 6700 6gen
- 带 Z190 的华硕主板 Chip-set。
我的操作系统
我使用 Linux,但我得到了免费的 Windows,因为对我来说购买一台新电脑并升级它比单独购买部件更便宜。我从来没有启动到 windows,所以它总是作为一个未受影响的全新安装。
目前我刚升级到 Fedora Workstation 36。
- 高清 #1 (2TB): Windows 10
- HD #2 (2TB):Fedora 工作站
- HD #3 & #4(2TBx2 总共 4TB):本地存储
正在测试
我 运行 使用在其他线程上实现 child 进程的节点程序进行性能测试,Firefox 浏览器最多打开 70 个选项卡,我会尝试一次刷新所有选项卡。
结果令人震惊。
我不会详细说明,但需要注意的重要一点是,我有 16GB 的 DDR4 RAM
当 Windows 需要 15+GB 的内存时,Linux 只会使用大约 10GB+。这是 37.5% - 42.5% 的收益。
然而,我有 Windows PRO,这允许我禁用大部分遥测,我发现如果我禁用 windows 遥测和其他一些功能 windows性能更高。当 windows 将使用 15+ Linux 将达到 12+ GB 时,这仍然是内存增加 25-20% 左右。
不过要注意一件重要的事情,有时 Linux 会冻结我,windows 在我使系统过载时恢复得更稳健,但陷入困境的时间要少得多 [= =230=]下.
我的观点:
...您只使用了 8GB,现在已经不是很多了。
2BH 感觉16GB的内存太少了,打算尽快升级
第 1 步 — 进一步解决问题
进行故障排除时,您需要始终检查您的语法和语义是否正确,这样您就可以排除问题不是由于您输入的愚蠢拼写错误造成的。
"I know what your thinking..."
"Its not a typo!",
但事实证明有一个错字:您作为问题的一部分添加的代码片段使用了 节点 Command-line 标志 语法,作为 节点环境变量 的语法,这是不正确的,因为它们使用不同的字符集。乍一看,它们看起来是一样的,但如果你看一下我在下面创建的由两部分组成的 MD table,你会发现两者之间实际上存在很大差异
SEMANTICS
SYNTAX
DIFFERENCE
Command-line Flag
"--max-old-space-size"
DASHES
Environment Variable
"--max_old_space_size"
UNDERSCORES
”对于有less-than-perfect视力的人来说,区别在于环境变量是使用下划线键入的,而其他使用破折号输入
第 2 步 — 测试日志“MAX-OLD-SPACE”POST-CONFIG
"If you used the right syntax and you still are having an issue, you can check to see that the max size of the heap is actually being configured to the size value that you are assigning to it. The process for logging the configured V8 Max Heap Size in the console can be done by completing the stops below."
开始: 在可以使用节点命令 运行 的环境中创建一个完全空的 JavaScript 文件 — 将文件命名为 test.js.
将下面的代码添加到test.js
,不要添加任何其他内容。
/**
* @file "./test.js"
* @desc "PRINTS: The upper memory limit for V8s HEAP"
* */
const maxHeapSz = require('v8').getHeapStatistics().heap_size_limit;
const maxHeapSz_GB = (maxHeapSz / 1024 ** 3).toFixed(1);
console.log('--------------------------');
console.log(`${maxHeapSz_GB}GB`);
第 3 步 — 运行 以下命令
~/$ node --max-old-space-size=8192 test.js; node --max-old-space-size=4096 test.js; node --max-old-space-size=2048 test.js; node --max-old-space-size=1024 test.js; node --max-old-space-size=512 test.js
如果你产生的结果与图像中的编辑器(我的编辑器)产生的结果不同,那将是非常难运行ge,原因如下:
上面的命令配置了“Max_Old_Space”环境变量。我要求您“复制并粘贴”到文件“test.js”的程序会打印环境配置更改命令的结果。它表明每次您将 Env Var 设置为不同的东西时,Env Var 在 "运行时间。需要注意的是,它是一个变量,一个“环境变量”,它实际上并没有改变堆的大小,它代表的值只是说:
_"I the developer approve of the heap growing to the size that is set in the Environment Variable: "MAX_OLD_SPACE_SIZE"
...这并不意味着节点能够立即完成这样的大小,见鬼,如果你愿意,你可以将它设置为 10e1000 MB,而且它很可能会接受该数字作为有效配置。我测试了各种不同的东西,毫无疑问,你可以设置它比你实际拥有的 ram 数量多几百倍。换句话说,它是一个变量(即内存中保存二进制值的位置的地址),设置它应该没有任何问题。您的机器更有可能无法分配所需的 space 内存,8GB RAM,当您只有 16GB 时,对于某些系统来说,可以提供大量内存单个进程,尤其是您的 运行ning Windows 或 MacOS。 Linux 在资源密集型情况下为王。
第 4 步 — 让我们看看您的系统必须提供什么
"I assume your on Windows from the image you uploaded into your question, therefore, I will continue to answer this question for Windows only. If you need help with a different platform please let me know by editing your question."
检查您的 OS 性能工具,看看您的机器的内存预制图表是什么样的。如果 8GB 不可用,那么将堆限制设置为多高都无关紧要。这是一个非常可能的情况,因为您可以设置 HeapSize 限制以使用您实际拥有的更多 ram,并且仅仅因为您有一个 16MB 的记忆棒并不意味着它的一半没有被使用,您可能会发现您的机器后台进程使用 7-10Gbs。 Windows 占用系统资源,这就是人们使用 Linux/Unix 启动应用程序的原因。”_
执行以下步骤
按以下键:CTRL + ALT + DEL
点击“任务管理器”
单击“性能”选项卡并检查标题为“内存”的部分
如果性能工具显示您的内存使用率高于 45%,那么这就是您的问题。没有足够内存的快速解决方案是简单地添加更多内存,这可以通过以下方式完成:如果您的机器有空间,则使用额外的内存条,升级到内存更多的内存条,升级整个机器,切换到虚拟机上具有足够内存的云,如果您已经在使用虚拟机,请升级您的虚拟机,等等……但是,有无数种不同的方法可以增加内存;所有这些都需要钱,因此,最好尽量利用您当前的记忆力,其中包括以下一些选项:
- 消除后台进程
- 将您的平台更改为对资源要求较低的平台。如果你想保持它基于 GUI,请使用 Ubuntu 21.04,或者如果你使用 windows.
,Mint 是一个很好的选择
- 如果你真的想尽可能多地节省资源,将大部分内存花在 application/program/server 上,你显然会希望使用 command-line 界面,例如 Debian,Red-hat 或 Ubuntu,确保选择 LTS 版本,因为它不像编程语言,使用非 LTS 版本不会给你带来很多额外的好处,而 LTS 对安全性极其重要。
- 最后,这是显而易见的,但如果可能的话,不要要求下载需要的内存超过您所能提供的内存。
"If this question still is not resolved at this point I will need a bit more info from you, such as the error messages you receive. Also a more in-depth explanation of what is actually happening, for instance, a further more indepth explanation about the statement below would be very helpful. As well as providing the screen shot asked for above"
这是什么意思?出乎意料的是什么?
"unexpected behavior but seems to still be 4GB after hitting CTRL + C"
我需要 运行 npm install
Windows 10(16GB RAM)上的 NodeJS 14 内存限制为 8GB。
我试过以下方法都没有用:
node --max-old-space-size=8192 "C:\Program Files\nodejs\npm" install
- 意外行为但在使用 CTRL + C 后似乎仍为 4GBset NODE_OPTIONS=--max-old-space-size=8192&&npm install
- 仍然是 4GB添加 NODE_OPTIONS 环境变量(到用户和系统变量)- 仍然是 4GB
相关问题:
NODE_OPTIONS 应该可以,尤其是在环境变量中。但是,其中一些应该是下划线而不是连字符。改为在 NODE_OPTIONS 环境变量中尝试 --max_old_space_size=8192
。 Here 是支持这一点的 link。
解决问题
到目前为止,您还没有显示任何故障排除结果,这让我相信问题是由 “HEAP 的 MAX_SIZE
Env 变量”引起的 ,您也没有显示任何证据表明该变量没有被分配您试图分配给它的值。我并不是说问题不是由 env 变量引起的。但是,我是说,需要进行更多的故障排除才能确定您的问题的根本原因是什么..
就个人而言,根据您迄今为止向社区展示的内容,我认为问题是由于 运行在堆以外的位置内存不足,如果您使用的是典型的 PC Windows 10,可能是你的机器内存不足,不是句号,但你正在尝试下载。
这就是我认为您可能 运行内存不足的原因:
在我的机器中我有:
- 16GB 内存,
- 4 个硬盘,每个 2TB,总共 8TB 内存
- 英特尔的 8 倍线程四核 I7 6700 6gen
- 带 Z190 的华硕主板 Chip-set。
我的操作系统
我使用 Linux,但我得到了免费的 Windows,因为对我来说购买一台新电脑并升级它比单独购买部件更便宜。我从来没有启动到 windows,所以它总是作为一个未受影响的全新安装。
目前我刚升级到 Fedora Workstation 36。
- 高清 #1 (2TB): Windows 10
- HD #2 (2TB):Fedora 工作站
- HD #3 & #4(2TBx2 总共 4TB):本地存储
正在测试
我 运行 使用在其他线程上实现 child 进程的节点程序进行性能测试,Firefox 浏览器最多打开 70 个选项卡,我会尝试一次刷新所有选项卡。
结果令人震惊。
我不会详细说明,但需要注意的重要一点是,我有 16GB 的 DDR4 RAM
当 Windows 需要 15+GB 的内存时,Linux 只会使用大约 10GB+。这是 37.5% - 42.5% 的收益。
然而,我有 Windows PRO,这允许我禁用大部分遥测,我发现如果我禁用 windows 遥测和其他一些功能 windows性能更高。当 windows 将使用 15+ Linux 将达到 12+ GB 时,这仍然是内存增加 25-20% 左右。
不过要注意一件重要的事情,有时 Linux 会冻结我,windows 在我使系统过载时恢复得更稳健,但陷入困境的时间要少得多 [= =230=]下.
我的观点:
...您只使用了 8GB,现在已经不是很多了。
2BH 感觉16GB的内存太少了,打算尽快升级
第 1 步 — 进一步解决问题
进行故障排除时,您需要始终检查您的语法和语义是否正确,这样您就可以排除问题不是由于您输入的愚蠢拼写错误造成的。
"I know what your thinking..."
"Its not a typo!",
但事实证明有一个错字:您作为问题的一部分添加的代码片段使用了 节点 Command-line 标志 语法,作为 节点环境变量 的语法,这是不正确的,因为它们使用不同的字符集。乍一看,它们看起来是一样的,但如果你看一下我在下面创建的由两部分组成的 MD table,你会发现两者之间实际上存在很大差异
SEMANTICS | SYNTAX | DIFFERENCE |
---|---|---|
Command-line Flag | "--max-old-space-size" |
DASHES |
Environment Variable | "--max_old_space_size" |
UNDERSCORES |
”对于有less-than-perfect视力的人来说,区别在于环境变量是使用下划线键入的,而其他使用破折号输入
第 2 步 — 测试日志“MAX-OLD-SPACE”POST-CONFIG
"If you used the right syntax and you still are having an issue, you can check to see that the max size of the heap is actually being configured to the size value that you are assigning to it. The process for logging the configured V8 Max Heap Size in the console can be done by completing the stops below."
开始: 在可以使用节点命令 运行 的环境中创建一个完全空的 JavaScript 文件 — 将文件命名为 test.js.
将下面的代码添加到test.js
,不要添加任何其他内容。
/**
* @file "./test.js"
* @desc "PRINTS: The upper memory limit for V8s HEAP"
* */
const maxHeapSz = require('v8').getHeapStatistics().heap_size_limit;
const maxHeapSz_GB = (maxHeapSz / 1024 ** 3).toFixed(1);
console.log('--------------------------');
console.log(`${maxHeapSz_GB}GB`);
第 3 步 — 运行 以下命令
~/$ node --max-old-space-size=8192 test.js; node --max-old-space-size=4096 test.js; node --max-old-space-size=2048 test.js; node --max-old-space-size=1024 test.js; node --max-old-space-size=512 test.js
如果你产生的结果与图像中的编辑器(我的编辑器)产生的结果不同,那将是非常难运行ge,原因如下:
上面的命令配置了“Max_Old_Space”环境变量。我要求您“复制并粘贴”到文件“test.js”的程序会打印环境配置更改命令的结果。它表明每次您将 Env Var 设置为不同的东西时,Env Var 在 "运行时间。需要注意的是,它是一个变量,一个“环境变量”,它实际上并没有改变堆的大小,它代表的值只是说:
_"I the developer approve of the heap growing to the size that is set in the Environment Variable: "MAX_OLD_SPACE_SIZE"
...这并不意味着节点能够立即完成这样的大小,见鬼,如果你愿意,你可以将它设置为 10e1000 MB,而且它很可能会接受该数字作为有效配置。我测试了各种不同的东西,毫无疑问,你可以设置它比你实际拥有的 ram 数量多几百倍。换句话说,它是一个变量(即内存中保存二进制值的位置的地址),设置它应该没有任何问题。您的机器更有可能无法分配所需的 space 内存,8GB RAM,当您只有 16GB 时,对于某些系统来说,可以提供大量内存单个进程,尤其是您的 运行ning Windows 或 MacOS。 Linux 在资源密集型情况下为王。
第 4 步 — 让我们看看您的系统必须提供什么
"I assume your on Windows from the image you uploaded into your question, therefore, I will continue to answer this question for Windows only. If you need help with a different platform please let me know by editing your question."
检查您的 OS 性能工具,看看您的机器的内存预制图表是什么样的。如果 8GB 不可用,那么将堆限制设置为多高都无关紧要。这是一个非常可能的情况,因为您可以设置 HeapSize 限制以使用您实际拥有的更多 ram,并且仅仅因为您有一个 16MB 的记忆棒并不意味着它的一半没有被使用,您可能会发现您的机器后台进程使用 7-10Gbs。 Windows 占用系统资源,这就是人们使用 Linux/Unix 启动应用程序的原因。”_
执行以下步骤
按以下键:CTRL + ALT + DEL
点击“任务管理器”
单击“性能”选项卡并检查标题为“内存”的部分
如果性能工具显示您的内存使用率高于 45%,那么这就是您的问题。没有足够内存的快速解决方案是简单地添加更多内存,这可以通过以下方式完成:如果您的机器有空间,则使用额外的内存条,升级到内存更多的内存条,升级整个机器,切换到虚拟机上具有足够内存的云,如果您已经在使用虚拟机,请升级您的虚拟机,等等……但是,有无数种不同的方法可以增加内存;所有这些都需要钱,因此,最好尽量利用您当前的记忆力,其中包括以下一些选项:
- 消除后台进程
- 将您的平台更改为对资源要求较低的平台。如果你想保持它基于 GUI,请使用 Ubuntu 21.04,或者如果你使用 windows. ,Mint 是一个很好的选择
- 如果你真的想尽可能多地节省资源,将大部分内存花在 application/program/server 上,你显然会希望使用 command-line 界面,例如 Debian,Red-hat 或 Ubuntu,确保选择 LTS 版本,因为它不像编程语言,使用非 LTS 版本不会给你带来很多额外的好处,而 LTS 对安全性极其重要。
- 最后,这是显而易见的,但如果可能的话,不要要求下载需要的内存超过您所能提供的内存。
"If this question still is not resolved at this point I will need a bit more info from you, such as the error messages you receive. Also a more in-depth explanation of what is actually happening, for instance, a further more indepth explanation about the statement below would be very helpful. As well as providing the screen shot asked for above"
这是什么意思?出乎意料的是什么?
"unexpected behavior but seems to still be 4GB after hitting CTRL + C"