Node.js 在 MacBook Pro M1 环境的错误

最近换了新的 MacBook Pro M1 开发,遇到了一些 Node.js 运行错误,都是一些 M1 芯片下比较常见的问题:

  1. 一个旧项目运行出现了 out of memory 的错误:

    1
    2
    3
    4
    5
    6
    7
    8
    
    <--- Last few GCs --->
    
    [21371:0x128008000]     1982 ms: Scavenge 61.4 (90.6) -> 53.1 (90.6) MB, 9.7 / 0.0 ms  (average mu = 0.989, current mu = 0.989) task 
    
    
    <--- JS stacktrace --->
    
    FATAL ERROR: wasm code commit Allocation failed - process out of memory
    

    node out of memory

    环境

    • Node.js: v14.16.1
    • OS: macOS Big Sur with an M1 chip

    参考此处,升级至 Node.js v15 解决了此问题。

  2. 使用 create-react-app 新建的项目首次运行出现了 Check failed: allocator->SetPermissions

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #
    # Fatal error in , line 0
    # Check failed: allocator->SetPermissions(reinterpret_cast<void*>   (region.begin()), region.size(), PageAllocator::kNoAccess).
    #
    #
    #
    #FailureMessage Object: 0x16f4c8568
    1: 0x100a33944 node::NodePlatform::GetStackTracePrinter()   ::$_3::__invoke() [/Users/jiangbao/.nvm/versions/node/v15.3.0/   bin/node]
    2: 0x1017635e8 V8_Fatal(char const*, ...) [/Users/jiangbao/.  nvm/ versions/node/v15.3.0/bin/node]
    3: 0x1010c8d50 v8::internal::wasm::WasmCodeManager::Decommit  (v8::base::AddressRegion) [/Users/jiangbao/.nvm/versions/node/   v15.3.0/bin/node]
    4: 0x1010cc3d0 v8::internal::wasm::NativeModule::FreeCode   (v8::internal::Vector<v8::internal::wasm::WasmCode* const>) [/   Users/jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    5: 0x1010db5b8  v8::internal::wasm::WasmEngine::FreeDeadCodeLocked   (std::__1::unordered_map<v8::internal::wasm::NativeModule*,    std::__1::vector<v8::internal::wasm::WasmCode*,    std::__1::allocator<v8::internal::wasm::WasmCode*> >,    std::__1::hash<v8::internal::wasm::NativeModule*>,   std::__1::equal_to<v8::internal::wasm::NativeModule*>,     std::__1::allocator<std::__1::pair<v8::internal::wasm::NativeMod  u le* const, std::__1::vector<v8::internal::wasm::WasmCode*,    std::__1::allocator<v8::internal::wasm::WasmCode*> > > > >   const& ) [/Users/jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    6: 0x1010d92c0    v8::internal::wasm::WasmEngine::PotentiallyFinishCurrentGC() [/  Users/jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    7: 0x1010da734    v8::internal::wasm::WasmEngine::ReportLiveCodeForGC  (v8::internal::Isolate*,     v8::internal::Vector<v8::internal::wasm::WasmCode*>) [/Users/   jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    8: 0x1010daae4    v8::internal::wasm::WasmEngine::ReportLiveCodeFromStackForGC   (v8::internal::Isolate*) [/Users/jiangbao/.nvm/versions/node/  v15. 3.0/bin/node]
    9: 0x100c64560 v8::internal::StackGuard::HandleInterrupts() [/  Users/jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    10: 0x100f9f9e8 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [/Users/jiangbao/.nvm/versions/node/v15.3.0/bin/node]
    

    环境

    • Node.js: v15.3.0
    • OS: macOS Big Sur with an M1 chip

    看到这里指出在 v15.9.0 修复了此问题,干脆直接升级到最新发布的 v16,成功解决了此问题