解决问题
到目前为止,您没有显示任何故障排除结果,这使我相信问题是由 “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`);
-
运行以下命令
~/$ 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 来启动应用程序的原因。”_
执行以下步骤
-
按以下键:CTRL + ALT + DEL
-
点击“任务管理器”
-
单击“性能”选项卡并检查标题为“内存”的部分
如果性能工具显示您的内存使用率高于 45%,那么这就是您的问题。没有足够内存的快速解决方案是简单地添加更多内存,这可以通过以下方式完成:如果您的机器有空间,则使用额外的内存条,升级到更多内存条,升级整个机器,切换到虚拟机具有足够内存的云,如果您已经在使用虚拟机,则升级您的虚拟机,等等……但是,人们可以通过无数种不同的方式来增加内存;所有这些都需要钱,因此,最好尽量利用您当前的记忆力,其中包括以下一些选项:
- 消除后台进程
- 将您的平台更改为对资源要求较低的平台。如果您想让它基于 GUI,请使用 Ubuntu 21.04,如果您使用 Windows,Mint 是一个不错的选择。
- 如果您真的想尽可能多地节省资源,将大部分内存花费在应用程序/程序/服务器上,您显然会希望使用命令行界面,例如 Debian、Red-hat 或 Ubuntu,请务必选择 LTS 版本,因为它不像编程语言,使用非 LTS 版本不会给您带来太多额外的好处,而 LTS 对安全性非常重要。
- 最后,这一点很明显,但如果可能的话,不要要求下载需要的内存超出您所能提供的范围。
“如果此时此问题仍未解决,我将需要您提供更多信息,例如您收到的错误消息。此外,还需要更深入地解释实际发生的情况,例如,对下面的陈述进行更深入的解释将非常有帮助。以及提供上面要求的屏幕截图"
这是什么意思?有什么意外?
"意外的行为,但在点击 CTRL + C"
后似乎仍然是 4GB