サーバーの応答を高速化し、アプリケーションのメモリ不足エラーを防ぐ最も簡単な方法の1つは、[スワップスペース](https://cloud.tencent.com/developer/article/1108235?from=10680)を追加することです。 スワップは、ストレージドライブ上の領域であり、オペレーティングシステムは、メモリに保存できなくなったデータを一時的に保存できます。
これにより、サーバーが作業メモリーに保持できる情報の量を増やすことができますが、いくつかの注意点があります。読み取りと書き込みの場合、スワップはメモリを使用するよりも低速ですが、サーバーのメモリが不足している場合に優れたセーフティネットを提供できます。
スワップがないと、メモリが不足しているサーバーがアプリケーションのスキャンと強制終了を開始してメモリを解放したり、クラッシュしたりする可能性があります。これにより、保存されていないデータが失われたり、ダウンタイムが発生したりする可能性があります。信頼性の高いデータアクセスを確保するために、特定のアプリケーションにはスワップ機能が必要です。
このチュートリアルでは、CentOS7サーバーでスワップファイルを作成して有効にする方法を紹介します。
注通常、従来の回転式ハードドライブを使用するシステムではスワップが推奨されますが、SSDを使用するスワップは、時間の経過とともにハードウェアの問題を引き起こす可能性があります。このため、SSDストレージを使用する他のプロバイダーでスワップを有効にすることはお勧めしません。これを行うと、基盤となるハードウェアの信頼性に影響します。
このチュートリアルを開始する前に、いくつかの手順を完了する必要があります。
root以外のユーザーができたら、それを使用してCentOSサーバーにSSHで接続し、スワップファイルのインストールを続行できます。サーバーを持たないユーザーは、[Tencent Cloud Server](https://cloud.tencent.com/product/cvm?from=10680)を購入して使用するか、[Tencent Cloud Lab CentOS Server](https://cloud.tencent.com/developer/labs/gallery?tagId=13&from=10680)で直接体験することができます。
開始する前に、サーバーのストレージをチェックして、使用可能なスワップスペースがすでにあるかどうかを確認する必要があります。複数のスワップファイルまたはスワップパーティションを持つことができますが、通常はそれで十分です。
swaponユニバーサルスワップユーティリティを使用して、システムにスワップが構成されているかどうかを確認できます。 -s
フラグを使用すると、swaponはストレージデバイスでのスワップの使用状況と可用性の概要を表示します。
swapon -s
コマンドが何も返さない場合、要約は空であり、スワップファイルはありません。
スワップスペースを確認するもう1つの方法は、システムの全体的なメモリ使用量を示す空きユーティリティを使用することです。次のように入力すると、現在のメモリとスワップの使用量(メガバイト単位)を表示できます。
free -m
total used free shared buffers cached
Mem:39533153637811107-/+ buffers/cache:1963756
Swap:004095
ご覧のとおり、システムの合計スワップスペースは0です。これは、これまでに見たスワップオンと一致します。
スワップ用のスペースを割り当てる一般的な方法は、タスク専用の別のパーティションを使用することです。ただし、ハードウェアまたはソフトウェアの制限により、パーティションスキームを変更できるとは限りません。幸い、既存のパーティションに存在するスワップファイルを簡単に作成できます。
これを行う前に、現在のドライブの使用状況を理解する必要があります。この情報を取得するには、次の情報を入力できます
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 59G 1.5G 55G 3% /
devtmpfs 2.0G 02.0G 0%/dev
tmpfs 2.0G 02.0G 0%/dev/shm
tmpfs 2.0G 8.3M 2.0G 1%/run
tmpfs 2.0G 02.0G 0%/sys/fs/cgroup
注:
-h
フラグは、ドライブ情報を人間化された読み取り形式で出力するようにdh
に指示するだけです。たとえば、パーティション内の生のメモリブロックの数を出力する代わりに、df-h
は、M(メガバイト)またはG(ギガバイト)のスペース使用量と可用性を示します。
最初の行でわかるように、ストレージパーティションは59ギガバイトであるため、使用するスペースがかなりあり、実際の使用法は大きく異なる場合があります。
スワップスペースの適切なサイズについては多くの意見がありますが、それは実際にはアプリケーションの要件と個人の好みによって異なります。一般に、システムメモリの量は2倍以上の方が適しています。
私のシステムには4ギガバイトのメモリがあり、ストレージスペースからのチャンクの数は私が参加したいよりも多いので、システムに合わせて4ギガバイトのスワップスペースを作成します羊。
使用可能なストレージスペースがわかったので、ファイルシステムにスワップファイルを作成できます。ルート( /
)ディレクトリに swapfile
という名前のファイルを作成しますが、必要に応じてファイルに他のファイルという名前を付けることができます。ファイルは、スワップファイルに必要なスペースを割り当てる必要があります。
スワップファイルを作成する最も速くて簡単な方法は、 fallocate
を使用することです。このコマンドは、事前に割り当てられたサイズのファイルをすぐに作成します。次のように入力して、4ギガバイトのファイルを作成できます。
sudo fallocate -l 4G /swapfile
パスワードを入力して sudo
権限を承認すると、スワップファイルがすぐに作成され、プロンプトが返されます。次の方法を使用して、正しい量のスペース ls
がスワップ用に予約されているかどうかを確認できます。
ls -lh /swapfile
- rw-r--r--1 root root 4.0G Oct 3011:00/swapfile
ご覧のとおり、スワップファイルは正しい量のスペースで作成されました。
これでファイルが作成されましたが、システムはこれをスワップに使用する必要があることを認識していません。このファイルをスワップとしてフォーマットしてから有効にするようにシステムに指示する必要があります。
これを行う前に、スワップファイルのアクセス許可を調整して、rootアカウント以外の誰もそれを読み取れないようにする必要があります。他のユーザーにこのファイルの読み取りまたは書き込みを許可すると、セキュリティ上の大きなリスクになります。次のコマンドを使用して、権限 chmod
をロックできます。
sudo chmod 600/swapfile
これにより、ルートアカウントの読み取りおよび書き込み権限のみが制限されます。 lsを再び使用できます
ls -lh /swapfile
- rw-------1 root root 4.0G Oct 3011:00/swapfile
スワップファイルの方が安全なので、次のように入力して、使用するスワップスペースを設定するようにシステムに指示できます。
sudo mkswap /swapfile
Setting up swapspace version 1, size =4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
これで、スワップファイルをスワップスペースとして使用できます。次のように入力して使用を開始できます。
sudo swapon /swapfile
プログラムの成功を確認するために、システムがスワップスペースを報告するかどうかを確認できます。
swapon -s
Filename Type Size Used Priority
/swapfile file 41943000-1
この出力は、新しいスワップファイルがあることを確認します。無料のユーティリティを再度使用して、調査結果を確認できます。
free -m
total used free shared buffers cached
Mem:39533153637811107-/+ buffers/cache:1963756
Swap:409504095
スワップは正常にセットアップされ、オペレーティングシステムは必要に応じてスワップの使用を開始します。
スワップファイルは現在有効になっていますが、再起動しても、サーバーはファイルの使用を自動的に有効にしません。ファイルシステムとパーティションを管理するためのテーブルである fstab
ファイルを変更することで変更できます。
sudo権限を持つテキストエディタでファイルを編集します。
sudo nano /etc/fstab
ファイルの最後に、作成したスワップファイルを自動的に使用するようにオペレーティングシステムに指示する行を追加する必要があります。
/swapfile swap swap sw 00
行を追加したら、ファイルを保存して閉じることができます。サーバーは起動するたびにこのファイルをチェックして、今後スワップファイルを使用できるようにします。
交換を処理するときにシステムのパフォーマンスに影響を与えるいくつかのオプションを構成できます。ほとんどの場合、これらの構成はオプションであり、行う変更はアプリケーションのニーズと個人的な好みによって異なります。
swappiness
パラメータは、システムがメモリからスワップスペースにデータをスワップする頻度を決定します。これは0〜100の値であり、スワップの使用をトリガーするメモリ使用量のパーセンテージを示します。
値がゼロに近い場合、システムは絶対に必要でない限り、データをドライブにスワップしません。スワップファイルとの相互作用はメモリとの相互作用よりもはるかに遅いため「高価」であり、この読み取り速度と書き込み速度の違いにより、アプリケーションのパフォーマンスが大幅に低下する可能性があることに注意してください。スワップに依存しないようにシステムに指示すると、通常、システムが高速になります。
100に近い値は、より多くのメモリを解放するために、より多くのデータをスワップに入れようとします。アプリケーションのメモリプロファイルまたはサーバーの使用状況によっては、これがより適切な場合があります。
swappiness構成ファイルを読み取ることにより、現在のswappiness値を表示できます。
cat /proc/sys/vm/swappiness
30
CentOS 7のデフォルトのスワップピネス設定は30です。これは、ほとんどのデスクトップとローカルサーバーにとって適切な中間点です。 [Cloud Server](https://cloud.tencent.com/product/cvm?from=10680)の場合、0に近づけたい場合があります。 sysctlコマンド
を使用して、swappinessをさまざまな値に設定できます。たとえば、swappinessを10に設定するには、次のように入力します。
sudo sysctl vm.swappiness=10
vm.swappiness =10
この設定は、次の再起動まで続きます。再起動の間に設定を保持するために、sysctl構成ファイルに出力行を追加できます。
sudo nano /etc/sysctl.conf
スワップピネス設定をファイルの最後に追加します。
vm.swappiness =10
行を追加したら、ファイルを保存して閉じることができます。サーバーは、起動するたびに、swappinessを宣言した値に自動的に設定します。
変更する可能性のあるもう1つの関連値は、 vfs_cache_pressure
です。この設定は、特別なファイルシステムメタデータエントリの保存に影響します。
この情報を絶えず読み取って更新することは、通常、非常にコストがかかるため、キャッシュに保存するのに時間がかかり、システムのパフォーマンスに非常に役立ちます。
proc
を介してファイルシステムに再度クエリを実行することにより、このキャッシュプレッシャーの現在の値を確認できます。
cat /proc/sys/vm/vfs_cache_pressure
100
現在の構成により、システムはキャッシュからinode情報を削除する速度が速すぎます。 sysctl
を使用して、50などのより保守的な設定に設定できます。
sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure =50
繰り返しますが、これは現在のセッションにのみ適用されます。 swappiness設定を使用するのと同じように、構成ファイルに追加することで変更できます。
sudo nano /etc/sysctl.conf
下部に、新しい値を指定する行を追加します。
vm.vfs_cache_pressure =50
行を追加したら、ファイルを保存して閉じることができます。サーバーは、起動するたびに、キャッシュ圧力を宣言した値に自動的に設定します。
このチュートリアルの手順に従うと、メモリ使用量の観点からサーバーに余裕を持たせることができます。スワップスペースは、いくつかの一般的な問題を回避するのに非常に役立ちます。
OOM(メモリ不足)エラーが発生した場合、またはシステムが必要なアプリケーションを使用できない場合、最善の解決策は、アプリケーション構成を最適化するか、サーバーをアップグレードすることです。ただし、スワップスペースを構成すると、柔軟性が高まります。
参照:「CentOS7にスワップを追加する方法」
Recommended Posts