ホームページ  >  記事  >  システムチュートリアル  >  遅いディスクが Linux 負荷の急増を引き起こす理由を解明する

遅いディスクが Linux 負荷の急増を引き起こす理由を解明する

WBOY
WBOY転載
2023-12-29 14:49:59526ブラウズ

1. CPU 使用率と負荷率の違い

遅いディスクが Linux 負荷の急増を引き起こす理由を解明する

ここでは、CPU 負荷と CPU 使用率を区別する必要があります。これらは 2 つの異なる概念ですが、それらの情報は同じ top コマンドで表示できます。 CPU 使用率は、プログラムの実行中にリアルタイムで CPU が占有されている割合を示します。これは、一定期間内の CPU 使用率の統計です。このインジケーターにより、一定期間内に CPU がどの程度占有されているかを確認できます。占有されている場合 時間が非常に長い場合は、CPU がすでに過負荷になっているかどうかを考慮する必要があります。 CPU負荷は、一定時間内にCPUが処理中およびCPUの処理を待っているプロセス数の合計の統計情報であり、CPU使用キューの長さの統計情報でもあります。

CPU 使用率が高いからといって、負荷が大きいというわけではありません。おそらく、このタスクは CPU を集中的に使用している可能性があります。 CPU 使用率が同じ低い状況でも、負荷平均が高くなりますか?占有時間と使用時間を理解すると、CPU がタイム スライスを割り当てるときに、それを使用するかどうかは完全にユーザーに依存するため、使用率が低くても平均負荷が高くなる可能性があることがわかります。さらに、IO デバイスも CPU 負荷を高める可能性があります。

この観点から見ると、CPU 使用率だけでは CPU が過負荷状態にあるかどうかを判断するのは不十分で、負荷平均と組み合わせて CPU 使用率を全体的に見る必要があります。 インターネットには、この 2 つの違いを説明する例があります。公衆電話ボックスでは、電話をかけている人が 1 人、待っている人が 4 人います。電話の使用時間は、1 人につき 1 分間に制限されています。 1 分以内に電話を終えてください。電話を切って列に並んで次のラウンドを待つことができるのは私だけです。ここでの電話は CPU に相当し、電話をかけている人や電話を待っている人はタスクの数に相当します。電話ボックスの利用中は、電話をかけて必ず帰る人、電話が終わらずにまた並ぶ人、さらには新たに並ぶ人もいます。タスクの数が増えたり減ったり。平均負荷をカウントするために、5 秒ごとに人数をカウントし、1 分、5 分、15 分での統計を平均して、1 分、5 分、15 分での平均負荷を算出します。電話を取ってすぐに電話をかけ、通話が 1 分間続く人もいれば、最初の 30 秒で電話番号を探したり、電話するか迷ったりして、最後の 30 秒で実際に電話する人もいるでしょう。電話機をCPU、人数をタスクとみなした場合、前者(タスク)のCPU使用率が高く、後者(タスク)のCPU使用率が低いといいます。もちろん、最初の 30 秒間は CPU は動作せず、次の 30 秒間は停止し、CPU は動作し続けます。ただ、一部のプログラムでは多くの計算が行われるため CPU 使用率が高くなりますが、一部のプログラムでは計算がほとんどないため、必然的に CPU 使用率が低くなります。ただし、CPU 使用率が高いか低いかは、後でキューに入れられるタスクの数とは関係ありません。

タスクは最終的に CPU コアに割り当てられて処理されるため、CPU の数と CPU コアの数 (つまり、コアの数) は CPU 負荷に影響します。 2 つの CPU は 1 つの CPU よりも優れており、デュアル コアはシングル コアよりも優れています。したがって、CPU負荷はCPUの性能の違いとは別に、「コアが何個あるか、つまり負荷がどれだけあるのか」というコア数に基づいて計算されることを覚えておく必要があります。単一コアの場合は 100% を超えないことが最善です。つまり、負荷は 1.00 などです。

Linux には、現在実行中のシステムの仮想マッピングを保存する /proc ディレクトリと、CPU 情報を保存する cpuinfo というファイルがあります。 /proc/cpuinfo ファイルでは、実際の CPU ではなく論理 CPU ごとにセクションに情報が表示されます。各論理 CPU の情報は 1 セクションを占め、最初の論理 CPU 識別子は 0 から始まります。

リーリー

このファイルの CPU 情報を理解するには、次のような関連する概念を理解する必要があります。 プロセッサは論理 CPU の ID を表し、モデル名は実際の CPU のモデル情報を表し、物理 ID は CPU を表します。実 CPU と識別、CPU コアは実 CPU のコア数などを表します。

論理 CPU の説明: 現在のサーバーは通常、CPU パフォーマンスを向上させるために「ハイパー スレッディング」(HT) テクノロジーを使用しています。ハイパー スレッディング テクノロジを使用すると、CPU で複数のプログラムを同時に実行し、CPU 内のリソースを共有できます。理論的には、2 つの CPU のように 2 つのスレッドを同時に実行する必要があります。ハイパー スレッディング テクノロジは 2 つのスレッドを同時に実行できますが、実際の 2 つの CPU とは異なり、各 CPU には独立したリソースがあります。 2 つのスレッドが同時にリソースを必要とする場合、続行する前に、一方のスレッドを一時的に停止し、これらのリソースがアイドル状態になるまでリソースを放棄する必要があります。したがって、ハイパースレッディングのパフォーマンスは 2 つの CPU のパフォーマンスと等しくありません。ハイパー スレッディング テクノロジを搭載した CPU には、他にも制限があります。

2. CPU負荷率の計算方法

ロードアベレージの概念は UNIX システムに由来しており、各社の計算式は異なりますが、いずれも CPU を使用しているプロセス数と CPU を待機しているプロセス数を測定するために使用されます。それは実行可能なプロセスの数です。したがって、ロードアベレージはCPUボトルネックの参考指標として利用でき、CPU数よりも大きい場合はCPUが不足している可能性があります。

ただし、Linux では少し異なります。

Linux の負荷平均には、CPU を使用しているプロセスの数と CPU を待機しているプロセスの数に加えて、中断のないスリープ プロセスの数も含まれます。通常、IO デバイスとネットワークを待機しているとき、プロセスは中断できないスリープ状態になります。 Linux 設計者の論理は、中断不可能なスリープは非常に短時間であるべきであり、すぐに動作を再開するため、実行可能であるとみなされるというものです。ただし、無中断スリープは、たとえ短くてもスリープであることに変わりはありません。現実の世界では無中断スリープがそれほど短くない可能性があることは言うまでもありません。無中断スリープの回数が多い、または長い場合は、通常、IO デバイスがボトルネックに遭遇していることを意味します。ご存知のとおり、スリープ状態のプロセスには CPU が必要なく、すべての CPU がアイドル状態であってもスリープ プロセスは実行できないため、スリープ プロセスの数は CPU 負荷を測定する指標としては決して適していません。中断できないスリープ プロセスをカウントします。負荷平均を入力する行為は、負荷平均の本来の意味を直接覆すことになります。したがって、Linux システムでは、負荷平均インジケーターは、その意味がわからないため、基本的に役に立ちません。負荷平均が高い場合、実行可能なプロセスが多すぎるのか、中断できないスリープ プロセスが多すぎるのかがわかりません。 CPUが不足しているのか、IOデバイスがボトルネックになっているのか判断できません。

別の側面から見ると、ディスクが遅いとき(大量のディスクを使用しているとき)にCPU負荷が上昇する理由も説明できます。基本的に、CPU 負荷が高い場合は、2 つの状況が考えられます。CPU 自体が処理するタスクが多すぎることに加えて、ソフト割り込みとコンテキストの切り替えが頻繁に行われ、その結果高負荷が発生します。もう 1 つはディスクが遅すぎて、中断できないスリープが多すぎるためです。これにより、CPU の負荷が高くなります。

以上が遅いディスクが Linux 負荷の急増を引き起こす理由を解明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。