背景在上一篇文章中,我们在构建项目时遇到了内存溢出问题。当时的解决方案是:直接增加node的内存限制,避免达到内存限制。今天听同事分享一个新方法,觉得不错,特此记录,顺便分享给大家,希望对大家有所帮助。文中直接报错图:提示已经很明显了:JavascriptHeapoutofmemory。当我们看到内存溢出这个关键字的时候,我们一般会认为是Node.js内存不足导致的。但是Node进程的内存限制是多少?我在网上找到了如下描述:目前默认情况下V8在32位系统上内存限制为512mb,在64位系统上为1gb。可以通过将--max-old-space-size设置为最大值~1gb(32位)和~1.7gb(64位)来提高限制,但建议您将单个进程拆分为多个工作进程如果您达到内存限制。翻译:目前,默认情况下,V8的内存限制在32位系统上为512mb,在64位系统上为1gb。可以通过将--max-old-space-size设置为最大值~1gb(32位)和~1.7gb(64位)来增加此限制,但如果达到内存限制,建议您将单个进程拆分为多个工作流程。想知道自己电脑的内存限制有多大,可以直接炸内存看报错。运行如下代码://测试多个块中最大分配量的小程序。//此脚本搜索最大分配量。//分配一定大小以测试是否可以完成。functionalloc(size){常量数字=大小/8;constarr=[]arr.length=数字;//模拟“大小”字节的分配。for(leti=0;i{//获取对现有ForkTsCheckerWebpackPlugin的引用constexistingForkTsChecker=config.plugins.filter(p=>pinstanceofForkTsCheckerWebpackPlugin,)[0];//移除现有ForkTsCheckerWebpackPlugin//这样我们就可以用修改后的版本替换它config.plugins=config.plugins.filter(p=>!(pinstanceofForkTsCheckerWebpackPlugin),);//复制原始ForkTsCheckerWebpackPlugin实例的选项//并添加memoryLimit属性constforkTsCheckerOptions=existingForkTsChecker.options;forkTsCheckerOptions.memoryLimit=4096;config.plugins.push(newForkTsCheckerWebpackPlugin(forkTsCheckerOptions));}修改后,构建成功。关于垃圾回收在Node.js中,V8自动帮助我们进行垃圾回收。让我们简单看一下V8是如何处理内存的。一些定义residentsetsize:是进程占用的内存部分,保存在RAM中,包括:代码本身对象的内存大小:对象自身占用的内存大小对象的保留大小:删除对象及其相关对象后释放的内存大小垃圾收集器的工作原理应用程序使用的过程更长。一般来说,内存分配很便宜,而内存池用完后收集起来很昂贵。如果无法从根节点到达某个对象,则该对象是垃圾回收的候选对象,因此该对象不会被根对象或任何其他活动对象引用。根对象可以是全局对象、DOM元素或局部变量。堆有两个主要部分,新空间和旧空间。新空间是进行新分配的地方。这里的垃圾收集速度很快,大小约为1-8MB。留在新空间中的对象称为新生代。在新空间存活下来的对象被提升到旧空间——它们被称为老年代。旧空间中的分配很快,但收集很昂贵,因此很少执行。节点垃圾收集为什么垃圾收集很昂贵?V8JavaScript引擎采用stop-the-world垃圾收集器机制。实际上,这意味着程序在进行垃圾收集时停止执行。通常,大约有20%的年轻代可以Surviving到老年代,直到老空间用完才会开始回收。为此,V8引擎使用了两种不同的收集算法:Scavenge:速度快,适用于新生代;Mark-Sweep:速度较慢,适用于老年代。空间有限。更多关于v8垃圾回收的内容可以参考以下文章:http://jayconrod.com/posts/55...https://juejin.cn/post/684490...https://juejin。cn/post/684490...总结简单总结一下,上面介绍的两种方法:直接增加内存,使用:node--max-old-space-size=4096分离出一些耗内存的进程,一个插件是用到的:fork-ts-checker-webpack-plugin这两个方式希望大家留下印象,记住。好了,内容就这些了,谢谢。本人才华横溢,学问有限,如有错误欢迎指正。谢谢。相关资料https://www.cloudbees.com/blo...http://jayconrod.com/posts/55...https://blog.risingstack.com/...最后如果找到内容有帮助,可以关注我的公众号,掌握最新动态,一起学习!