Closed7
M1 MacのNode.jsで FATAL ERROR: wasm code commit Allocation failed - process out of memory が出る場合の対処法
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]
対処法1:Node.js 15を使う
下記のIssueのコメントではNode.js v15.3.0〜を使えばこの問題が解決するというコメントが書かれています。
自分の環境でも15.8.0
に切り替えればエラーが発生しなくなりました。
対処法2
追記: v14.17.0で対応されたようです。 @junki555さん、コメントありがとうございました。
プロジェクトによってはv14を使わなければならないような場合もあると思います。私の環境では14.16.0
の時点ではまだ問題が発生するようです。
色々と探したみたところ「v15での対応を参考に個人的パッチバージョンを作ったよ」という回答が見つかりました。
こちらに載っているコマンドを実行すれば問題は解消されるかもしれません。ただ、こちらは個人で配布されているものでオフィシャルが提供するものではありません。
セキュリティにやや不安があるため、もう少し様子見したいと思います。
v14.17.0 に対応が入ったようで、私もM1 Macで同様の現象に困っていたのですが
v14.17.0 で動かすことができました
- node/CHANGELOG_V14.md at master | nodejs / node | GitHub
- "deps: V8: Backport various patches for Apple Silicon support (BoHong Li) #38051"
- https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V14.md#2021-05-11-version-14170-fermium-lts-danielleadams
そうなんですね!有益な情報をありがとうございます!
※ 上のコメントにも追記しておきました
v14でも対応されたとのことでクローズ
チームなどによってはバージョンを上げることができない場合もあると思うので過渡期には以下の方法で x86_64 版を利用すると正常に動作します
このスクラップは2021/06/16にクローズされました