Debian 11にスワップスペースを追加する方法
はじめに
アプリケーションのメモリ不足エラーに対処する方法の一つは、サーバーにいくつかのスワップスペースを追加することです。このガイドでは、Debian 11 サーバーにスワップファイルを追加する手順を説明します。
Swap(スワップ)とは何ですか?
スワップは、オペレーティングシステムがRAMに保持できなくなったデータを一時的に保存するために予約されたハードドライブの一部です。これにより、サーバーの作業メモリに保持できる情報量を増やすことができますが、いくつかの制約があります。ハードドライブ上のスワップ領域は、使用中のアプリケーションデータを保持するためのRAMの空き領域が不足している場合に主に使用されます。
ディスクに書き込まれる情報はRAM内に保持される情報よりもかなり遅くなりますが、オペレーティングシステムは実行中のアプリケーションデータをメモリに保持し、古いデータにはスワップを使用します。全体として、システムのRAMが使い果たされた場合にフォールバックとしてスワップスペースがあることは、非SSDストレージの利用可能なシステムにおいてメモリ不足によるエラーに対する安全なネットとなることがあります。
ステップ1 – スワップ情報のシステムチェック
始める前に、システムにスワップスペースが既に利用可能かどうか確認できます。複数のスワップファイルやスワップパーティションを持つことも可能ですが、通常は1つで十分です。
システムに設定されたスワップがあるかどうかを確認するために、入力することができます。
- sudo swapon –show
もし何の出力も得られない場合は、現在お使いのシステムにはスワップスペースが利用できないことを意味します。
以下のように日本語で言い換えることができます(一つの選択肢のみ):
「freeユーティリティを使用して、アクティブなスワップが存在しないことを確認できます。」
- free -h
total used free shared buff/cache available Mem: 976Mi 75Mi 623Mi 0.0Ki 276Mi 765Mi Swap: 0B 0B 0B
出力のSwap行でわかる通り、システム上でアクティブなスワップはありません。
ステップ2 – ハードドライブのパーティションで利用可能なスペースを確認する。
スワップファイルを作成する前に、現在のディスク使用量を確認して十分なスペースがあるかどうかをチェックします。以下を入力して確認してください。
- df -h
Filesystem Size Used Avail Use% Mounted on udev 472M 0 472M 0% /dev tmpfs 98M 500K 98M 1% /run /dev/vda1 25G 1.1G 23G 5% / tmpfs 489M 0 489M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 124M 5.9M 118M 5% /boot/efi tmpfs 98M 0 98M 0% /run/user/0
「Mounted on」の列に表示されているデバイスは、この場合、私たちのディスクです。この例では、使用済み容量はわずか1.4Gですが、利用状況は個人によって異なるでしょう。
スワップスペースの適切なサイズについては、意見が分かれていますが、個人の好みやアプリケーションの要件によります。一般的には、システムのRAM量と同等または2倍のスワップスペースを用意することが良いスタートとなります。また、RAMのバックアップとして使用する場合、4G以上のスワップスペースはおそらく不要だという経験則もあります。
ステップ3 – スワップファイルの作成
私達は現在使用可能なハードドライブの容量を知ったので、ファイルシステム上にスワップファイルを作成できます。私達は、ルート(/)ディレクトリ内にswapfileという名前の希望するサイズのファイルを割り当てます。
スワップファイルを作成する最良の方法は、fallocateプログラムを使用することです。このコマンドは指定したサイズのファイルを即座に作成します。
例のサーバーはRAMが1Gですので、このガイドでは1Gのファイルを作成します。ご自身のサーバーの要件に合わせて調整してください。
- sudo fallocate -l 1G /swapfile
正しいスペースが予約されていることを確認するために、タイピングすることができます。
- ls -lh /swapfile
- -rw-r–r– 1 root root 1.0G Aug 23 11:14 /swapfile
私たちのファイルは、適切な容量が確保された状態で作成されました。 (Watashitachi no fairu wa, tekisetsu na yōryō ga kakuho sa reta jōtai de sakusei sa remashita.)
ステップ4 – スワップファイルの有効化
私たちが正しいサイズのファイルを手に入れたので、これをスワップスペースに変換する必要があります。
最初に、ファイルのアクセス権限をロックダウンする必要があります。これにより、ルート権限を持つユーザーのみがコンテンツを読むことができます。これにより、通常のユーザーがファイルにアクセスすることが防がれ、重大なセキュリティ上の影響が回避されます。
「root によるアクセスのみで、ファイルをアクセス可能にするために、以下のコマンドを入力してください。」
- sudo chmod 600 /swapfile
権限の変更を確認するために、入力してください。
- ls -lh /swapfile
-rw——- 1 root root 1.0G Aug 23 11:14 /swapfile
ご覧の通り、読み書きフラグが有効化されているのはrootユーザーだけです。
「今度は、ファイルをスワップスペースとしてマークするために、次のコマンドを入力することができます」
- sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
ファイルにマーキングを行った後、スワップファイルを有効化し、システムがそれを使用できるようにすることができます。
- sudo swapon /swapfile
「スワップが利用可能か確認するために、入力してください。」
- sudo swapon –show
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2
私たちは見つけた結果を裏付けるために、無料のユーティリティの出力を再度確認できます。
- free -h
total used free shared buff/cache available Mem: 976Mi 85Mi 612Mi 0.0Ki 279Mi 756Mi Swap: 1.0Gi 0B 1.0Gi
私たちのスワップは無事に設定され、必要に応じて運用システムがそれを使用し始めます。
ステップ5 – スワップファイルを永続化する
最近の変更により、現在のセッションでのスワップファイルの使用が可能になりました。しかし、再起動するとサーバーは自動的にスワップ設定を保持しません。/etc/fstabファイルにスワップファイルを追加することで、これを変更することができます。
何か問題が起きた場合には、/etc/fstabファイルのバックアップを取ってください。 (Nanika mondai ga okita baai ni wa, /etc/fstab fairu no bakkappu o totte kudasai.)
- sudo cp /etc/fstab /etc/fstab.bak
「/etc/fstab」ファイルの末尾にスワップファイルの情報を追加するために、次のように入力してください。
- echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
次に、スワップスペースを調整するために更新できるいくつかの設定について見直してみましょう。
ステップ6 – スワップ設定の調整
スワップに関連するシステムのパフォーマンスに影響を及ぼすいくつかの設定オプションがあります。
Swappinessのプロパティの調整
スウォッピネスパラメーターは、システムがデータをRAMからスワップスペースに頻繁に移動する頻度を設定します。0から100までのパーセンテージで表される値です。
値がほぼゼロに近い場合、カーネルはデータをディスクにスワップしないでしょう。スワップファイルとのやり取りは「高コスト」であり、RAMとのやり取りよりもはるかに時間がかかるだけでなく、パフォーマンスにも大幅な低下を引き起こす可能性があります。システムにスワップに頼らないように設定することは、一般的にシステムを高速化させるでしょう。
100に近い値の場合、より多くのデータをスワップに入れてRAMスペースを増やそうとします。アプリケーションのメモリプロファイルやサーバーの使用目的によっては、場合によってはこれがより有益な場合もあります。
「現在のswappiness値は、入力することで確認できます。」
- cat /proc/sys/vm/swappiness
60
デスクトップコンピューターにおいては、swappinessの設定を60にすると悪くはありません。しかし、サーバーの場合は、0に近づける方が望ましいかもしれません。
sysctlコマンドを使用して、swappinessの値を異なる値に設定できます。
たとえば、swappinessを10に設定する場合、次のように入力できます:
- sudo sysctl vm.swappiness=10
vm.swappiness = 10
この設定は次の再起動まで継続されます。/etc/sysctl.conf ファイルに行を追加することで、再起動時に自動的にこの値を設定することができます。
- sudo nano /etc/sysctl.conf
下部には、以下を追加できます:
vm.swappiness=10
作業が終わったら、ファイルを保存して閉じてください。
キャッシュプレッシャーの設定を調整する
他の関連する値として、vfs_cache_pressureを変更する可能性もあります。この設定は、システムが他のデータよりもinodeとdentry情報をキャッシュする傾向をどれだけ選択するかを設定します。
基本的に、これはファイルシステムに関するアクセスデータです。これは一般的に非常にコストがかかり、非常に頻繁に要求されるため、システムがキャッシュするのに非常に適しています。procファイルシステムを再度クエリすることで、現在の値を確認することができます。
- cat /proc/sys/vm/vfs_cache_pressure
100
現在の設定では、私たちのシステムはinode情報をキャッシュからあまりにも早く削除してしまいます。これを50などのより保守的な設定に変更することができます。
- sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
もう一度言いますが、これは現在のセッションにのみ有効です。スワッピネスの設定と同様に、設定ファイルに追加することで変更できます。
- sudo nano /etc/sysctl.conf
下部に、新しい値を指定する行を追加してください。 (Shubu ni, atarashii atai o shitei suru gyō o tsuika shite kudasai.)
/etc/sysctl.conf → システム設定ファイルのパス「/etc/sysctl.conf」
vm.vfs_cache_pressure=50
作業が終わったら、ファイルを保存して閉じてください。
結論
このガイドに従うことで、通常はメモリ不足の例外が発生する可能性のある場合に、余裕を持って対処することができます。スワップスペースはこれらの一般的な問題を回避するのに非常に役立ちます。
もしメモリ不足のエラーに遭遇したり、必要なアプリケーションを使用できないと感じた場合、最善の解決策はアプリケーションの設定を最適化するか、サーバーをアップグレードすることです。