【问题标题】:How do you increase NodeJS memory limit on Windows?你如何增加 Windows 上的 NodeJS 内存限制?
【发布时间】:2021-09-27 16:07:17
【问题描述】:

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

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

  • node --max-old-space-size=8192 "C:\Program Files\nodejs\npm" install - 意外行为,但在 Ctrl+C-ing 后似乎仍然是 4GB
  • set NODE_OPTIONS=--max-old-space-size=8192&&npm install - 仍然是 4GB
  • 添加 NODE_OPTIONS 环境变量(用户和系统变量) - 仍然是 4GB

相关问题:

【问题讨论】:

  • 如果您能向我们介绍您取得的任何进展,或尝试解决此问题,那就太好了。

标签: node.js windows npm memory


【解决方案1】:

解决问题


到目前为止,您没有显示任何故障排除结果,这使我相信问题是由 “HEAP 的 MAX SIZE Env 变量”引起的,您也没有显示任何证据表明该变量没有被分配您尝试分配给它的值。我并不是说这个问题不是由 Env 变量引起的。但是,我的意思是,需要进行更多的故障排除才能确定您的问题的根本原因是什么......
就个人而言,从您迄今为止向社区展示的情况来看,我认为问题是由于堆以外的位置内存不足,如果您使用带有 Windows 10 的典型 PC strong>,可能是你的机器内存不够,不是句号,而是你尝试下载的那一刻。


这就是我认为您内存不足的原因:


“我的机器也有 16GB 的内存,带有 6Gen I7。我的机器有 3 个 HDD,1 个 2TB 用于存储,一个 TB HDD 用于运行我用于开发的平台 “Ubuntu 21.04”,以及另一个用于 “Windows 10 专业版” 的单个 1TB 硬盘。我对这两个硬盘进行了对比测试为了这篇文章,我确实写了一个很长的摘录,但为了简洁起见,我只是告诉你结果,如果你有问题,你可以在 cmets 中提问。运行我唯一的我编辑器打开几个选项卡(5 个选项卡),打开几个选项卡的浏览器,就像我通常做的那样(9 个选项卡)。Ubuntu 使用了 16.2GB 内存的 22.8%,并且在 Windows 中打开了相同的软件,但默认使用 Windows浏览器 EDGE,而不是 Ubuntu 的默认 Firefox 浏览器,Windows 使用了 38.2%。现在,edge 更快,因为它没有我下载和使用的浏览器扩展Firefox,它也没有包子ch 的缓存数据可以持续跟踪和更新,因为我以前从未使用过它。 Windows 也没有备份我的文件,因为我从不使用 Windows,所以它是全新安装的。 Ubuntu 为我使用的小东西运行了许多进程。最后,很容易看出从运行 Windows 的机器上请求 8GB 空间是如何轻松完成的。但唯一确定的方法是解决问题,我在下面列出了如何做”



第 1 步 — 语法和语义


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

“我知道你在想什么……”
“这不是错字!”,

但事实证明有一个错字:作为问题的一部分添加的代码 sn-p 使用 Node Command-line Flag 语法,作为节点环境变量的语法,这是不正确的,因为它们使用不同的字符集。乍一看,它们看起来相同,但如果您查看我在下面创建的 2 部分 MD 表,您会发现两者之间实际上存在很大差异


              SEMANTICS                          SYNTAX                DIFFERENCE
Command-line Flag "--max-old-space-size" DASHES
Environment Variable "--max_old_space_size" UNDERSCORES
"对于视力不太理想的人来说,不同的是环境变量用下划线输入,另一个用破折号输入" H6>


第 2 步 — 测试日志“MAX-OLD-SPACE”配置后


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


开始:在可以使用 node 命令运行的环境中创建一个完全空的 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`);


  1. 运行以下命令

~/$ 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

如果你产生的结果与图像中的编辑器(我的编辑器)产生的结果不同,那就太奇怪了,原因如下:

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

_"我开发者同意堆增长到环境变量中设置的大小:"MAX_OLD_SPACE_SIZE"

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





第 3 步 — 让我们看看您的系统必须提供什么


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

检查你的操作系统性能工具,看看你的机器的内存性能图表是什么样的。如果 8GB 不可用,那么将堆限制设置为多高都无关紧要。这是一个非常可能的情况,因为您可以设置 HeapSize 限制以使用您实际拥有的更多内存,并且仅仅因为您有一个 16MB 的内存条并不意味着它的一半没有被使用,您可能会发现您的机器正在为后台进程使用 7-10Gbs。 Windows 对系统资源的消耗很大,这就是人们使用 Linux/Unix 来启动应用程序的原因。”_

执行以下步骤
  1. 按以下键:CTRL + ALT + DEL
  2. 点击“任务管理器”
  3. 单击“性能”选项卡并检查标题为“内存”的部分
如果性能工具显示您的内存使用率高于 45%,那么这就是您的问题。没有足够内存的快速解决方案是简单地添加更多内存,这可以通过以下方式完成:如果您的机器有空间,则使用额外的内存条,升级到更多内存条,升级整个机器,切换到虚拟机具有足够内存的云,如果您已经在使用虚拟机,则升级您的虚拟机,等等……但是,人们可以通过无数种不同的方式来增加内存;所有这些都需要钱,因此,最好尽量利用您当前的记忆力,其中包括以下一些选项:
  1. 消除后台进程
  2. 将您的平台更改为对资源要求较低的平台。如果您想让它基于 GUI,请使用 Ubuntu 21.04,如果您使用 Windows,Mint 是一个不错的选择。
  3. 如果您真的想尽可能多地节省资源,将大部分内存花费在应用程序/程序/服务器上,您显然会希望使用命令行界面,例如 Debian、Red-hat 或 Ubuntu,请务必选择 LTS 版本,因为它不像编程语言,使用非 LTS 版本不会给您带来太多额外的好处,而 LTS 对安全性非常重要。
  4. 最后,这一点很明显,但如果可能的话,不要要求下载需要的内存超出您所能提供的范围。


“如果此时此问题仍未解决,我将需要您提供更多信息,例如您收到的错误消息。此外,还需要更深入地解释实际发生的情况,例如,对下面的陈述进行更深入的解释将非常有帮助。以及提供上面要求的屏幕截图"


这是什么意思?有什么意外?
"意外的行为,但在点击 CTRL + C"
后似乎仍然是 4GB


【讨论】:

  • 非常感谢 JAY-DEV!对不起,我不得不把它放在一边,因为我已经坚持了好几天了,但以后可能会回来。破折号与下划线的好点。我实际上设法通过升级到节点 16 来完成 npm i,执行 npm i,回到节点 14 并再次执行 npm i,但在运行该项目时仍有其他问题,所以我暂时将其放在一边。我会接受你的彻底回答。再次感谢!
  • 太棒了,我很感激@Aximili。如果你回到这个项目,并且需要帮助解决内存问题,只需在这里给我写评论,我一直在,而且我很擅长解决它们。我现在还欠你 100 个代表价值的解决方案,哈哈。但说真的,当你再次开始这个项目时,请告诉我发生了什么。
【解决方案2】:

NODE_OPTIONS 应该可以工作,尤其是在环境变量中。但是,其中一些应该是下划线而不是连字符。在 NODE_OPTIONS 环境变量中尝试--max_old_space_size=8192Here 是一个支持它的链接。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2014-05-07
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多