电脑系统: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 - 中文开源技术交流社区

vue热更新失败,node内存溢出,JS stacktrace - 简书

Logo

前往低代码交流专区

更多推荐