如何增加 Windows 上的 NodeJS 内存限制?

Axi*_*ili 3 memory windows configuration node.js npm

我需要在Windowsnpm install 10上的 NodeJS 14 上以 8GB 内存限制运行(具有 16GB RAM)。

我已尝试以下方法但无济于事:

  • node --max-old-space-size=8192 "C:\Program Files\nodejs\npm" install- 出现意外行为,但使用+ C后似乎仍为 4GBCTRL

  • set NODE_OPTIONS=--max-old-space-size=8192&&npm install- 仍然是4GB

  • 添加 NODE_OPTIONS 环境变量(同时添加到用户变量和系统变量)- 仍然是 4GB

在此输入图像描述


相关问题:

JΛY*_*ÐΞV 8


\n

问题疑难解答

\n
\n

到目前为止,您还没有显示任何故障排除结果,这让我相信问题是由“HEAP's MAX_SIZEEnv Variable”引起的,也没有显示任何证据表明该变量没有被分配您尝试分配给它的值。我并不是说问题不是由 env 变量引起的。但是,我想说的是,需要进行更多的故障排除才能确定问题的根本原因是什么。

\n

就我个人而言,从您迄今为止向社区展示的内容来看,我认为问题是由于堆以外的位置内存不足造成的,如果您使用装有Windows 10的典型 PC ,则可能是您的计算机没有\没有足够的内存,不是时期,但此刻您尝试进行下载。

\n
\n
\n

这就是为什么我认为你可能内存不足:

\n
\n

在我的机器上我有:

\n
    \n
  • 16GB 内存,
  • \n
  • 4 个 HDD @ 2TB,总共 8TB 内存
  • \n
  • 来自 Intel 的 8x 线程四核 I7 6700 6gen
  • \n
  • 华硕主板带 Z190 芯片组。
  • \n
\n

我的操作系统

\n

我使用 Linux,但我免费获得 Windows,因为对我来说购买新 PC 并升级它比单独购买部件更便宜。我从来没有启动到 Windows,所以它总是作为未受影响的全新安装。

\n

目前我刚刚升级到 Fedora Workstation 36。

\n
    \n
  • 高清 #1 (2TB):Windows 10
  • \n
  • HD #2 (2TB):Fedora 工作站
  • \n
  • HD #3 和 #4(2TBx2,总共 4TB):本地存储
  • \n
\n

测试

\n

我使用在其他线程上实现子进程的节点程序以及打开最多 70 个选项卡的 Firefox 浏览器运行性能测试,我会尝试一次刷新所有选项卡。

\n

结果令人震惊。

\n

我不会详细介绍,但要注意的重要一点是我有16GB DDR4 RAM

\n

当 Windows 需要 15+GB 内存时,Linux 只会使用大约 10GB+。涨幅为 37.5% - 42.5%。

\n

但是,我有 Windows PRO,这允许我禁用大部分遥测功能,并且我发现如果禁用 Windows 遥测功能和其他一些功能,Windows 的性能会更高。当 Windows 使用 15+ Linux 时,内存将达到 12+ GB,但这仍然会增加 25-20% 左右的内存。

\n

不过需要注意的一件重要的事情是,有时 Linux 会死机,当我系统超载时,Windows 的恢复能力更强,但让 Windows 陷入瘫痪所需的时间要少得多。

\n

我要表达的观点是:

\n

...你只使用了 8GB,现在已经不多了。

\n

2BH 我觉得我的16GB太少了,我打算尽快升级。

\n
\n
\n

步骤 #1 \xe2\x80\x94 进一步解决问题

\n
\n

排除故障时,您需要始终检查语法和语义是否正确,这样您就可以排除问题不是由于您犯下的愚蠢拼写错误造成的。

\n
\n
“我知道你的想法……”
\n
“这不是打字错误!” ,
\n
\n

但事实证明存在一个拼写错误:您作为问题的一部分添加的代码片段使用Node Command-line Flag语法,作为Node Environment Variable 的语法,这是不正确的,因为它们使用不同的字符集。乍一看,它们看起来相同,但如果您查看我在下面创建的由两部分组成的 MD 表,您会发现两者之间实际上存在相当大的差异

\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 语义\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2 \xa0语法\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0差异
命令行标志"--max-old-space-size"破折号
环境变量"--max_old_space_size"下划线
\n
“对于那些视力不太好的人来说,区别在于环境变量是使用下划线键入的,而另一个是使用破折号键入的”
\n
\n
\n

步骤#2 \xe2\x80\x94 配置后测试日志“MAX-OLD-SPACE”

\n
\n
\n

“如果您使用了正确的语法,但仍然遇到问题,您可以检查堆的最大大小实际上是否已配置为您分配给它的大小值。记录配置的V8 Max的过程控制台中的堆大小可以通过完成以下步骤来确定。”

\n
\n
\n

开始:在可以使用节点命令 \xe2\x80\x94 运行该文件的环境中创建一个完全空的 JavaScript 文件,并将文件命名为test.js

\n

将以下代码添加到test.js,并且不要添加任何其他内容。

\n
\n
\n/** \n  * @file "./test.js" \n  * @desc "PRINTS: The upper memory limit for V8s HEAP" \n  * */\n\nconst maxHeapSz = require(\'v8\').getHeapStatistics().heap_size_limit;\nconst maxHeapSz_GB = (maxHeapSz / 1024 ** 3).toFixed(1);\n\nconsole.log(\'--------------------------\');\nconsole.log(`${maxHeapSz_GB}GB`);\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n
\n
\n

步骤 #3 \xe2\x80\x94 运行以下命令

\n
\n
\n
\n~/$ 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\n\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

如果您生成的结果与图像中的编辑器(我的编辑器)生成的结果不同,那将是非常奇怪的,原因如下:

\n

上面的命令配置“Max_Old_Space”环境变量。我要求您“复制并粘贴”到文件“test.js”中的程序会打印命令环境配置更改的结果。它表明,每次将 Env Var 设置为不同的值时,“运行时”期间的 Env Var 都会不同。需要注意的是,它是一个变量,一个“环境变量”,它实际上并没有改变堆的大小,它代表的值只是说:

\n
\n
_“我开发人员批准堆增长到环境变量中设置的大小:“MAX_OLD_SPACE_SIZE”
\n
\n

...这并不立即意味着节点能够完成这样的大小,如果你愿意,你可以将其设置为 10e1000 MB,并且它很可能会接受该数字作为有效配置。我测试了各种不同的东西,毫无疑问,你可以将其设置为比你实际拥有的内存数量多数百倍。换句话说,它是一个变量(即内存中保存二进制值的位置的地址),设置它不应该有任何问题。更有可能的是,您的机器无法分配所需的空间量,8GB RAM,当您只有 16GB 时,对于某些系统来说,可以为单个进程提供大量空间,尤其是在运行 Windows 的情况下,或 MacOS。Linux 在资源密集型情况下是王者。

\n
\n



\n
\n

步骤 #4 \xe2\x80\x94 让我们看看您的系统必须提供什么

\n
\n
\n

“根据您上传到问题中的图像,我假设您使用的是 Windows,因此,我将继续仅针对 Windows 回答此问题。如果您需要其他平台的帮助,请通过编辑您的问题来告知我。”

\n
\n
检查您的操作系统性能工具,查看您机器的内存性能图表。如果 8GB 不可用,则将堆限制设置为多高都没有关系。这是一个很可能的情况,因为您可以设置 HeapSize 限制以使用您实际拥有的更多内存,并且仅仅因为您有一个 16MB 内存条并不意味着其中一半没有被使用,您可能会发现您的机器正在使用 7-10Gbs 进行后台进程。Windows 非常占用系统资源,这就是人们使用 Linux/Unix 来启动应用程序的原因。”_
\n
\n
执行以下步骤
\n
    \n
  1. 按以下键:CTRL+ ALT+DEL
    \n
  2. \n
  3. 单击\xe2\x80\x9c任务管理器\xe2\x80\x9d
    \n
  4. \n
  5. 单击 \xe2\x80\x9cPerformance\xe2\x80\x9d 选项卡并检查标题为 \xe2\x80\x9cMemory\xe2\x80\x9d 的部分
    \n
  6. \n
\n
如果性能工具显示您的内存使用率高于 45%,那么这就是您的问题。解决内存不足的一个快速解决方案是简单地添加更多内存,这可以通过以下方式完成:如果您的计算机有空间,则使用额外的内存条,升级到具有更多内存的内存条,升级整个计算机,切换到虚拟机具有足够内存的云、升级您的虚拟机(如果您已经在使用虚拟机)等等……然而,人们可以采用无数种不同的方法来增加内存;所有这些都需要金钱,因此,最好尝试最大程度地利用您当前的记忆,其中包括以下一些选项:
\n
    \n
  1. 消除后台进程
  2. \n
  3. 将您的平台更改为资源要求较低的平台。如果你想保持它基于 GUI,请使用 Ubuntu 21.04,或者如果你使用 Windows,Mint 是一个不错的选择。
  4. \n
  5. 如果您确实想节省尽可能多的资源,将大部分内存花费在应用程序/程序/服务器上,那么您显然会希望使用命令行界面,例如 Debian、Red-hat 或 Ubuntu,请确保选择 LTS 版本,因为它与编程语言不同,使用非 LTS 版本不会给您带来很多额外的好处,而 LTS 对于安全性极其重要。
  6. \n
  7. 最后,这是显而易见的,但如果可能的话,不要要求下载需要比您所能提供的更多内存的下载。
  8. \n
\n
\n
\n
\n

“如果此时这个问题仍然没有解决,我将需要您提供更多信息,例如您收到的错误消息。还有对实际发生的情况的更深入的解释,例如,进一步更深入的解释关于下面的声明将非常有帮助。以及提供上面要求的屏幕截图“

\n
\n
\n
这是什么意思?什么是出乎意料的?
\n
\n
CTRL“意外行为,但点击+后似乎仍然是 4GB C
\n
\n
\n
\n