Linux VPSサーバーでアプリケーションの挙動が不安定になったときの対応方法
ここでは、VPSサーバーで仮想メモリ(スワップ)がない場合に、手動で作成する方法を記載。NTT PCコミュニケーションズが提供しているIndigoというVPS上で、Tomcat+Javaアプリケーションを稼働させていた時、時間が立つにつれ動作が不安定になった。十分なヒープ領域を確保しているにも関わらず、OutOfMemoryErrorが発生し、SSH・ターミナルからログインすることもできなくなり、他のサービスも落ちてしまった。インスタンスの強制停止を何回か行った。
挙動から調査していった結果、IndigoでCentOSのインスタンスを作成したときに、スワップ領域を作成してくれていなかったことが判明した。ヒープ領域を拡張しようとしたときに割当てメモリがなかったらしい。スワップメモリは、メモリ枯渇時のセーフティーネットのために設定しておきたいところだ。もちろん、パフォーマンスはオンメモリで処理したほうが早いので、パフォーマンスが落ちるようであればVPSサービスのアップグレードを検討するか、仮想ゲストであればメモリ割当てを多くする等の対処をすればよいだろう。
ちなみに、GMOのVPSサービスは、スワップ領域を自動で作成してくれていた。AWSでも同様のことがあるらしい。サービスを使っていくなかで挙動がおかしい、プロセスが突然落ちることがあれば、メモリ枯渇やスワップメモリの領域があるか確認するとよいだろう。
今回、手動でスワップ領域を作成したのでその手順を残しておく。
CentOS 7.5
スワップメモリを手動で設定する方法
メモリ状況の確認
スワップ領域がない。
# free -t -m
ddコマンドと/dev/zeroを使用してゼロファイルを作成
countに割当てするスワップ領域のサイズをセットします。実メモリの0.5~1.5倍程度にしておくと良いだろう。
# dd if=/dev/zero of=/var/swap bs=1M count=4096
パーミッションを変更。
# chmod 600 /var/swap
スワップに設定
# mkswap /var/swap
自動起動対策
再起動したときにスワップが有効になるために、以下の行を追加。
# vi /etc/fstab
#以下の行を追加
/var/swap swap swap defaults 0 0
再起動できない場合は、swaponコマンドを使用する。
# swapon /var/swap
スワップメモリの確認
# free -t -m
無事にスワップメモリが有効となり、トータルのメモリ領域が拡張された。