MENU

メモリ不足を乗り切るスワップ領域の一時増設手順|Linux実務

メモリが逼迫してプロセスが応答しなくなりそうな状況は突然やってきます。パーティション変更やサーバー再起動なしに、スワップファイルを追加するだけで数分以内に対処できます。ここでは作成・有効化・確認・解放まで一気に片付けます。

目次

まず結論―3ステップで即時追加できる

以下が基本形です。ext4 または xfs を使っている環境であればそのまま動作します(btrfs の場合は後述の代替手順を使ってください)。

# 1. 2GBのスワップファイルを作成(root権限で実行)
fallocate -l 2G /swapfile

# 2. パーミッションを制限してスワップ領域として初期化
chmod 600 /swapfile && mkswap /swapfile

# 3. スワップとして有効化
swapon /swapfile

サイズは用途に合わせて調整してください。-l 1G で 1GB、-l 4G で 4GB になります。作成先は /swapfile が一般的ですが、ディスク容量に余裕がある別のパス(/var/swap など)でも問題ありません。

現在のスワップ使用状況を先に確認する

追加前に現状を把握しておくと、効果の確認や切り戻し時の比較が楽になります。

# メモリ・スワップの現況を人が読みやすい単位で表示
free -h

# スワップの一覧を確認(既存のスワップ領域が見える)
swapon --show

swapon --show の出力例は以下のようになります。TYPEpartition なら既存のスワップパーティション、file ならスワップファイルです。

NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   2G   0B   -2

スワップファイルの作成から有効化まで詳細手順

冒頭の3ステップの意味と、環境ごとの注意点を補足します。

ファイル作成:fallocate が使えない場合は dd で代替する

fallocate はファイルシステムのブロック予約機能を利用するため高速ですが、btrfs や一部の NFS マウントでは動作しません。その場合は dd で代替してください。

# btrfsなどfallocateが使えない環境向け(2GBの例)
dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

dd はブロックを実際にゼロで書き込むため fallocate より数倍時間がかかりますが、どのファイルシステムでも確実に動作します。status=progress をつけると進捗が表示されるので、大きなファイルを作る際も安心です。

パーミッション制限とスワップ初期化

chmod 600 はセキュリティ上の必須手順です。スワップ領域にはメモリの内容がそのまま書き出されるため、root 以外から読み取れる状態にしてはなりません。mkswap はファイルにスワップシグネチャを書き込む処理で、これを省略すると swapon がエラーになります。

chmod 600 /swapfile
mkswap /swapfile

mkswap を実行すると以下のような出力が表示されます。UUID が付与され、次回以降 /etc/fstab で参照する際にも使えます。

Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

有効化後の確認

swapon /swapfile

# 追加されたことを確認
swapon --show
free -h

swapon --show/swapfile の行が追加され、free -h の Swap 行の合計値が増えていれば成功です。

NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition   2G   0B   -2
/swapfile file        2G   0B   -3

作業完了後にスワップを解放する手順

一時的な増設が目的なので、作業が終わったら確実に解放します。

# スワップとして無効化してからファイルを削除
swapoff /swapfile
rm /swapfile

# 解放されたことを確認
swapon --show
free -h

注意: swapoff はスワップ上にあるデータを物理メモリへ書き戻してから無効化します。スワップが大量に使用中の状態で実行すると、物理メモリへの書き戻しが間に合わずに失敗するか、非常に時間がかかることがあります。swapoff の前に free -h でスワップ使用量が少ないことを確認してから実行してください。

落とし穴と注意点

ある運用現場では、/tmp にスワップファイルを作成して意図した効果が得られなかったケースがありました。現代の systemd ベースの Linux では、/tmptmpfs(メモリ上のファイルシステム)としてマウントされていることがあるためです。tmpfs 上にスワップファイルを置くと、スワップを増やすために使いたいはずのメモリをファイルが消費するという本末転倒な状態になります。

マウント状況の確認は以下のコマンドで行えます。

# /tmp がtmpfsかどうか確認する
findmnt /tmp

FSTYPE 列に tmpfs と表示された場合、スワップファイルの作成先を /swapfile/var/swap など、実際のディスク上のパスに変更してください。

また、スワップはメモリの代替とはいえ、ディスク I/O を大量に発生させます。SSD であればある程度の速度が見込めますが、HDD の場合はシステム全体のレスポンスが著しく低下することがあります。スワップの多用が常態化しているようであれば、メモリ増設や不要プロセスの整理といった根本対処を優先してください。

再起動後も維持したい場合は /etc/fstab に追記する

ここまでの手順はあくまで一時的なもので、再起動すると無効になります。恒久化したい場合は /etc/fstab に以下の 1 行を追加してください。

/swapfile none swap sw 0 0

追記後は swapon -a/etc/fstab の内容を即時反映できます。恒久化をやめる際は、swapoff /swapfile を実行してから /etc/fstab の該当行を削除し、最後にファイル本体を rm /swapfile で消してください。この順序を逆にすると、次回起動時にマウント失敗でブートが遅延することがあります。

<PR>この記事に関連するおすすめ書籍

[改訂第3版]シェルスクリプト基本リファレンス

移植性の高いシェルスクリプトを書くための逆引きリファレンス。運用スクリプトの信頼性を高めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次