...

サーバーメトリクスの正しい解釈CPUアイドル、負荷、待機

私がどのようにしているか サーバー・メトリクス CPUのアイドル、負荷、iowaitなどを測定することで、本当のボトルネックと無害なスパイクを区別し、的を絞った対策を講じることができます。どの限界値が理にかなっているのか、主要な数値がどのように相互作用しているのか、測定値から具体的なステップをどのように導き出しているのかを説明する。.

中心点

  • CPUアイドル自由な計算時間と隠れた待ち時間を示す
  • 負荷平均キューとコアの利用率を測定
  • iowaitストレージとネットワークのブレーキを公開
  • 交流個々の価値を切り離して見るのではなく、パターンを認識する
  • アラート意味のある閾値と傾向を定義する

CPUアイドルの正しい解釈

私は読んだ。 CPUアイドル を、CPUが何も実行していない、あるいはI/Oを待っていない時間の割合として定義し、常に現在のワークロードのコンテキストで評価する。アイドルが頻繁に60~80パーセントを超える場合は、未使用の予備があるため、より多くのタスクをスケジューリングするか、サービスを縮小する。アイドルが20パーセントを下回る状態が長く続く場合は、まずCPUに負荷のかかるプロセス、非効率なループ、並列化の欠如を探します。ユーザー・タイム(us)とシステム・タイム(sy)が高いのにアイドルが低下する場合は、純粋に計算に飢えている可能性が高い。一方、iowaitが増加するのにアイドルが低下する場合は、CPUの外側で障害が発生していることを示している。ウェブサーバーの場合、レスポンスタイムが安定しており、ユーザーが異常値によって顕著な影響を受けない限り、1日平均で20~40パーセントのアイドルの範囲が健全であると私は考えています。.

サーバーの負荷を理解する

を評価する。 負荷平均 を、計算したい、あるいはCPU時間を待っているプロセスの平均数とし、コア数と直接比較する。1分間の負荷が繰り返しコア数を上回ると、待ち行列が発生し、スケジューリングの遅れや実行中のリクエストの長さに反映される。日常的な判断では、5分と15分の負荷に特に注意を払います。なぜなら、この負荷はピーク時を平滑化し、短いピークによる誤報を避けるからです。4コアのサーバーの場合、3.2程度までの負荷の値は堅実な利用率と解釈しています。4.0を超える値については、プロセス、ロック、I/Oパスを積極的に調査します。負荷の典型的な誤った解釈を避けたい場合は、以下のサイトで実践的なヒントを見つけることができます。 ロードアベレージを正しく読み取る, そこで私は、ボーダーラインのケースや計算例を具体化する。.

I/O待ち(CPU待ち)を明確に区切る

私は次のように区別している。 iowait CPUの準備はできているが、メモリやネットワーク操作を待っているために計算できないからだ。iowaitが恒久的に10%以上のままであれば、まずデータキャリアのレイテンシー、キューの深さ、ファイルシステムのボトルネック、ネットワーク経路をチェックする。ステータスD(中断不可能なスリープ)のプロセスがトップに多数表示された場合、I/Oアクセスがブロックされている疑いが強まる。このような場合、スケーリングを考える前に、NVMe SSD、より多くのIOPS、最適化されたマウント・オプション、より大きなページ・キャッシュが処理を高速化する。このガイドでは、典型的なサンプル画像とともにコンパクトな紹介を提供しています。 I/O待機を理解する, 最初の診断の手助けをしてくれた。.

メモリー・プレッシャーを正しく分類する

私は別 メモリー印刷 CPUとI/Oのボトルネックに注意してください。メモリ不足には独自のサインがあるからです。ページ再利用のアクティビティが増えたら、vmstatのsi/so(スワップイン/アウト)列やsarのページ障害率を確認し、iowaitや応答時間と関連付ける。大きなページキャッシュがあれば、適度なスワップ利用が自動的に悪いというわけではないが、スワップが続くとCPUが遅くなる。このような状況では、アイドル・シェアは必ずしも減少しないが、負荷は増加する可能性がある。私は特に、RAMを拡張したりキャッシュを調整したりする前に、ページキャッシュの割合(フリー/バッファ/キャッシュ)、影響を受けるプロセスの主なフォールト、スワッピネス設定をチェックしている。Linuxでは、/proc/pressure/memoryの下にあるPSI(Pressure Stall Information)を使って、タスクがメモリを著しく待っているかどうかも確認する。もしPSIが重要な時間ウィンドウでストールの増加を示した場合、私はページキャッシュの容量を増やしたり、アプリのオブジェクト/クエリーキャッシュで負荷を軽減したり、バッチジョブをより静かなウィンドウに移動したりして、インタラクティブなワークロードがメモリープレッシャーで窒息しないようにしている。.

アイドル、ロード、ウェイトの相互作用

を評価する。 交流 というのも、個々の値よりもパターンによって明らかになることが多いからである。高負荷と高アイドル時間の組み合わせは、しばしばI/Oの詰まりを示す:多くのプロセスが待機しており、CPU自体が退屈している。一方、低負荷で低アイドルは、大きなキューを発生させることなくCPUを長時間占有する、計算集約的な個々のプロセスを示します。VMのスティールタイム(st)も増加した場合、私はホストにオーバーブッキングの可能性を通知するか、ホストの変更を検討する。インタラクションが適切に機能して初めて、垂直スケーリング、水平分散、ターゲットコードの最適化などの対策を決定する。.

CPU周波数、ターボ、スロットリングを考慮する

私はチェックする CPU周波数 クロックレートが動的にスケーリングされる場合、パーセンテージ値(us/sy)は欺瞞になりうるからです。周波数が下がると(省電力、サーマルスロットリング)、絶対的な計算パワーは下がるが、アイドルや負荷は変わらないように見えるかもしれない。私は、(turbostatやcpupowerなどで)コアごとの現在のMHzを利用率と並行して読み、温度やガバナー(パワーセーブやパフォーマンス)を考慮してピークを評価する。短いアイドル・フェーズ中にレイテンシのピークがある場合、低いCステート(C6+)はウェイクアップ時間を増加させる可能性がある。レイテンシが重要なサービスの場合、私はより保守的なCステートの制限またはパフォーマンス・ガバナーを設定する。私は次のことを発見した。 サーマルスロットリング 継続的な負荷の下で、冷却の改善を計画したり、ホットフェーズでクリティカルでないバックグラウンドジョブを減らしたり、ワークロードを分散させたりして、コアがスロットルしないようにし、メトリクスがより現実的な画像を提供できるようにする。.

NUMA、割り込み、アフィニティ

私は次のことに注意を払っている。 NUMAゾーン と割り込みの分散は、クロス・トラフィックがメトリクスを歪めるためです。スレッドが「間違った」NUMAノードのメモリに繰り返しアクセスすると、レイテンシが顕著に増加し、loadとiowaitは「多くのことが行われているが、ほとんど進んでいない」といったパターンを示す。私はnumactl/numastatでホットスポットをチェックし、必要に応じてワークロードをノード(CPUとメモリ)に固定し、データベースのソケットごとのバッファプールサイズに注意を払っている。RSS/RPS/XPSでネットワーク負荷を分散し、/proc/interruptsをチェックして、1つのコアがすべてのNIC割り込みを処理してボトルネックにならないようにしている。ユーザーによる作業がほとんどない状態で高いsy%シェアが検出された場合、私はこれをIRQプリント、カーネルコピーパス、チェックサムの指標として解釈します。このような場合、ドライバーの更新、オフロードオプションのカスタマイズ、コア間の公平なIRQバランスが役立ちます。.

端末での迅速な診断ワークフロー

私は次のように始める。 トップ またはhtopを使うと、CPUの内訳(us、sy、ni、id、wa、hi、si、st)、負荷の値、目立つプロセスをすぐに見ることができる。その後、3つの値の負荷のアップタイムをチェックし、1分、5分、15分のトレンドとイベント時間を比較する。vmstatで、ランキュー、コンテキストスイッチ、スワップアクティビティ、iowait履歴のフロービューを得る。データキャリアについては、iostatを使い、tps、await、svctmを読み取り、デバイスやLUNごとにレイテンシのピークを特定する。pidstatとperfがコードにホットスポットを示した場合、ハードウェアについて考える前に、影響を受けるパスに優先順位をつける。.

コンテナとCグループ:スロットリングの認識

私の評価 コンテナ制限 負荷イメージが一致しない場合、可能性のある原因としてCPUクォータ(CFS)で処理時間を削減した場合、タスクが次のタイムスライスウィンドウを待っているため、us%の時間が驚くほど短く、負荷が増加しているのがわかります。Kubernetesでは、以下のことを確認している。 リクエスト そして 制限 が現実的である:厳しすぎる制限はスロットリングにつながり、低すぎる要求はノードのスケジューリングボトルネックにつながる。私はcgroupのスロットリングカウンターをチェックし、コンテキストスイッチ率が高いコンテナを観察し、CPUのピニングアフィニティを閉じて、ノードをアップグレードする前にまずクォータをスケールします。ヘッドルームのないメモリ制限は、OOMキルにつながる可能性がある。突然プロセスが終了したり、事前に目立った大きな障害が発生したり、不規則なレイテンシのピークが発生したりすることで、私はこれを認識できる。対策としては、生産的なパスが制限によって遅くならないように、適切なヘッドルーム、水平分散、バックグラウンドタスク用のバッファを用意することだ。.

制限値と警告を適切に選択する

をセットした。 しきい値 そうすることで、本当のリスクを報告し、短期的なピークが常にアラームをトリガーすることがなくなる。CPUアイドルの場合は約20%から、iowaitの場合は10%から、負荷の場合はコアの80%から、それぞれ短い遅延を伴う警告を計画している。より高いしきい値を持つセカンドステージは、エスカレーションまたはオートスケーリングをトリガーし、私に対処する時間を与えてくれる。トレンド監視では、15分ごとの負荷を日次や週次パターンと比較し、季節的なピークを認識する。インシデント発生時に集中し続け、通知に振り回されることがないよう、アラートはまとめて送信している。.

指標 オリエンテーション 警告 クリティカル 考えられる原因 速いアクション
CPUアイドル > 60 % < 20 % < 10 % 強力なコードパス、コア数が少なすぎる ホットスポットのプロファイリングと並列化
負荷 < コア数 > 0.8 ×コア > 1.0 ×コア キュー、ロック、I/O混雑 トッププロセスをチェックし、ロックを減らす
iowait < 5 % > 10 % > 20 % 遅いディスク/ネットワーク、小さすぎるキュー NVMe/RAID、キューの深さを増やす

SLOとベースラインによる能力計画

リンク 定員 を、単なる平均値ではなく、SLO(例:95% 応答時間)と共に算出する。CPUについては、短時間のピーク負荷が即座にキューにならないよう、ヘッドルーム目標値(P95アイドルが20%を下回らないなど)を導き出す。負荷については、時間帯や季節ごとの過去のベースラインを使用して、成長やキャンペーンを考慮した動的なしきい値を構築している。アラートは複合的に定義する:例えば、負荷>コア、iowait>10%、P95レイテンシが増加した場合のみ、ステージ2がトリガーされる。クラウド環境では、ステージリザーブ(例:コア数+25%、IOPS+x)を計画し、スラッシュを発生させずに自動スケーリングルールを有効にする方法についてプレイブックを準備している。A/B測定で変更をテストし、前後のメトリクスを文書化し、最適化が単に負荷をシフトさせるだけでなく、長期的にボトルネックを解消することを確認する。.

典型的な原因と解決策

IOPS保証が不十分な小さなクラウドボリュームで高いiowait値をよく見かける。そのため、私は特にNVMeストレージや、より高い保証を持つより大きなボリュームに切り替え、待ち時間を大幅に短縮している。通常のiowaitで高負荷が発生する場合、非効率的な正規表現、キャッシュの欠落、またはおしゃべりなORMを見つけることが多い。システム時間が支配的な場合は、ネットワーク割り込み、ドライバーの状態、NICのオフロード機能を調べます。散発的なドロップとVMの同時ステイルタイムが発生する場合は、ホストの占有率をチェックし、より静かな場所に移動する。アプリが水平方向にスケールする場合は、個々の異常値がノード全体をブロックしないように、中央キャッシュ、非同期キュー、クリアタイムアウトでボトルネックを塞ぐ。.

仮想化:スティールタイムに注意

測る 時間を盗む (st)は、ハイパーバイザーがどれだけの計算時間を流用しているかを示すからだ。stが定期的に数パーセント以上上昇する場合は、メトリクスの資料を添えてプロバイダーにチケットを提出し、移転や専用リソースの提供を依頼します。マルチテナントシナリオでは、近隣による短いボトルネックが直接アラームにつながらないように、負荷のバッファも計画します。ホスト側では、不要なバックグラウンドジョブをスロットルして、機密性の高いウィンドウの生産的な負荷に余裕を持たせます。クリティカルなシステムの場合は、予測可能なレイテンシーを確保するために、専用コアかベアメタルインスタンスを好む。.

ダッシュボードとモニタリングの実践

私が作る ダッシュボード CPUブレイクダウン、負荷、iowait、メモリー、ディスク、ネットワークの値をまとめて表示し、数秒単位で原因チェックを行えるようにした。5秒という短いサンプリング間隔でスパイクを明らかにし、要約されたビューで傾向を可視化する。季節や時間帯に応じてアラートを設定し、夜勤者がピーク時に毎回アラートが鳴らないようにしている。標準的なテストとエスカレーション・パスを保存したプレイブックは、誰もゼロから始めることがないように分析を助けてくれる。もし構造化された方法で始めたいのであれば、私の記事を参考にしてほしい。 モニタリングデータの分析 最も重要なパネルと主要人物をまとめたもの。.

死角のない性能テスト

私はチェックする ボトルネック なぜなら、バックアップ、クーロンジョブ、インデックスの実行は夜間に干渉することが多いからだ。バーストトラフィックのあるアプリケーションについては、コールドキャッシュとウォームアップフェーズを含む現実的な負荷プロファイルを作成します。変更前と変更後のA/B比較を一貫して記録し、ランダムな変動から実際の影響を切り離せるようにしています。メモリーパスについては、レイテンシー、キューの深さ、スループットを相関させ、原因と結果を認識します。ネットワーク・レベルでは、メトリックスだけではリクエストが止まった理由が説明できない場合、パケット・キャプチャーを選択的に使用する。.

実用的なレシピ対策用サンプル

  • 高負荷、高アイドル、高Iowait:I/Oパスをチェックし、キューの深さを増やし、ディスクの前にキャッシュする。.
  • 低アイドル、低負荷:シングルホットスレッド - プロファイリング、並列化、バッチ処理。.
  • 高 sy%、通常 us%:IRQ/カーネルホットパス、ドライバ/オフロード、割り込み分散を最適化。.
  • コア数に近い負荷がかかり、ターボスロットルでのみレイテンシがピークに達する:冷却/ガバナーをチェックし、スロットルを避ける。.
  • スロットリングレーンを持つコンテナ:CPUクォータの引き上げ、リクエスト/リミットの調和、コ・テナンシーの削減。.
  • メモリ-PSIは増加、iowaitは中程度:ページキャッシュ/ワーキングセットの調整、RAMの追加、またはバッチジョブの移動。.

簡単にまとめると

私は読んだ。 CPUアイドル, Loadとiowaitは常に連動している。なぜなら、パターンが調査結果を提供し、私の次のステップを明確にしてくれるからだ。明確なしきい値、短い間隔、意味のあるダッシュボードによって、私は盲目的な飛行を防ぎ、適切なタイミングで対応することができる。CPU負荷についてはコードのホットスポットを探し、iowaitについてはより良いI/Oパスとキャッシュを探し、高負荷についてはキューと同期を効率化する。VMでは、インフラストラクチャーの限界がアプリケーションの問題として現れないように、ステイルタイムを含める。この規律を維持することで、障害を減らし、リソースを賢く利用し、応答時間を確実に低く保つことができる。.

現在の記事