首页 > 解决方案 > 你如何增加 Windows 上的 NodeJS 内存限制?

问题描述

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

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


相关问题:

标签: node.jswindowsnpmmemory

解决方案



解决问题


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


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


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



第 1 步——语法和语义


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

“我知道你的想法……”
“不是错字!” ,

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


              语义学                          句法                区别
命令行标志 "--max-old-space-size" 破折号
环境变量 "--max_old_space_size" 下划线
“对于那些视力不太理想的人来说,不同之处在于环境变量使用下划线键入,而另一个使用破折号键入”



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


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


开始:在可以使用 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 在"Run Time"期间都会有所不同。需要注意的是,它是一个变量,一个“环境变量”,它实际上并没有改变堆的大小,它所代表的值只是说:

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

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





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


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

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

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


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


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



推荐阅读