FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed – JavaScript heap out of me

今天前端vue项目运行的时候突然报这个问题,
在这里插入图片描述

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

官方解释:

这个错误是由JavaScript运行时环境(如Node.js)中的V8引擎产生的,表示JavaScript虚拟机在进行垃圾回收时遇到了问题。具体来说,“FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed”意味着垃圾回收器在尝试回收和整理堆空间时效率不高,而且在接近堆的限制时分配失败了。

“Ineffective mark-compacts”:垃圾回收器在进行标记清除(mark-sweep)后,为了减少空间碎片,进行了一次整理(mark-compact),但效率不高。

“heap limit”:指的是JavaScript的堆内存已经接近或达到了其分配的最大限制。

“Allocation failed”:意味着在尝试为新对象分配内存时失败了,可能是因为没有更多的可用内存。

解决方法:

增加内存限制:可以通过启动Node.js时设置内存大小来尝试增加限制,例如使用node –max-old-space-size=1024来设置1024MB的内存限制。

检查内存泄漏:检查代码中是否有导致大量内存无法被垃圾回收器回收的问题,比如无法被释放的全局变量或者闭包等。

优化代码:减少内存消耗,比如通过使用更有效的数据结构,避免不必要的大型对象分配等。

分批处理数据:如果是处理大量数据导致的内存溢出,尝试分批次处理数据,而不是一次性加载所有数据。

使用外部资源:对于真的需要大量内存的应用,可以考虑使用像数据库这样的外部资源来存储不常访问的数据,减少对JavaScript堆内存的需求。

试过的解决方案:
1,Node.js版本过旧,更新node版本:对我没用。

2,清除项目依赖:rm -rf node_modules
清理npm缓存:npm cache clean –force
重新安装依赖:npm install
重新构建项目:对我没用。

3,increase-memory-limit 插件
安装插件:npm install -g cross-env increase-memory-limit
安装完之后运行项目会报错
“node –max-old-space-size=4096″不是内部或外部命令,也不是可运行的程序,这里不是内存设置太大,而是因为win10系统命令行中不能正确识别双引号” “,因此需要把这个插件包中涉及到的脚本中双引号都去掉,即修改node_modules下的.bin文件中的所有.cmd文件,将里面的”%_prog%” 去掉双引号 改成 %_prog%,有点麻烦,所以放弃了。

4,到package.json文件里,修改”scripts”里的serve命令:
“serve”: “vue-cli-service serve –copy”,
替换成
“serve”: “node –max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve –open”,
重新运行项目,可以运行了。

原文链接:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed – JavaScript heap out of me

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容