[Node.js] JavaScript heap out of memory は –max-old-space-size で解決できる

Node.js で JavaScript heap out of memory エラーが発生したときは、根本解決する以外の方法として –max-old-space-size オプションでも解決できます。

Nodejs | ノード・ジェイエス

Heap out of memory エラーメッセージ

以下、JavaScript heap out of memory エラーメッセージです。

<--- Last few GCs --->
 
  541658 ms: Mark-sweep 1061.2 (1437.1) -> 1061.2 (1437.1) MB, 732.4 / 0.0 ms [allocation failure] [GC in old space requested].
  542389 ms: Mark-sweep 1061.2 (1437.1) -> 1061.2 (1437.1) MB, 730.3 / 0.0 ms [allocation failure] [GC in old space requested].
  543177 ms: Mark-sweep 1061.2 (1437.1) -> 1075.1 (1421.1) MB, 788.0 / 0.0 ms [last resort gc].
  543967 ms: Mark-sweep 1075.1 (1421.1) -> 1089.0 (1421.1) MB, 789.4 / 0.0 ms [last resort gc].
 
 
<--- JS stacktrace --->
 
==== JS stack trace =========================================
 
Security context: 0x378b61e3fa99 <JS Object>
    1: /* anonymous */ [/home/nodejs/myapp/node_modules/mongoose/lib/document.js:1361] [pc=0x2ca819399afa] (this=0xa607c53d1a9 <JS Global Object>,key=0x35b4d29cb931 <String[3]: $__>)
    2: arguments adaptor frame: 3->1
    3: InnerArrayForEach(aka InnerArrayForEach) [native array.js:~935] [pc=0x2ca815571dd8] (this=0x378b61e04241 <undefined>,bq=0xaadfd215041 <JS Function (SharedFunctionInfo 0x3ea...
 
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
Received 'aborted' signal

Heap out of memory エラー解決方法

以下のような command で、grunt でテストケースを実行すると CircleCI で JavaScript heap out of memory エラーが発生してしまいました。

$(npm bin)/grunt test:container1

取り急ぎの解決方法として –max-old-space-size はデフォルトでは 512 MB なので、これを 2048 MB と JavaScript heap out of memory エラーが出ないぐらいまで増やすことで凌ぎました。

node --max-old-space-size=2048 $(npm bin)/grunt test:container1

本当は JavaScript heap out of memory エラーが発生している根本原因を見つけて、修正するのがよいのですが CI で実行しているテストだったので、これで済ませました。

以上、Node.js の JavaScript heap out of memory エラーを –max-old-space-size で解決した、現場からお送りしました。