ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

angular4 编译时内存溢出

2021-01-21 15:29:46  阅读:318  来源: 互联网

标签:node bin Handle 编译 angular4 internal 内存 v8 local


ng build --prod

[5019:0x103001c00]   975889 ms: Mark-sweep 1444.8 (1570.7) -> 1444.8 (1567.7) MB, 1096.2 / 0.0 ms  (+ 0.0 ms in 0 steps since start of marking, biggest step 0.0 ms, walltime since start of marking 1250 ms) last resort 
[5019:0x103001c00]   976995 ms: Mark-sweep 1444.8 (1567.7) -> 1444.7 (1567.7) MB, 1104.5 / 0.0 ms  last resort 


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x6a161e1bbd9 <JS Object>
    1: OutputStream(aka OutputStream) [0x6a161e02241 <undefined>:~3952] [pc=0x846e41ba59a](this=0x6a161e02241 <undefined>,options=0x6a161e02241 <undefined>)
    2: print_to_string [0x6a161e02241 <undefined>:4375] [pc=0x846e3b1a329](this=0x34233ad63c09 <an AST_Binary with map 0x6ddc357fea9>,options=0x6a161e02241 <undefined>)
    3: arguments adaptor frame: 0->1
    4: best_of_expression(aka best_...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [/usr/local/bin/node]
 2: node::FatalException(v8::Isolate*, v8::Local<v8::Value>, v8::Local<v8::Message>) [/usr/local/bin/node]
 3: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]
 4: v8::internal::Factory::NewTransitionArray(int) [/usr/local/bin/node]
 5: v8::internal::TransitionArray::Insert(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Map>, v8::internal::SimpleTransitionFlag) [/usr/local/bin/node]
 6: v8::internal::Map::CopyReplaceDescriptors(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::DescriptorArray>, v8::internal::Handle<v8::internal::LayoutDescriptor>, v8::internal::TransitionFlag, v8::internal::MaybeHandle<v8::internal::Name>, char const*, v8::internal::SimpleTransitionFlag) [/usr/local/bin/node]
 7: v8::internal::Map::CopyAddDescriptor(v8::internal::Handle<v8::internal::Map>, v8::internal::Descriptor*, v8::internal::TransitionFlag) [/usr/local/bin/node]
 8: v8::internal::Map::CopyWithField(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::FieldType>, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::TransitionFlag) [/usr/local/bin/node]
 9: v8::internal::Map::TransitionToDataProperty(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Object::StoreFromKeyed) [/usr/local/bin/node]
10: v8::internal::LookupIterator::PrepareTransitionToDataProperty(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::Object>, v8::internal::PropertyAttributes, v8::internal::Object::StoreFromKeyed) [/usr/local/bin/node]
11: v8::internal::StoreIC::LookupForWrite(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::Object::StoreFromKeyed) [/usr/local/bin/node]
12: v8::internal::StoreIC::UpdateCaches(v8::internal::LookupIterator*, v8::internal::Handle<v8::internal::Object>, v8::internal::Object::StoreFromKeyed) [/usr/local/bin/node]
13: v8::internal::StoreIC::Store(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>, v8::internal::Handle<v8::internal::Object>, v8::internal::Object::StoreFromKeyed) [/usr/local/bin/node]
14: v8::internal::KeyedStoreIC::Store(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [/usr/local/bin/node]
15: v8::internal::Runtime_KeyedStoreIC_Miss(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
16: 0x846e05840bd
Abort trap: 6

分析

1、在编译时对CPU和内存的需求较大,当项目文件较多时可能出现内存溢出;
2、大量的订阅的数据在组件销毁时未能取消订阅,会造成大量内存被占用;
3、代码出现大量的大数据的循环或死循环;
4、模块组件或公共函数循环引用或调用引起的死循环;

解决方案 - 增加编译内存

修改 package.json 文件增加编译所需要的内存空间

...
"build": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod",
...

解决方案 - 移除 *.spec.ts 文件

在项目根目录下执行以下代码,将项目中的 *.spec.ts 文件。(该文件为组件、服务、管道、指令等的测试文件)

find . -name "*.spec.ts" | xargs rm -rf

解决方案 - 降低组件或函数的耦合性

这个方案就有点搞大了,请诸君谨慎操作

标签:node,bin,Handle,编译,angular4,internal,内存,v8,local
来源: https://blog.csdn.net/u012793146/article/details/112950767

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有