スワップファイルを追加してVPSのスワップ領域を拡張する

スワップファイルを追加してVPSのスワップ領域を拡張する サーバー

ConoHaのVPSを利用してPythonアプリを複数動かしていたらメモリ不足で他のサービスが落ちた。

元々メモリ1GBプランのConoHa VPSを契約しており、スケールアップでメモリ2GBプランに変更してテスト運用していたのだが、たまにPythonアプリと連携しているMariaDBが落ちるという現象に遭遇。

原因を調べていたらメモリ不足だった。

早速調査して対策します。

※動作確認環境
CentOS Linux 7.9

調査

まず、現在のメモリの状況を調べます。

freeコマンドで確認

実メモリ(物理メモリ)も残りが少なく、スワップは残り0MBです。

swaponコマンドで確認

/proc/swapsを確認

現在のスワップ領域(スワップファイル)は2GBですが、複数のアプリが同時に起動された際に、実メモリが不足してスワップ領域を利用しようとするが、スワップ領域も枯渇してしまいサービスが落ちるという現象が起きていました。

推奨されるスワップ領域としては今のサイズ(2GB)でも問題ありませんが、近いうちにメモリ4Gプランに更にスケールアップする予定なのでスワップ領域を追加します。

【※参考】システムの推奨 swap 領域

システム内の RAM の容量 推奨されるスワップ領域 ハイバネートを許可する場合に推奨されるスワップ領域
⩽ 2 GB RAM 容量の 2 倍 RAM 容量の 3 倍
> 2 GB ~ 8 GB RAM 容量と同じ RAM 容量の 2 倍
> 8 GB ~ 64 G 最低 4GB RAM 容量の 1.5 倍
> 64 GB 最低 4GB 最低 4GB ハイバネートは推奨されない

※引用元:表15.1「システムの推奨 swap 領域」- Red Hat Training

対策(スワップ領域を拡張)

スワップ領域を現状の2GBに2GBを追加して合計4GBにします。拡張する方法は、サーバを止めずにスワップファイルの追加という形で行います。

スワップファイル作成

ddコマンドで2GBのスワップファイルを新規作成します。
※ファイルシステムが「xfs」でも「ext4」でもスワップファイル作成はddコマンドでOKです。
※作成するスワップファイル名はなんでも良いのですが、今回は「swapfile2」とします。

スワップファイルのセットアップ

mkswapコマンドで先ほど作成したスワップファイルのセットアップを行います。

パーミッション変更

セキュリティのためにスワップファイルのパーミッションを600に変更します。

パーミッションの確認

lsコマンドでパーミッションを確認します。

スワップファイルを有効化してスワップ領域を追加

swaponコマンドでスワップファイルを有効化してスワップ領域を拡張します。

スワップ領域の確認

freeコマンド

swaponコマンド

cat /proc/swaps

サーバを再起動してもシステムの起動時にスワップファイルを有効化する設定

このままだと、サーバを再起動した際に新規作成したスワップ領域が適用されないので、/etc/fstabvi等で編集して起動時に有効化する設定を追加します。

まずvi等で/etc/fstabを開きます。

下記の1行を末尾に追加して/etc/fstabを上書き保存します。

これでスワップ領域の追加作業は完了です。

スワップファイルを削除して元に戻したい場合

※スワップ拡張の際に作成したスワップファイルは「/swapfile2」だったとして解説します。

スワップファイルの無効化

swapoffコマンドでスワップファイルを無効化します。

システムの起動時の設定を削除

スワップ領域拡張時に追加した行を削除します。

vi等で/etc/fstabを開きます。

スワップ拡張時に追加した下記の1行を削除して/etc/fstabを上書き保存します。

systemctlコマンドを実行してマウントユニットを再生成します。

スワップファイルの削除

rmコマンドでスワップファイルを削除します。

確認

下記のコマンドにて正常にスワップ領域が削除されたか確認しましょう。

free -m
swapon -s
cat /proc/swaps

以上で拡張したスワップ領域の削除が完了です。

まとめ

  • 実メモリが足りなくなるとスワップ領域が利用される
  • スワップ領域も足りなくなるとサービスが落ちることもある
  • スワップ領域が足りない場合はサーバを止めなくてもスワップファイルを新規作成してスワップ領域を拡張することが可能
  • スワップ領域には推奨サイズがある
  • 今後も慢性的に実メモリが足りなくなることが予想される場合は、スケールアップなどにより実メモリの増加を検討すべき

今回はスワップファイル作成&スワップ領域拡張作業によりゼロだった残りのスワップ領域に余裕ができました。これでしばらく安心です。

■作業前のtopコマンド

スワップ領域拡張作業前のtopコマンド

■作業後のtopコマンド

スワップ領域拡張作業後のtopコマンド

 

以上で解決です。