Closed7

M1 MacのNode.jsで FATAL ERROR: wasm code commit Allocation failed - process out of memory が出る場合の対処法

catnosecatnose

M1 MacでNode.jsアプリを動かすときに以下のような物騒なエラーが発生することがあります。

<--- Last few GCs --->

[85561:0x128008000]     3569 ms: Scavenge 167.1 (187.8) -> 157.3 (189.3) MB, 6.9 / 0.0 ms  (average mu = 0.975, current mu = 0.953) task 
[85561:0x128008000]     3606 ms: Mark-sweep 157.5 (189.3) -> 137.5 (190.0) MB, 5.6 / 0.0 ms  (+ 28.2 ms in 439 steps since start of marking, biggest step 1.4 ms, walltime since start of marking 37 ms) (average mu = 0.976, current mu = 0.976) finalize incr

<--- JS stacktrace --->

FATAL ERROR: wasm code commit Allocation failed - process out of memory
 1: 0x1007f19d8 node::Abort() [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 2: 0x1007f1b58 node::errors::TryCatchScope::~TryCatchScope() [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 3: 0x10090b330 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 4: 0x10090b2c4 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 5: 0x100ea0cbc v8::internal::wasm::WasmCodeAllocator::AllocateForCodeInRegion(v8::internal::wasm::NativeModule*, unsigned long, v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 6: 0x100ea1950 v8::internal::wasm::NativeModule::CreateEmptyJumpTableInRegion(int, v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 7: 0x100ea0618 v8::internal::wasm::NativeModule::AddCodeSpace(v8::base::AddressRegion, v8::internal::wasm::WasmCodeAllocator::OptionalLock const&) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 8: 0x100ea1760 v8::internal::wasm::NativeModule::NativeModule(v8::internal::wasm::WasmEngine*, v8::internal::wasm::WasmFeatures const&, v8::internal::VirtualMemory, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, std::__1::shared_ptr<v8::internal::Counters>, std::__1::shared_ptr<v8::internal::wasm::NativeModule>*) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
 9: 0x100ea3cd4 v8::internal::wasm::WasmCodeManager::NewNativeModule(v8::internal::wasm::WasmEngine*, v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, unsigned long, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
10: 0x100eaf7e8 v8::internal::wasm::WasmEngine::NewNativeModule(v8::internal::Isolate*, v8::internal::wasm::WasmFeatures const&, std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
11: 0x100e7eb34 v8::internal::wasm::AsyncCompileJob::CreateNativeModule(std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
12: 0x100e7ecfc v8::internal::wasm::AsyncCompileJob::GetOrCreateNativeModule(std::__1::shared_ptr<v8::internal::wasm::WasmModule const>, unsigned long) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
13: 0x100e87360 v8::internal::wasm::AsyncCompileJob::PrepareAndStartCompile::RunInForeground(v8::internal::wasm::AsyncCompileJob*) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
14: 0x100e8712c v8::internal::wasm::AsyncCompileJob::CompileTask::RunInternal() [/Users/foo/.nodenv/versions/14.16.0/bin/node]
15: 0x10084ec08 node::PerIsolatePlatformData::RunForegroundTask(std::__1::unique_ptr<v8::Task, std::__1::default_delete<v8::Task> >) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
16: 0x10084d8a0 node::PerIsolatePlatformData::FlushForegroundTasksInternal() [/Users/foo/.nodenv/versions/14.16.0/bin/node]
17: 0x101004c00 uv__async_io [/Users/foo/.nodenv/versions/14.16.0/bin/node]
18: 0x1010167c0 uv__io_poll [/Users/foo/.nodenv/versions/14.16.0/bin/node]
19: 0x101005090 uv_run [/Users/foo/.nodenv/versions/14.16.0/bin/node]
20: 0x100829f40 node::NodeMainInstance::Run() [/Users/foo/.nodenv/versions/14.16.0/bin/node]
21: 0x1007ca7d0 node::Start(int, char**) [/Users/foo/.nodenv/versions/14.16.0/bin/node]
22: 0x19f92df34 start [/usr/lib/system/libdyld.dylib]
catnosecatnose

対処法2

追記: v14.17.0で対応されたようです。 @junki555さん、コメントありがとうございました。

プロジェクトによってはv14を使わなければならないような場合もあると思います。私の環境では14.16.0の時点ではまだ問題が発生するようです。

色々と探したみたところ「v15での対応を参考に個人的パッチバージョンを作ったよ」という回答が見つかりました。

https://stackoverflow.com/a/66653477

こちらに載っているコマンドを実行すれば問題は解消されるかもしれません。ただ、こちらは個人で配布されているものでオフィシャルが提供するものではありません。

セキュリティにやや不安があるため、もう少し様子見したいと思います。

北山淳也北山淳也

v14.17.0 に対応が入ったようで、私もM1 Macで同様の現象に困っていたのですが
v14.17.0 で動かすことができました

catnosecatnose

そうなんですね!有益な情報をありがとうございます!
※ 上のコメントにも追記しておきました

このスクラップは2021/06/16にクローズされました