読者です 読者をやめる 読者になる 読者になる

nodeのメモリー足らない問題をswapで回避する

AWSのt2.microだと、メモリーが1Gです。

webpackerを使用していると、普通にdeployで落ちてしまいます。

FATAL ERROR: JS Allocation failed - process out of memory
Aborted

こんな感じのエラーが出てにっちもさっちもいかなかったです。

memoryが足らないと言うことで、memoryを増やせばいいのですが、無料期間なので、グレードをあげて対処するなんてもったいないです。

どうしよう・・・っと思っていたところに、swap領域を作れば回避できるんじゃないですか?とアドバイスをいただいたので、swap領域を作成することにした。

AWSの上位インスタンスだと、最初からswapはあるようだけど、安いインスタンスだとなかった。

あと、inuxだと、swap領域を自分で設定できたとは知らなかった。

swapとは

HDDにメモリー領域を作成して、高速にアクセスできるようにします。 パソコンはメモリー上にある領域は高速にアクセスできるのですが、HDDに書き込みするのは遅いです。 ということで、memoryが足らない状態になると、HDDにメモリー領域を作成します。

今回は実際のメモリー上のアクセスしかしていなくて、メモリー領域が足らなくて落ちていました。

コマンド

sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap

んで、freeコマンドで確認する。

Mem:       1022936     831780     191156       1592      80336     183480
-/+ buffers/cache:     567964     454972
Swap:      1048572      10064    1038508

無事にできている。

topコマンドでもきちんと作成されています。

top - 21:06:59 up 1 day, 21:51,  1 user,  load average: 0.00, 0.05, 0.14
Tasks:  64 total,   1 running,  63 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.1 sy,  0.0 ni, 98.3 id,  0.9 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   1022936 total,   832076 used,   190860 free,    80336 buffers
KiB Swap:  1048572 total,    10064 used,  1038508 free.   183504 cached Mem

きちんとコンピューターの仕組みがわかれば大した問題じゃないのですが、解決できてよかった。

意外にサーバー面白い!