ホームページ  >  記事  >  運用・保守  >  Linux におけるスワップ パーティションの役割の詳細な説明

Linux におけるスワップ パーティションの役割の詳細な説明

小云云
小云云オリジナル
2018-01-24 13:22:252050ブラウズ

この記事は主に Linux におけるスワップ パーティションの役割について詳しく説明したもので、困っている方の参考になれば幸いです。

この記事では主に Linux でのスワップ パーティションの関連内容について説明します。具体的な概要は次のとおりです。

スワップ パーティションの紹介

Embedded Linux 中国語サイトのニュース、Linux システムのスワップ パーティション、つまりスワップ領域、スワップ領域の役割は次のように簡単に説明できます。 システムの物理メモリが十分でない場合、物理メモリを次の場所に転送する必要があります。領域の一部は、現在実行中のプログラムで使用するために解放されます。解放された領域は、長期間動作しなかったプログラムによって発生する場合があります。解放された領域は、それらのプログラムが実行される直前に、スワップ領域に一時的に保存されます。このように、物理メモリが不足した場合、システムは常にスワップを実行します。実際、スワップ調整は Linux サーバー、特に Web サーバーのパフォーマンスにとって非常に重要です。スワップを調整することにより、システム パフォーマンスのボトルネックが克服され、システムのアップグレード コストが節約できる場合があります。

誰もが知っているように、最新のオペレーティング システムは「仮想メモリ」テクノロジを実装しています。これにより、機能面で物理メモリの制限が突破されるだけでなく、プログラムが実際の物理メモリよりも大きな領域を操作できるようになります。 " 「仮想メモリ」は、各プロセスが他のプログラムによって干渉されないように、各プロセスを分離する安全保護ネットです。

おそらく、コンピューターユーザーはよくこの現象に遭遇するでしょう。たとえば、Windows システムを使用している場合、複数のプログラムを同時に実行することができます。長い間注目していなかったプログラムに切り替えると、ハードディスクのビープ音が聞こえます。これは、このプログラムのメモリが頻繁に実行されるプログラムによって「盗まれ」、スワップ領域に配置されたためです。したがって、このプログラムがフロントエンドに配置されると、スワップ領域からデータを取得してメモリに格納し、実行を継続します。

さらに、物理メモリからスワップアウトされたすべてのデータがスワップに置かれるわけではなく (もしそうなら、スワップが圧倒されてしまいます)、データのかなりの部分がファイル システムに直接スワップされます。たとえば、一部のプログラムは、いくつかのファイルを開いてファイルの読み取りと書き込みを行います (実際、すべてのプログラムは、実行中のプログラム自体であるファイルを少なくとも 1 つ開く必要があります)。これらのプログラムのメモリ領域をスワップアウトする必要がある場合があります。ファイル部分のデータはスワップ領域に配置されますが、ファイルに直接配置することもできます。ファイル読み取り操作の場合、メモリ データは直接解放され、スワップアウトする必要はありません。ファイル書き込み操作の場合は、次回必要になったときに変更されたデータのみをファイル システムから直接復元できるためです。リカバリのためにファイルに保存する必要があります。ただし、malloc と新しい関数によって生成されるオブジェクトのデータは異なります。ファイル システム内に対応する「予約」ファイルがないため、スワップ スペースが必要になります。そのため、これらは「匿名」メモリ データと呼ばれます。このタイプのデータには、スタック内の一部のステータスおよび変数データも含まれます。したがって、スワップ空間は「匿名」データの交換空間です。

128M スワップ制限の突破

一部の Linux (国内中国語版) インストール マニュアルには次のような指示があります: スワップ領域は 128M を超えることはできません。なぜそう言われるのでしょうか? 「128M」という数字の由来を説明する前に、まず質問に答えておきます。現在、128M の制限はまったくありません。現在の制限は 2G です!

Linux システムのスワップ領域はページ化されており、各ページのサイズはメモリ ページのサイズと同じであるため、スワップ領域とメモリ間のデータ交換が容易になります。 Linux の古いバージョンがスワップ スペースを実装したとき、スワップ スペースの最初のページをすべてのスワップ スペース ページの「ビット マップ」として使用していました。これは、最初のページのすべてのビットがスワップ領域のページに対応することを意味します。このビットが 1 の場合は、このページのスワップが使用可能であることを意味し、0 の場合は、このページが不良ブロックであり使用できないことを意味します。このように、最初のスワップ ページはマッピング ページであるため、最初のスワップ マッピング ビットは 0 である必要があります。さらに、最後の 10 マッピング ビットもスワップ バージョンを示すために使用されます (元のバージョンは Swap_space、現在のバージョンは swapspace2)。すると、1ページのサイズをsとすると、このSwap実装方法では、合計「8 * (s - 10) - 1」ページのSwapページを管理することができます。 i386 システムの場合、s=4096、合計スペース サイズは 133890048 です。1 MB=2^20 バイトを考慮すると、サイズはちょうど 128M になります。
スワップ スペースを管理するこの方法は、スワップ スペース内の不良ブロックを防ぐことです。システムは、スワップに不良ブロックがあることを検出すると、対応するビットマップ上で 0 をマークし、このページが使用できないことを示します。このようにして、スワップを使用すると、不良ブロックが使用されず、システムでエラーが発生することがなくなります。

現在のシステム設計者は次のように考えています:

1. ハードドライブの品質は非常に良くなり、不良ブロックはほとんどありません。
2. あったとしても、多くはありません。不良ブロックをリストするだけでよく、ページごとにマッピングを作成する必要はありません。
3. 不良ブロックが多数ある場合、このハードドライブをスワップ領域として使用しないでください。

ということで、Linux はビット マッピング方式をキャンセルし、128M 制限もキャンセルしました。アドレスによる直接アクセス(2G に限定)。

スワップ構成のパフォーマンスへの影響

スワップ領域を割り当てすぎるとディスク領域が無駄になり、スワップ領域が少なすぎるとシステムエラーが発生します。

システムの物理メモリが使い果たされると、システムの動作は非常に遅くなりますが、スワップ領域が使い果たされると、システムでエラーが発生します。たとえば、Web サーバーは、さまざまなリクエスト数に基づいて複数のサービス プロセス (またはスレッド) を生成できます。スワップ領域が使い果たされると、サービス プロセスを開始できなくなり、通常は「アプリケーションがメモリ不足です」エラーが発生します。深刻な場合、サービスプロセスのデッドロックが発生します。したがって、スワップ領域の割り当ては非常に重要です。

通常、スワップ領域は物理メモリのサイズ以上である必要があり、最小値は 64M 未満であってはなりません。通常、スワップ領域のサイズは物理メモリの 2 ~ 2.5 倍である必要があります。ただし、アプリケーションに応じて、異なる構成が必要になります。小規模なデスクトップ システムの場合は、より小さいスワップ領域のみが必要ですが、大規模なサーバー システムでは、状況に応じて異なるサイズのスワップ領域が必要になります。特にデータベース サーバーと Web サーバーの場合、アクセス数が増加するにつれて、スワップ領域の要件も増加します。具体的な構成については、各サーバー製品の説明書を参照してください。

さらに、スワップ パーティションの数もパフォーマンスに大きな影響を与えます。スワップ操作はディスク IO 操作であるため、複数のスワップ領域がある場合、スワップ領域の割り当てはすべてのスワップに対して循環的に実行され、IO 負荷のバランスが大幅に分散され、スワップ交換が高速化されます。スワップ領域が 1 つしかない場合、すべてのスワップ操作によってスワップ領域が非常にビジーになり、システムはほとんどの時間待機状態になり、非常に非効率的になります。パフォーマンス監視ツールを使用すると、現時点では CPU はそれほどビジーではありませんが、システムが遅いことがわかります。これは、ボトルネックが IO であり、CPU の速度を上げることによって問題を解決できないことを示しています。
システムパフォーマンスの監視

スワップスペースの割り当ては確かに重要ですが、システムの実行中のパフォーマンス監視はさらに価値があります。パフォーマンス監視ツールを使用すると、システムのさまざまなパフォーマンス指標をチェックし、システム パフォーマンスのボトルネックを見つけることができます。この記事では、Solaris でのスワップに関連するいくつかのコマンドと使用法のみを紹介します。

最も一般的に使用されるのは Vmstat コマンドです (このようなコマンドはほとんどの Unix プラットフォームにあります)。 例:

vmstat 3

procs memory swap io system cpu 
r b w swpd free buff cache si so bi bo in cs us sy id 
0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99 
0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100 
0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100 
…………

コマンドの説明:

vmstat に続くパラメーターは、パフォーマンス インジケーターをキャプチャする時間間隔を指定します。 3 は 3 秒ごとにキャプチャすることを意味します。データの最初の行を読み取る必要はありません。これは、起動以降の平均パフォーマンスを反映するだけであり、値はありません。 2 行目からは、システムのパフォーマンス指標が 3 秒ごとに反映されます。これらのパフォーマンス指標のうち、スワップに関連するものには次のものが含まれます:

w under procs

メモリを解放してスワップアウトする必要がある現在のプロセス数を示します (3 秒以内)。

メモリ下のswpd

使用されるスワップ領域のサイズを示します。スワップの下の

si は、現在の (3 秒以内の) スワップバックされた (スワップイン) メモリの 1 秒あたりの総量をキロバイト単位で表します。 1 秒あたりにスワップアウトされるメモリの量 (KB 単位)。

上記のインジケーターの数が多いほど、システムはビジー状態になります。これらのインジケーターによって表されるシステムの混雑度は、システムの特定の構成に関連しています。システム管理者は、システムが正常に動作しているときのこれらの指標の値を記録し、システムに問題が発生したときに比較して問題を迅速に発見し、システムが正常に動作するための標準的な指標の値を策定する必要があります。パフォーマンスの使用を監視するため。

さらに、Swapon-s を使用して、Swap リソースの現在の使用状況を簡単に確認できます。例:

swapon -s

ファイル名 タイプ サイズ 使用優先度

/dev/hda9 パーティション 361420 0 3

スワップ領域で使用されているリソースと未使用のリソースのサイズを簡単に確認できます。

良好なシステムパフォーマンスを確保するには、スワップ負荷を 30% 未満に保つ必要があります。

スワップ領域を増やすには、次の手順に従います:

1) スーパーユーザーになります

$su - root

2) スワップファイルを作成します

dd if=/dev/zero of=swapfile bs=1024 count=65536

連続したスペースを持つスワップファイルを作成します。

3) スワップ ファイルをアクティブ化します

/usr/sbin/swapon swapfile

swapfile は、前の手順で作成したスワップ ファイルを指します。

4) これで、新しく追加されたスワップ ファイルが有効になりましたが、システムの再起動後は、以前の手順は記憶されません。したがって、ファイルの名前とスワップ タイプは、次のように /etc/fstab ファイルに記録する必要があります:

/path/swapfile none Swap sw,pri=3 0 0

5) スワップが行われているかどうかを確認します。ファイルが追加されます

/usr/sbin/swapon -s

余分なスワップ領域を削除します。

1) スーパー ユーザーになります

2) Swapoff コマンドを使用して、スワップ領域を再利用します。

#/usr/sbin/swapoff swapfile

3) /etc/fstab ファイルを編集し、このスワップ ファイルの実体を削除します。

4) ファイル システムからこのファイルをリサイクルします。

#rm swapfile

5) もちろん、スワップ領域がファイルではなくパーティションである場合は、新しいファイル システムを作成して、それを元のファイル システムにマウントする必要があります。

関連する推奨事項:

Oracle スワップ 100% ケース分析

Oracle が Linux スワップ パーティションを使用しないようにする方法

MySQL が Linux スワップ パーティションの使用を回避し、読み取りおよび書き込みのパフォーマンスを向上させる方法

以上がLinux におけるスワップ パーティションの役割の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。