webpackのbuildでout of memoryが出たらNODE_OPTIONSで使用メモリサイズを指定すればOK

webpackのbuildでUglifyjsのエラーが出るようになってしまったので、とりあえず検索してUglifyjsのバージョンを上げたら直るというのを見かけたので、バージョンを3.3.12にアップしてみた。
そして再度buildを試したら、今度は以下のようなbuildでout of memoryが…。

<--- Last few GCs --->

[31471:0x104801a00]   152664 ms: Mark-sweep 1374.4 (1434.2) -> 1374.3 (1442.8) MB, 1552.8 / 0.0 ms  allocation failure GC in old space requested
[31471:0x104801a00]   154021 ms: Mark-sweep 1374.3 (1442.8) -> 1374.3 (1427.2) MB, 1357.4 / 0.0 ms  last resort GC in old space requested
[31471:0x104801a00]   155356 ms: Mark-sweep 1374.3 (1427.2) -> 1374.3 (1427.2) MB, 1335.3 / 0.0 ms  last resort GC in old space requested


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x6a0f38254d9 <JSObject>
    1: /* anonymous */ [/Users/hoge-user/rails/example.com/node_modules/webpack-sources/node_modules/source-map/lib/source-node.js:~342] [pc=0x10c654a43b55](this=0x6a04798c419 <JSGlobal Object>,chunk=0x6a02f6e65f1 <String[12]: dataLabels&&>,original=0x6a0497e0811 <Object map = 0x6a09b05b751>)
    2: SourceNode_walk [/Users/hoge-user/rails/example.com/node_modules/webpack-sources/nod...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [/usr/local/bin/node]
 2: node::FatalTryCatch::~FatalTryCatch() [/usr/local/bin/node]
 3: v8::Utils::ReportOOMFailure(char const*, bool) [/usr/local/bin/node]
 4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [/usr/local/bin/node]
 5: v8::internal::Factory::NewUninitializedFixedArray(int) [/usr/local/bin/node]
 6: v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int) [/usr/local/bin/node]
 7: v8::internal::Runtime_GrowArrayElements(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/local/bin/node]
 8: 0x10c6542042fd
 9: 0x10c654a43b55
Abort trap: 6

何かどんどん泥沼にハマっている気がするけど、とりあえず、out of memoryは昔のJavaで苦しんだ記憶があり、その時は大体ヒープサイズを増やす事で対応していた
なので、きっとjavascriptも同じなのだろうと調べると、NODE_OPTIONSとやらにmax-old-space-sizeで指定すれば良いらしい。

デーモンとして動かす訳でもなくbuild時の一発だけなので、とりあえず潤沢に8Gを与える事にした。

NODE_OPTIONS="--max-old-space-size=8192"

これでout of memoryは解決したが、まだUglifyjsの方が解決出来ていない…。
dev環境だと問題ないのに、productionでbuildしようとしたらエラーになる。

とりあえず調査を続行しよう。

コメント

タイトルとURLをコピーしました