电脑系统:MAC M1
拉取vue项目,运行npm run serve 后,报错如下
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 0000002919A5C5C1]
Security context: 0x02b9c119e6e9 <JSObject>
1: _send [0000016FEC87BBF1] [internal/child_process.js:736] [bytecode=0000016FEC878FD9 offset=660](this=0x0013a6e4b2b9 <ChildProcess map =
000003A8411F6819>,message=0x029b3af56a39 <Object map = 000003A8411F7371>,handle=0x029057e026f1 <undefined>,options=0x029b3af56ad9 <Object map = 000003A8411F8971>,callback=0x029057e026f1 <undefined>)
2: send [000...
。。。。。。。。。
==7680==ERROR: AddressSanitizer: SEGV on unknown address 0x00000000a058 (pc 0x00010e07c771 bp 0x7ffee1c0baf0 sp 0x7ffee1c0ba90 T0)
==7680==The signal is caused by a READ memory access.
#0 0x10e07c770 in v8::Exception::RangeError(v8::Local<v8::String>) api.cc:9199
#1 0x10dff9904 in ScriptManager::ConvertNativeExceptionToJavascriptError(v8::Local<v8::Value> (*)(v8::Local<v8::String>), std::exception&) javascript.cpp:316
#2 0x10dff7cca in CallFunction(v8::FunctionCallbackInfo<v8::Value> const&) javascript.cpp:66
#3 0x10e0bce80 in v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) api-arguments-inl.h:158
#4 0x10e0bc353 in v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) builtins-api.cc:111
#5 0x10e0bb932 in v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) builtins-api.cc:141
#6 0x10ec9ac38 in Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit (test:x86_64+0x100ca8c38)
#7 0x10ec33452 in Builtins_InterpreterEntryTrampoline (test:x86_64+0x100c41452)
#8 0x10ec310b9 in Builtins_JSEntryTrampoline (test:x86_64+0x100c3f0b9)
#9 0x10ec30e97 in Builtins_JSEntry (test:x86_64+0x100c3ee97)
#10 0x10e180f90 in v8::internal::(anonymous namespace)::Invoke(v8::internal::Isolate*, v8::internal::(anonymous namespace)::InvokeParams const&) execution.cc:372
#11 0x10e180297 in v8::internal::Execution::Call(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, int, v8::internal::Handle<v8::internal::Object>*) execution.cc:466
#12 0x10e051399 in v8::Script::Run(v8::Local<v8::Context>) api.cc:2158
#13 0x10e004b55 in ScriptContext::ExecuteString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) javascript.cpp:448
#14 0x10e00572c in ScriptContext::ExecuteFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) javascript.cpp:466
#15 0x10dff3b23 in main test.cpp:28
#16 0x7fff6a527cc8 in start (libdyld.dylib:x86_64+0x1acc8)
==7680==Register values:
rax = 0x0000000000000000 rbx = 0x0000000000000000 rcx = 0x0000000000000000 rdx = 0x0000100000000000
rdi = 0x000062500000c9d0 rsi = 0x00007ffee1c0bb40 rbp = 0x00007ffee1c0baf0 rsp = 0x00007ffee1c0ba90
r8 = 0x000062500000c9d0 r9 = 0xffffebffffff7748 r10 = 0x0000000000000043 r11 = 0x0000000000000060
r12 = 0x000060e000000520 r13 = 0x00007ffee1c0d7e0 r14 = 0x000062500000c9d0 r15 = 0x00001fffdc381afd
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV api.cc:9199 in v8::Exception::RangeError(v8::Local<v8::String>)
==7680==ABORTING
Abort trap: 6
大致问题为:nodejs v8 内存溢出问题,
Node中通过JavaScript使用内存时只能使用部分内存(64位系统:1.4 GB,32位系统:0.7 GB),如果前端项目比较大,Webpack编译时就会占用很多的系统资源,一旦超出了V8引擎对Node默认的内存限制大小时,就会产生内存溢出的错误
解决方案:
在package.json文件中
"scripts": {
"fix-memory-limit": "cross-env LIMIT=2048 increase-memory-limit",
...
},
安装两个包:
执行
npm install cross-env --save--dev
npm install increase-memory-limit --save--dev
如果安装失败,则先删除掉项目的node_modules包与package-lock.json两个文件
rm -rf node_modules package-lock.json
重新打开编辑器,执行npm i,安装包,运行npm run fix-memory-limit 执行npm run serve即可
方案二:
后来查询到可能是node版本在mac M1中不兼容,升级下node版本到V14
nvm install 14
删除node_moudles /. package-lock.json
npm i
重新启动项目即可(完美解决)
参考:nodejs v8 内存溢出问题【附源码】_mb607022e25a607_51CTO博客
Node JS stacktrace (内存溢出) - osc_47pscir3的个人空间 - OSCHINA - 中文开源技术交流社区