LinuxのCPU負荷とCPU使用率の詳細な説明

LinuxのCPU負荷とCPU使用率の詳細な説明

CPU 負荷と CPU 使用率

これらは両方とも、ある程度、マシンの忙しさを反映できます。

CPU 使用率は、現在の CPU の忙しさを反映します。変動の理由は、CPU 処理時間を占有しているプロセスが IO 待機状態にあるが、待機状態にまだ解放されていない可能性があるためです。

ロードアベレージとは、一定時間内にCPU時間を占有し、CPU時間を待機しているプロセスの数を指します。ここで、CPU時間を待機しているプロセスとは、待機状態にあるプロセスを除いた、起動を待っているプロセスを指します。

上記の分析から、マシンはCPU使用率が低く、負荷が高い状況にある可能性が高いことがわかります。したがって、マシンの忙しさは、両方を組み合わせて見る必要があります。実際の使用状況の観察から、私のデュアルコアXeon 2.8GHZ、2Gメモリマシンの平均負荷は約50で、CPU使用率は100%に近づいています(アプリケーションのIO操作が多い)。この場合、アプリケーションはまだスムーズで、実際のアクセス遅延はそれほど高くありません。したがって、CPU がまだアイドル状態のときに、IO 応答をいかに改善するかが負荷を軽減する鍵となります。負荷が数十に達すると、マシンが非常に忙しいと考える人が多いです。このとき CPU 使用率が比較的低い場合、高負荷では問題を十分に説明できない可能性があります。CPU によって処理されたプロセスが完了すると、それらの待機中のプロセスもすぐに応答を得ることができます。この場合、IO 読み取りおよび書き込み速度を最適化する必要があります。平均負荷が 1 桁であっても (たとえば、特定のプロセスが常に実行されているなど)、CPU 使用率が常に 90% を超えている場合は、マシンは実際にはビジー状態です。

実は前回の記事でもCPU使用率が低いのに負荷が高いと書いてありました。CPU使用率が低いのに負荷が非常に高い理由は、高負荷はIOかもしれない

CPU負荷のアナロジー

システムが過負荷になっているかどうかを判断するには、負荷平均の真の意味を理解する必要があります。以下では、「Linux CPU 負荷の理解」という記事に基づいて、最も一般的な言語でこの問題を説明してみます。
まず、コンピューターに CPU が 1 つしかなく、すべての計算をこの CPU で実行しなければならないという最も単純なケースを想定してみましょう。
さて、この CPU を 1 車線のみの橋と想像すると、すべての車両はこの車線を通過する必要があります。 (当然ですが、橋は一方向のみ通行可能です。)
システム負荷は 0 です。つまり、橋の上に車はありません。

システム負荷は 0.5 です。つまり、橋の半分に車が通っていることになります。

システム負荷が 1.0 の場合、橋のすべてのセクションに車があり、橋が「満杯」であることを意味します。しかし、この時点ではまだ橋は通行可能であったことに注意する必要があります。

システム負荷は 1.7 で、車両が多すぎて橋がすでに満杯 (100%) になっており、橋への搭乗を待っている車両が橋上の車両の 70% を占めていることを意味します。同様に、システム負荷が 2.0 の場合、橋への搭乗を待機している車両の数が橋の​​デッキ上の車両の数と同じであることを意味し、システム負荷が 3.0 の場合、橋への搭乗を待機している車両の数が橋の​​デッキ上の車両の数の 2 倍であることを意味します。つまり、システム負荷が 1 より大きい場合、後続の車両は待機する必要があり、システム負荷が大きいほど、橋を渡るのに待機する時間が長くなります。

CPU のシステム負荷は、基本的に上記の例えと同じです。橋の交通容量は CPU の最大作業負荷であり、橋の上の車両は CPU による処理を待機しているプロセスです。
CPU が 1 分間に最大 100 個のプロセスを処理する場合、システム負荷が 0.2 であれば、CPU はこの 1 分間に 20 個のプロセスのみを処理します。システム負荷が 1.0 であれば、CPU はこの 1 分間にちょうど 100 個のプロセスを処理し、システム負荷が 1.7 であれば、CPU によって処理される 100 個のプロセスに加えて、CPU による処理を待機しているプロセスが 70 個あることを意味します。
コンピュータのスムーズな動作を確保するには、システム負荷が 1.0 を超えないようにする必要があります。そうすることで、プロセスを待機させる必要がなくなり、すべてのプロセスをできるだけ早く処理できるようになります。明らかに、1.0 は臨界値です。この値を超えると、システムは最適な状態ではなくなり、介入が必要になります。

CPU 負荷 - マルチプロセッサ

上記では、コンピューターに CPU が 1 つしかないことを前提としています。コンピュータに 2 つの CPU が搭載されていたらどうなるでしょうか?
CPU が 2 つになると、コンピューターの処理能力が 2 倍になり、同時に処理できるプロセスの数も 2 倍になります。
もう一度、橋の例えを使ってみましょう。CPU が 2 つあるということは、橋に 2 つのレーンがあることを意味し、トラフィック容量が 2 倍になります。

したがって、CPU が 2 つある場合、システム負荷は 2.0 に達する可能性があり、その時点で各 CPU の作業負荷は 100% に達します。一般的に、n 個の CPU を持つコンピュータの場合、許容可能な最大システム負荷は n.0 です。

CPU 負荷 - マルチコア プロセッサ

チップメーカーは、多くの場合、単一の CPU 内に複数の CPU コアを組み込んでおり、これをマルチコア CPU と呼びます。
システム負荷の点では、マルチコア CPU の影響は複数の CPU の影響と同様であるため、システム負荷を考慮する場合は、コンピューターに搭載されている CPU の数と、各 CPU に搭載されているコアの数を考慮する必要があります。次に、システム負荷をコアの総数で割ります。コアあたりの負荷が 1.0 を超えない限り、コンピューターは正常に動作しています。
コンピュータに CPU コアがいくつあるかはどうすればわかりますか?
「cat /proc/cpuinfo」コマンドを使用して CPU 情報を表示できます。 「grep -c 'model name' /proc/cpuinfo」コマンドは、CPU コアの合計数を直接返します。

システムロードに関する経験則

システム負荷にとって 1.0 は理想的な値ですか?

必ずしもそうではありません。システム管理者は余裕を持たせることが多いです。この値が 0.7 に達したら注意が必要です。経験則は次のようになります:

  • システム負荷が継続的に 0.7 を超える場合は、状況が悪化するのを防ぐために、問題がどこにあるかを調査する必要があります。
  • システム負荷が継続的に 1.0 を超える場合は、この値を減らす解決策を見つける必要があります。
  • システム負荷が 5.0 に達すると、システムに重大な問題が発生しているか、長時間応答していないか、クラッシュ寸前であることを意味します。システムがこの値に到達しないようにする必要があります。

私のマシンには 24 個のコアがありますが、適切な負荷はどれくらいでしょうか?

[[email protected] /home/ahao.mah/ALIOS_QA]#grep 'モデル名' /proc/cpuinfo | wc -l24

答えは次のとおりです。

[[email protected] /home/ahao.mah/ALIOS_QA]#echo "0.7*24" |bc16.8

最適な観察時間

最後の質問ですが、「負荷平均」は 3 つの平均値を返します ---- 1 分間のシステム負荷、5 分間のシステム負荷、15 分間のシステム負荷、---- どの値を参照すればよいのでしょうか?

システム負荷が 1 分間だけ 1.0 を超え、他の 2 つの時間帯では 1.0 未満である場合、これは一時的な現象であり、深刻な問題ではないことを示しています。

15 分以内に平均システム負荷が 1.0 を超える場合 (CPU コアの数を調整した後)、問題は一時的な現象ではなく、継続していることを示します。したがって、主に「15 分間のシステム負荷」を観察し、それをコンピューターの正常な動作の指標として使用する必要があります。

以下もご興味があるかもしれません:
  • Linux システムでの CPU 使用率が高い場合のトラブルシューティングのアイデアと解決策
  • Linux で CPU 使用率が高くなる原因をトラブルシューティングするプロセスの詳細な説明

<<:  MySQL インデックスの正しい使い方とインデックスの原理の詳細な説明

>>:  プログレッシブ ウェブ アプリ (PWA) の開発方法

推薦する

固定サイドバーを実現するためのJavaScript

固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...

アニメーション効果のようなVueトランジションの例

目次結果を一目で見るハート効果デジタルスクロールアニメーションアニメーションのように結果を一目で見る...

MySQL ロックの知識ポイントのまとめ

ロックの概念①. 現実世界では、鍵は外の世界から身を隠したいときに使う道具です。 ②. コンピュータ...

MySQL で MHA アーキテクチャのデプロイメントを構築する手順

目次マハ1. MAHアーキテクチャの概要2. 適用可能なシナリオ3. MHAの動作原理4. MHAの...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...

Mysql SQL ステートメント演習 (50 問)

テーブル名とフィールド–1. 学生リスト学生 (s_id、s_name、s_birth、s_sex)...

MySql Group Byは複数のフィールドのグループ化を実装します

日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...

MySQLサービスを開くおよび閉じる2つの方法

方法1: cmdコマンドを使用するまず、DOS ウィンドウを開き、スタート、実行、cmd と入力しま...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

MySQL のインデックスにおける NULL の影響についての詳細な説明

序文私は多くのブログを読み、弊社の DBA を含む多くの人々が、MySql では列に null が含...

ウェブページ作成のヒントのまとめ

序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...

jQueryは従業員情報の追加と削除の機能を実装します

この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...

JS ES の新機能: 拡張演算子の紹介

1. スプレッド演算子スプレッド演算子は 3 つのドット ... で、複数の引数 (関数呼び出しなど...

Linux サーバーに Python3 をインストールする 2 つの方法

最初の方法Alibaba Cloud および Baidu Cloud サーバーが利用可能です。 ! ...

VUE ユニアプリの基本コンポーネントの簡単な紹介

1. スクロールビュー垂直スクロールを使用する場合は、固定の高さを指定して CSS で高さを設定する...