メモリスワップで一時的なメモリ不足を解消する
2022/01/08
プログラムを動かすにはメモリは十分足りてるけど、プログラムのbuild, compileやpackageのinstallにメモリが足りないっていうときに使える方法です。
サーバー代節約のためにメモリの少ないクラウドサーバーを使用しているときなどにたまに使います。
※ スワップファイルを使って一時的にメモリ領域の不足分を補完するだけなので、常時動作するプログラムのメモリ不足を解消するものではないことにご注意ください(プログラムのパフォーマンスが著しく低下する恐れがあります)
方法
現在のスワップ領域の確認
以下のコマンドで現在使用可能なスワップ領域の確認ができます。
$ sudo swapon --show
すでにスワップ領域が確保されている場合は以下のように出力されます。
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
何も出力されなければ、現在使用可能なスワップ領域がないということなので、次の手順でスワップ領域を確保しましょう。
スワップファイルの作成
スワップ領域として使用したいサイズのファイルを作成します。
特定のサイズのファイル作成にはfallocate
コマンドが有用です。
$ sudo fallocate -l 1G /swapfile
上記のコマンドを実行することで1Gサイズののファイルが作成されます。
rootユーザーのみがread・write
できるようにファイルのアクセス権限を変更します。
$ sudo chmod 600 /swapfile
スワップファイルの有効化
次に上で作成したファイルを以下のコマンドでシステムにスワップファイルとして認識させます。
$ sudo mkswap /swapfile
以下のコマンドでスワップファイルを有効化しシステムが使用できるようにします。
$ sudo swapon /swapfile
再度、sudo swapon --show
でスワップが使用可能であることが確認できたら準備完了です。
メモリ不足で失敗したコマンドを実行してみてください。
それでもメモリ不足で失敗するようでしたら、スワップファイルのサイズを増やして、スワップ領域を拡大させましょう。
スワップの無効化
スワップ領域が必要なくなった場合は以下のコマンドでスワップを無効化することができます。
$ sudo swapoff /swapfile
sudo swapon --show
で何も表示されてなければOKです。
必要のなくなったスワップファイルも削除しましょう。
$ sudo rm /swapfile