前書き

サーバーの応答性を高め、アプリケーションのメモリ不足エラーを防ぐ最も簡単な方法の1つは、スワップスペースを追加することです。 *スワップ*は、オペレーティングシステムがメモリに保持できなくなったデータを一時的に保存できるストレージドライブ上の領域です。

これにより、サーバーが作業メモリーに保持できる情報の量を増やすことができますが、注意が必要です。 スワップからの読み取りとスワップへの書き込みは、メモリを使用するよりも遅くなりますが、サーバーのメモリが不足している場合に優れた安全策を提供できます。

スワップを使用しないと、サーバーのメモリが不足すると、アプリケーションを強制終了してメモリを解放したり、クラッシュしたりすることがあります。 これにより、保存されていないデータが失われたり、ダウンタイムが発生する可能性があります。 信頼できるデータアクセスを確保するために、一部のアプリケーションは機能するためにスワップを必要とします。

このガイドでは、CentOS 7サーバーでスワップファイルを作成して有効にする方法について説明します。

Note

前提条件

このガイドを始める前に、最初に完了する必要があるいくつかのステップがあります。

`+ sudo +`権限を持つ非rootユーザーでインストールおよび構成されたCentOS 7サーバーが必要です。 まだこれを行っていない場合は、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [CentOS 7サーバーの初期セットアップの手順1〜4を実行できます。ガイド]このアカウントを作成します。

非rootユーザーを取得したら、それを使用してCentOSサーバーにSSH接続し、スワップファイルのインストールを続行できます。

システムのスワップ情報を確認します

開始する前に、サーバーのストレージを調べて、使用可能なスワップスペースがあるかどうかを確認する必要があります。 複数のスワップファイルまたはスワップパーティションを作成できますが、通常は1つで十分です。

汎用スワップユーティリティである `+ swapon `を使用して、システムにスワップが設定されているかどうかを確認できます。 「 -s 」フラグを使用すると、「 swapon +」はストレージデバイスでのスワップの使用状況と可用性の概要を表示します。

swapon -s

コマンドから何も返されない場合、サマリーは空であり、スワップファイルは存在していません。

スワップスペースをチェックする別の方法は、システムの全体的なメモリ使用量を示す「+ free +」ユーティリティを使用することです。 次のように入力すると、現在のメモリとスワップの使用量(メガバイト単位)を確認できます。

free -m
            total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
         0       4095

ご覧のとおり、システムの合計スワップスペースは0です。 これは、 `+ swapon +`で見たものと一致します。

利用可能なストレージスペースを確認する

スワップ用のスペースを割り当てる典型的な方法は、タスク専用の別のパーティションを使用することです。 ただし、ハードウェアまたはソフトウェアの制約により、パーティションスキームの変更が常に可能とは限りません。 幸いなことに、既存のパーティションに常駐するスワップファイルを簡単に作成できます。

これを行う前に、現在のドライブの使用状況を把握する必要があります。 次のように入力して、この情報を取得できます。

df -h
Filesystem      Size  Used Avail Use% Mounted on

devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

注意: `+ -h `フラグは、 ` dh `に人間が読みやすい形式でドライブ情報を出力するよう指示するだけです。 たとえば、パーティション内のメモリブロックの生数を出力する代わりに、 ` df -h +`は、スペースの使用量と可用性をM(メガバイト)またはG(ギガバイト)で示します。

1行目でわかるように、ストレージパーティションには59ギガバイトの空き容量があるため、かなりのスペースがあります。 これは新しい中規模のVPSインスタンスであるため、実際の使用方法は大きく異なる可能性があることに注意してください。

スワップ空間の適切なサイズについては多くの意見がありますが、実際にはアプリケーションの要件と個人的な好みに依存します。 一般的に、システムのメモリ量と同じか2倍の量が適切な出発点です。

私のシステムには4ギガバイトのメモリがあり、倍増するとストレージスペースから手放すよりも大きなチャンクが必要になるため、システムのメモリに合わせて4ギガバイトのスワップスペースを作成します。

スワップファイルを作成する

使用可能なストレージスペースがわかったので、ファイルシステム内にスワップファイルを作成します。 ルート( + / +)ディレクトリに `+ swapfile +`というファイルを作成しますが、必要に応じて別の名前を付けることもできます。 ファイルは、スワップファイルに必要なスペースを割り当てる必要があります。

スワップファイルを作成する最も速くて簡単な方法は、 `+ fallocate +`を使用することです。 このコマンドは、事前に割り当てられたサイズのファイルを即座に作成します。 次のように入力して、4ギガバイトのファイルを作成できます。

sudo fallocate -l

パスワードを入力して「+ sudo 」権限を認証すると、スワップファイルがほぼ瞬時に作成され、プロンプトが返されます。 ` ls +`を使用して、スワップ用に正しい量のスペースが予約されたことを確認できます。

ls -lh
-rw-r--r-- 1 root root  Oct 30 11:00

ご覧のとおり、スワップファイルは、適切な量のスペースを確保して作成されています。

スワップファイルを有効にする

現在、ファイルは作成されていますが、システムはこれがスワップに使用されることになっていることを知りません。 このファイルをスワップとしてフォーマットしてから有効にするようシステムに指示する必要があります。

その前に、スワップファイルのアクセス許可を調整して、ルートアカウント以外のユーザーが読み取れないようにする必要があります。 他のユーザーにこのファイルの読み取りまたは書き込みを許可すると、セキュリティ上の大きなリスクになります。 `+ chmod`でパーミッションをロックダウンできます:

sudo chmod 600

これにより、読み取り権限と書き込み権限の両方がルートアカウントのみに制限されます。 `+ ls -lh +`を再度使用することで、スワップファイルに正しいアクセス許可があることを確認できます。

ls -lh
-rw------- 1 root root  Oct 30 11:00

スワップファイルがより安全になったので、次のように入力して、使用するスワップスペースをセットアップするようシステムに指示できます。

sudo mkswap
Setting up swapspace version 1, size =  KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

これで、スワップファイルをスワップスペースとして使用する準備が整いました。 次のように入力して、使用を開始できます。

sudo swapon

手順が成功したことを確認するために、システムが現在スワップ領域を報告しているかどうかを確認できます。

swapon -s
Filename                Type        Size    Used    Priority
              file         0     -1

この出力は、新しいスワップファイルがあることを確認します。 結果を裏付けるために、 `+ free +`ユーティリティを再び使用できます。

free -m
            total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
         0       4095

スワップは正常にセットアップされ、オペレーティングシステムは必要に応じて使用を開始します。

スワップファイルを永続的にする

スワップファイルは現在有効になっていますが、再起動しても、サーバーはファイルを自動的に有効にしません。 ファイルシステムとパーティションを管理するテーブルである `+ fstab +`ファイルを変更することで、それを変更できます。

テキストエディタで `+ sudo +`権限でファイルを編集します。

sudo nano /etc/fstab

ファイルの下部に、作成したスワップファイルを自動的に使用するようオペレーティングシステムに指示する行を追加する必要があります。

  swap    swap    sw  0   0

行の追加が終了したら、ファイルを保存して閉じることができます。 サーバーは各起動時にこのファイルをチェックするので、これからスワップファイルを使用する準備が整います。

スワップ設定の調整(オプション)

スワップを処理するときにシステムのパフォーマンスに影響を与えるいくつかのオプションを設定できます。 ほとんどの場合、これらの構成はオプションであり、変更はアプリケーションのニーズと個人的な好みによって異なります。

スワピネス

`+ swappiness +`パラメーターは、システムがメモリからスワップスペースにデータをスワップする頻度を決定します。 これは、スワップの使用をトリガーするメモリ使用率を表す0〜100の値です。

値がゼロに近い場合、絶対に必要でない限り、システムはデータをドライブにスワップしません。 スワップファイルとのやり取りは、メモリとのやり取りよりもはるかに遅いという点で「高価」です。この読み取り速度と書き込み速度の違いにより、アプリケーションのパフォーマンスが大幅に低下する可能性があります。 通常、スワップにあまり依存しないようにシステムに指示すると、システムが高速になります。

100に近い値は、より多くのメモリを解放するために、より多くのデータをスワップに入れようとします。 アプリケーションのメモリプロファイル、またはサーバーの用途によっては、これが場合によってはより良い選択になる可能性があります。

`+ swappiness +`設定ファイルを読むことで現在のswappiness値を見ることができます:

cat /proc/sys/vm/swappiness
30

CentOS 7のデフォルトは、swappiness設定が30で、これはほとんどのデスクトップおよびローカルサーバーにとって中程度の水準です。 VPSシステムの場合、おそらく0に近づけたいと思います。

`+ sysctl +`コマンドを使用して、swappinessを別の値に設定できます。 たとえば、swappinessを10に設定するには、次のように入力します。

sudo sysctl vm.swappiness=
vm.swappiness =

この設定は、次の再起動まで持続します。 再起動間で設定を維持するには、出力された行を `+ sysctl +`設定ファイルに追加します:

sudo nano /etc/sysctl.conf

ファイルの下部にswappiness設定を追加します。

vm.swappiness =

行の追加が終了したら、ファイルを保存して閉じることができます。 サーバーは、各起動時に宣言した値にswappinessを自動的に設定します。

キャッシュプレッシャー

変更が必要な別の関連する値は、 `+ vfs_cache_pressure +`です。 この設定は、特別なファイルシステムメタデータエントリのストレージに影響します。 この情報を絶えず読み取り、更新することは一般的に非常にコストがかかるため、キャッシュに長期間保存することはシステムのパフォーマンスに優れています。

このキャッシュ圧力の現在の値は、 `+ proc +`ファイルシステムを再度クエリすることで確認できます。

cat /proc/sys/vm/vfs_cache_pressure
100

現在設定されているため、システムはキャッシュからiノード情報を非常に速く削除します。 `+ sysctl +`を使用して、これを50などのより保守的な設定に設定できます。

sudo sysctl vm.vfs_cache_pressure=
vm.vfs_cache_pressure =

繰り返しますが、これは現在のセッションでのみ有効です。 swappiness設定で行ったように、構成ファイルに追加することで変更できます。

sudo nano /etc/sysctl.conf

下部に、新しい値を指定する行を追加します。

vm.vfs_cache_pressure =

行の追加が終了したら、ファイルを保存して閉じることができます。 サーバーは、キャッシュプレッシャーを各起動時に宣言した値に自動的に設定します。

結論

このガイドの手順に従うことで、サーバーのメモリ使用量に余裕を持たせることができます。 スワップスペースは、いくつかの一般的な問題を回避するのに非常に役立ちます。

OOM(メモリ不足)エラーが発生した場合、またはシステムが必要なアプリケーションを使用できない場合、最善の解決策はアプリケーション構成を最適化するか、サーバーをアップグレードすることです。 ただし、スワップ領域を構成すると柔軟性が高まり、性能の低いサーバーで時間を節約できます。