スワップファイルは、プロセスのメモリが不足したときに Linux によって使用されます。プロセスはクラッシュするのではなく、ディスクのチャンクの使用を許可されるため、速度は大幅に低下しますが、サービスの可用性を損なう可能性のある意図しないメモリ不足によるクラッシュを防ぎます。
スワップファイルとは何ですか?
まずは修辞的な質問から始めましょう。コンピュータのメモリが不足するとどうなりますか?
Linux では、OOM キラーが無効になっているか別の構成になっている場合を除き、特別な監視プロセスである OOM 監視/キラー プロセスがシステムのメモリ不足を監視します。
その場合、このプロセスはメモリを解放するために、システム上で実行されているプロセスの 1 つを終了します。これにより、データの破損やサービスの利用不能などの悲惨な結果が生じる可能性があります。 OOM は「メモリ不足」の頭字語です。
解決策の 1 つは、追加のメモリを購入するか、コンピュータまたはサーバー上で同時に実行するプログラムやサービスの数を減らすことです。しかし、(通常は安価な) ディスク領域の一部を「追加メモリ」として使用できたらどうでしょうか?
これはまさにスワップファイルの機能であり、ストレージ デバイス上に作成され、メイン メモリの一部となる特別なファイルです。直接的なものではなく、処理のオーバーヘッドが発生しますが、間接的に、処理速度にかなりの影響を与えます。
スワップファイルの長所と短所
通常、メイン メモリは、低速のディスクと比較すると超高速です。 SSD (ソリッド ステート ドライブ) でさえ、ほとんどの場合、高速メイン メモリ チップよりも低速です。 HDD (機械式、回転式、従来のハードディスク ドライブ) の場合、速度の差はさらに大きくなります。
したがって、ほとんどのセットアップにおいて、メモリ ソースとして低速ディスク (SDD、特に HDD) を使用することは明らかな利点です。メインメモリとディスクの間でデータを書き換える(つまり、ディスクをメモリとして使用する)際の遅延は、「スワッピング」(メモリとディスク領域のスワップアウト)と呼ばれます。
そうは言っても、システム上に適切なサイド スワップ ファイルを用意しておくことは常に良い考えです。理由は簡単です。システムが OOM キラーを起動して一部のプロセスを終了しないようにするために、数分間に 1 ギガバイトの追加メモリが必要なだけだとします。この場合、スワップファイルの方が適しています。プロセスが使用可能な RAM を使い果たした場合でも、プロセスはクラッシュせず、タスクが完了するまで少しだけ実行速度が遅くなるだけです。
ただし、システムが頻繁にスワップを開始すると、ほぼ確実に速度が低下します (つまり、かなり遅くなります)。これは非常に目立ちます。
要約すると、微妙で微妙なバランスがあり、それはある程度恣意的であり、特定の状況内のさまざまな事柄に依存します。システム上で実行されているプロセスの数とそのメモリの動作サイズ、使用中の合計メモリ、スワップ ファイルで使用可能なメモリ、システムの特定のスワップ ファイル構成など。
スワップファイルに関する考慮事項
現在、世界中の多くの Linux セットアップでは、システム内のディスクの 1 つにスワップ パーティションが割り当てられています。これは、通常、Linux オペレーティング システムのインストール中に予約される特別な領域です (ただし、これに限定されるわけではありません。後で追加することもできます)。ターゲット機能はスワップファイルと同じです。システムで何らかの形式のスワップが現在有効になっているかどうかを確認するには、ターミナルで次のコマンドを実行します。
sudo apt -y install htop
htop
そして、次の出力を見つけます。
このシステムには 62.7G のメイン メモリと 11.0G のスワップ スペースがあることに注目してください。また、現在わずかな量 (2,350 万) しか使用されていないこともわかります。システムがスワップしていると思われる場合は、これら 2 つのカウンターがどのように見えるかを確認してください。
両方ともフルに近い場合、システムは頻繁にスワップを行っている可能性が高く、動作が大幅に遅くなります。その理由は、現在、I/O バウンド (つまり、ディスク バウンド) 負荷が高く、メイン メモリとディスク ベースのメモリが常に交換されているためです。
経験則として、スワップ ファイルに割り当てるサイズとしてシステム メモリの特定の割合を使用することを好む人もいます。私は個人的に別の方法をとり、どれだけの追加メモリが必要になるかを検討します。サイズがかなり大きい場合、たとえば 8GB のサーバーが特定のユースケースで最終的に 14GB を使用する可能性が高い場合は、サーバーのメモリを 8GB から 16GB に増やす方がはるかに合理的です。
ただし、システムに 8 GB があり、通常の使用量が 6 ~ 7 GB で、一度に起動するプログラムが多すぎる場合に時折スパイクが発生する場合は、8 GB またはそれよりわずかに多い追加のスワップ領域を検討することがあります。通常、ディスク容量は非常に安価なので、容量があれば、多少サイズを大きくしすぎても問題はありません。
スワップファイルを有効にする方法
スワップファイルを追加する準備はできましたか?これはその場で実行できます。この方法は、Debian (Ubuntu、Mint など) と RedHat (RedHat、Centos など) ベースのシステムの両方で機能します。
この例では、1 ギガバイト、1000 メガバイト、または 1024000 ブロック (メガバイト数 x 1024 として計算) のスワップファイルを作成します。
ルート (/) ディレクトリにある swapfile123 という名前を付けます。既に配置されているファイルが上書きされないように、その名前を付けています。 /swapfile という名前のファイルが存在しないと確信できる場合は、すべての場所でファイル名を正しく変更するように注意しながら、必要に応じてそれを代わりに使用できます。
システム上のデータを上書きしないように、コマンド、特に
dd
コマンドを慎重に入力してください。
sudo su
を使用して、
sudo
経由でスーパーユーザー (su) モードに入ります。これは
sudo
を使用して各コマンドを実行するのとほぼ同じですが、この方法を使用すると、各 sudo コマンド接頭辞を入力しない方が簡単です。
sudo su
if [ -r /swapfile123 ]; then echo "Stop please! /swapfile123 already exists!" ; fi
dd if = /dev/ zero of = /swapfile123 bs=1024 count=1024000
chmod 0600 /swapfile123
mkswap /swapfile123
swapon /swapfile123
次のような出力が表示されるはずです。
もしそうなら、おめでとうございます!これで、Linux コマンド ラインで最初のスワップファイルが動的に (オンザフライで) 有効になりました。
まず、
dd
ツールを使用して
/dev/zero
デバイス (
dd
またはその他のツールによって呼び出されたときにゼロを出力するだけの仮想デバイス) を使用してスワップスペースを作成しました。次に、適切なセキュリティ権限をいくつか設定します。
次に、
mkswap
コマンドを使用して、ファイルをスワップファイルにすることをオペレーティング システムに指示しました。最後に、システムを再起動することなく、コマンド ラインで動的にスワップスペースを有効にしました。
また、
free -m
を使用すると、スワップ領域が大きくなったかどうかを簡単に確認できます。
なるほど、新しく作成したスワップファイルを非アクティブ化したときに、12215M から 11215M (予想どおり -1000M) にどのように変化したかがわかります。コマンド ラインで
swapoff
使用して動的にスワップをオフにする方法も確認できます。
システムでメモリの問題が発生した場合、十分に速く入力できる場合は、その場で追加のメモリを追加できることがわかってうれしいです 🙂 実際には、問題が発生する前にこれを行う方が良いです。 。
対処すべき小さな問題は 1 つだけです。この時点で再起動すると、スワップファイルはディスク上に残りますが、システムはそれを使用しません。これまでのところ、システムの再起動時にスワップスペースが確実にリロードされるようにするための設定変更は行われていません。
ブート時に新しいスワップを有効にする
ブート時に新しいスワップ領域を有効にするには、次の行を (行として) /etc/fstab に追加するだけです。
/swapfile123 swap swap defaults 0 0
/etc/fstab の nano エディタを起動することで、
sudo su
モードのまま (先頭の
#
で示される) にこれを行うことができます。
nano /etc/fstab
cat /etc/fstab
次に、上の行をファイルの最後に追加して保存します (CTRL+X > Y > Enter)。システムが正しく起動しなくなる可能性があるため、他の行を変更または削除しないでください。また、上記の
cat /etc/fstab
を実行して再起動する前に、/etc/fstab ファイルの内容を必ず再確認してください。
ここで、システムを再起動し、
free -m
再度使用して、追加のスワップ領域がまだ利用可能であることを確認できます。
新しいスワップスペースの削除
新しいスワップ領域を削除したい場合、または多少大きいスワップ領域を作成したい場合は、最初に /etc/fstab ファイルを再度編集し、スワップ ファイルを完全にロードする行を削除することでこれを行うことができます。システムが正しく起動しなくなる可能性があるため、他の行を変更または削除しないでください。その後、以下を実行できます。
sudo swapoff /swapfile123
rm /swapfile123
すべて完了!この変更は動的に行われたため、再起動する必要もありません。次回の再起動では、/etc/fstab ファイルから一致する行を削除したため、スワップファイルはアクティブ化されなくなります。
スワップファイルをお楽しみください!





