rails FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
AWSにCapistrano3を使いながらアプリを自動デプロイしていた時、突然こんなエラーが、、、、、
rails FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
なんじゃこりゃ!? メモリがない?
assets precompileを行なっていた時なので、画像のアップロードに問題があるということはわかったのですが、もしメモリに問題があるのなら、AWSに金かけなきゃいけないのかな。。。なんて思っていました。
しかし解決法をググりまくっていたら、同じ問題が怒っていた方のブログに出会うことができました。
そしてこちらのブログでも説明されている通り、サーバーのメモリは増やすことができます。
メモリの増やし方に関してはこちらのQiita記事に詳しく載っています。
解決法が見つかったので早速サーバーのSWAP領域を1GB増やしていきましょう
1.本番サーバーのインスタンスにて下記を実行
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo mkswap /swapfile
sudo swapon /swapfile
これにより1GBのSWAP領域が生成されます。
2.SWAPの設定
次に下記のコマンドを入力して、SWAPの設定画面が開きます
sudo vim /etc/fstab
その後設定画面の中に以下のように1行挿入
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/swapfile swap swap defaults 0 0 👈この1行を挿入
これが終わったら一度Ec2インスタンスを再起動し、また一からサーバーを立ち上げ、Capistrano
を実行するとassets precompileに成功し、無事デプロイができました!!
インフラ関係って本当に知らないと本当に苦労しますね.....
もし間違っている点などがあればお申し付けください!
参考
http://tech-savvy.hatenablog.com/entry/2016/04/07/000102
https://qiita.com/snowsunny/items/aaeacf7aecb0121948d4