Linuxのスワップ領域とは?仮想メモリの仕組みと確認方法を初心者向けに解説
生徒
「Linuxでメモリが足りなくなったときは、すぐにパソコンが止まってしまうんですか?」
先生
「Linuxには、ストレージの一部を補助的に使うスワップ領域という仕組みがあります。メモリの使用状況によって、一部のデータをスワップへ移すことがあります。」
生徒
「スワップ領域は、メモリを増やす機能なんですか?」
先生
「完全に同じものではありません。スワップはHDDやSSDなどのストレージを使うため、実メモリより遅いです。仮想メモリとの関係や確認方法を順番に見ていきましょう。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. Linuxのスワップ領域とは?
Linuxの読み方はLinux(リナックス)です。スワップは英語でswap(スワップ)といい、交換するという意味があります。Linuxのスワップ領域とは、メモリの使用量が増えたときなどに、メモリ上の一部の内容を一時的に退避するために使われるストレージ上の領域です。
ここでいうメモリは、一般にRAMを指します。RAMの読み方はRAM(ラム)です。RAMはRandom Access Memory(ランダムアクセスメモリ)の略で、プログラムの実行中に必要なデータを高速に読み書きするための記憶領域です。電源を切ると内容が失われるため、長期間の保存を目的とするHDDやSSDとは役割が違います。
Linuxでは多くのプログラムを同時に動かすと、RAMの使用量が増えていきます。そのとき、すぐには使わないメモリ上のページをスワップ領域へ移すことがあります。ページとは、メモリを管理するときに使われる一定の大きさの単位です。初心者の方は、机の上がいっぱいになったとき、今すぐ使わない資料を棚へ移して作業場所を空けるイメージで考えるとわかりやすいでしょう。
ただし、スワップ領域はRAMそのものではありません。HDDやSSDはRAMより読み書きが遅いため、スワップへの出し入れが増えると、パソコンやサーバーの動作が遅く感じられることがあります。スワップはメモリ不足を補助する仕組みとして理解することが大切です。
2. 仮想メモリとスワップ領域の関係
仮想メモリの読み方は仮想メモリ(カソウメモリ)です。仮想メモリとは、プログラムから見えるメモリ空間を、実際のRAMだけに限定せず管理する仕組みです。Linuxでは、各プロセスに仮想的なアドレス空間を用意し、必要に応じて実メモリやスワップなどを組み合わせながらメモリを管理します。
プロセスの読み方はprocess(プロセス)で、実行中のプログラムを表します。たとえばWebブラウザ、データベース、Webサーバーなどが動くと、それぞれがメモリを必要とします。Linuxカーネルは、それらのメモリ利用を管理し、RAMを効率よく使えるように調整します。
初心者向けの説明では、スワップ領域を仮想メモリと呼ぶことがありますが、厳密には仮想メモリ全体とスワップ領域は同じものではありません。仮想メモリはもっと広い仕組みで、スワップはその中で利用されることがある保存領域の一つです。この違いを知っておくと、Linuxのメモリ管理を学ぶときに混乱しにくくなります。
スワップ領域があるからといって、RAMと同じ速度でメモリ容量が増えるわけではありません。大量のスワップが継続して発生する場合は、メモリ不足やアプリケーションの使用量を確認することが大切です。
3. freeコマンドでメモリとスワップ容量を確認する
LinuxでRAMとスワップ領域の使用状況を確認するときに便利なのがfreeコマンドです。freeの読み方はfree(フリー)です。メモリの総容量、使用量、利用可能量、スワップの総容量や使用量などを一覧で確認できます。
初心者にはfree -hがおすすめです。hオプションを付けると、容量が読みやすい単位で表示されます。
free -h
total used free shared buff/cache available
Mem: 7.6Gi 2.4Gi 3.1Gi 210Mi 2.1Gi 4.8Gi
Swap: 2.0Gi 128Mi 1.9Gi
Memの行はRAMの状態を表し、Swapの行はスワップ領域の状態を表します。totalは全体の容量、usedは使用している容量、freeは未使用の容量です。Linuxでは空いているRAMをキャッシュとして積極的に利用するため、freeの値だけを見てメモリ不足と判断しないことも重要です。
availableは、新しいアプリケーションが利用できる見込みのあるメモリ量を確認するときの参考になります。スワップのusedが少し増えているだけで直ちに問題とは限りません。Linuxは一度スワップへ移したページを、必要になるまでそのままにすることもあるため、システム全体の動作やavailableの値なども合わせて確認します。
4. swaponコマンドで有効なスワップ領域を確認する
現在のLinuxでどのスワップ領域が有効になっているか確認したい場合は、swapon --showを利用できます。swaponの読み方はswapon(スワップオン)です。スワップを有効化するときにも使われるコマンドですが、showオプションを使うと現在利用中のスワップを確認できます。
swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 128M -2
NAMEにはスワップとして利用している場所、TYPEには種類、SIZEには全体容量、USEDには使用量などが表示されます。この例では/swapfileというファイルがスワップ領域として使われています。
Linuxのスワップ領域には、大きく分けてスワップパーティションとスワップファイルがあります。スワップパーティションはストレージ上に専用のパーティションを用意する方式です。スワップファイルは通常のファイルとして領域を用意し、それをスワップとして利用する方式です。現在はLinuxのインストール方法やディストリビューションによって、どちらの方式も利用されます。
5. procの情報からスワップ領域を確認する方法
Linuxでは、/procという特別な仕組みを通して、カーネルやプロセスの情報を確認できます。procの読み方はproc(プロック)です。通常の保存ファイルとは少し性質が異なり、システムの状態を確認するための情報が見えるようになっています。
スワップの状態は/proc/swapsから確認できます。読み取りだけなら一般ユーザーでも実行できます。
cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 2097148 131072 -2
表示される内容はswapon --showと似ています。Filenameではスワップの場所、Typeでは種類、Sizeでは容量、Usedでは利用中の容量を確認できます。Linuxのコマンド操作に慣れてくると、/procの情報からシステム状態を調査する機会も増えてきます。
初心者の段階では、まずfree -hで全体のメモリ状態を確認し、より詳しくスワップの場所を知りたい場合にswapon --showやcat /proc/swapsを使うと覚えるとわかりやすいでしょう。
6. スワップファイルを作成して有効化する基本の流れ
Linuxでは、必要に応じてスワップファイルを作成することもできます。ただし、ストレージ容量を使う設定変更であり、システム全体に影響するため、実際のサーバーでは現在の構成や運用ルールを確認してから作業することが大切です。
スワップファイルを作る場合は、ファイルを用意し、アクセス権を制限し、スワップ用の形式に設定してから有効化します。これらの操作には管理者権限が必要になるため、次の例はルートユーザーとして実行する例です。
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
Setting up swapspace version 1, size = 2 GiB
no label, UUID=12345678-1234-1234-1234-123456789abc
fallocateは指定した大きさのファイルを用意するときに使えます。chmod 600では、スワップファイルをほかの一般ユーザーから読み書きできないように権限を制限しています。mkswapはスワップとして利用するための準備を行い、swaponで有効化します。
ただし、利用するファイルシステムや環境によってはスワップファイルの作成方法に注意が必要な場合があります。また、再起動後も利用するには永続化の設定が必要です。初心者のうちは、実際のサーバーでいきなり変更するのではなく、学習用のLinux環境で仕組みを理解してから操作すると安全です。
7. スワップが多く使われると動作が遅くなる理由
RAMはCPUから高速に利用できるように作られています。一方、スワップ領域として利用するHDDやSSDはストレージなので、RAMより読み書きに時間がかかります。そのため、必要なデータを何度もRAMとスワップの間で移動する状態になると、システム全体の反応が遅くなることがあります。
特に、実メモリが大幅に不足し、頻繁にページをスワップへ退避しては戻す動作を繰り返す状態では、アプリケーションの反応が悪くなることがあります。このような現象はスラッシングと呼ばれることがあります。スラッシングの読み方はthrashing(スラッシング)です。
Linuxサーバーでスワップ使用量が急増している場合は、単純にスワップ容量を増やすだけではなく、どのプロセスが大量のメモリを使っているか、アプリケーションの設定に問題がないか、RAM自体を増設する必要がないかなどを確認します。
スワップは障害を必ず防いでくれる仕組みではありません。RAMもスワップも不足すると、Linuxカーネルがメモリを確保するためにプロセスを終了させることがあります。この仕組みに関連してOOMという用語があります。OOMの読み方はOOM(オーオーエム)で、Out Of Memory(アウトオブメモリ)の略です。メモリ不足の調査では、この言葉を目にすることがあります。
8. swappinessとは?Linuxがスワップを使う傾向を表す設定
Linuxには、スワップの利用傾向に関係するswappinessという設定があります。swappinessの読み方はswappiness(スワピネス)です。値によって、Linuxカーネルがメモリ上のページをスワップへ退避させる判断の傾向が変わります。
現在の値はsysctlコマンドで確認できます。sysctlの読み方はsysctl(シスシーティーエル)です。確認だけであれば一般ユーザーでも実行できる環境が多くあります。
sysctl vm.swappiness
vm.swappiness = 60
この値はLinuxディストリビューションやシステムの目的によって異なることがあります。値を小さくすれば必ず高速になる、値を大きくすれば必ず安定するという単純な関係ではありません。利用しているアプリケーション、RAM容量、ストレージ性能、サーバーの用途などを考えて調整する設定です。
初心者が最初に覚える段階では、swappinessを変更するよりも、現在のメモリ使用量とスワップ使用量を確認できることのほうが重要です。設定値を変更する場合は、なぜ変更するのかを理解し、変更前の値を控えたうえで行うことが基本です。
9. Linuxのスワップ領域を管理するときに覚えておきたいポイント
Linuxのスワップ領域は、RAMが不足したときなどに、メモリ上の一部のデータをストレージへ退避するために利用される領域です。スワップパーティションとして用意する方法と、スワップファイルとして用意する方法があり、Linux環境によって構成は異なります。
スワップの状態を確認するときは、まずfree -hでRAMとスワップの全体的な使用状況を見るとわかりやすいでしょう。次にswapon --showを使えば、どのスワップ領域が有効なのかを確認できます。必要に応じて/proc/swapsを見ることで、カーネルが認識しているスワップ情報も確認できます。
また、スワップが使われているからといって必ず異常とは限りません。Linuxはメモリを効率よく利用するために、状況に応じてスワップを使います。重要なのは、スワップ使用量だけを見るのではなく、アプリケーションの動作、RAMのavailable、CPU負荷、ストレージの速度なども含めてシステム全体を見ることです。
メモリ不足が続くサーバーでは、不要なプロセスを減らす、アプリケーションのメモリ設定を見直す、RAMを増やす、適切なスワップ領域を用意するなどの方法を検討します。スワップは便利な補助機能ですが、実メモリの代わりとして無制限に使えるものではありません。
初心者が覚えておきたいポイント
Linuxのスワップ領域は、RAMの内容の一部を一時的にストレージへ退避するために利用されます。仮想メモリ全体とスワップは同じ意味ではありません。free -h、swapon --show、cat /proc/swapsなどの基本コマンドで状態を確認できるようになると、Linuxのメモリ管理やストレージ管理の仕組みを理解しやすくなります。