...

CPU 使用率が高いことが必ずしも問題ではない理由

高い CPU使用率 多くの場合、障害のように聞こえますが、負荷がかかった状態でも効率的な作業が行われていることを示している場合が多くあります。重要なのは、スループットと応答時間が適切であるかどうかであり、実際のワークロードでは意図的に高く設定されることもあるパーセンテージ値だけではありません。.

中心点

以下の概要は、私が重い負荷をきちんと分類するための最も重要なガイドラインに焦点を当てたものです。.

  • 文脈が重要です:顕著な損失を伴わない高負荷は、多くの場合健全である。.
  • スループット対パーセンテージ:1秒あたりの出力は、純粋な稼働率を上回ります。.
  • 複数の指標 相関関係:CPU、RAM、I/O、ネットワークをまとめて読み込む。.
  • ベースライン 数週間にわたって:瞬間的な状況ではなく、トレンドを捉える。.
  • アラーム 賢明な閾値:慌てずに、冷静に行動する。.

優先順位をつける ユーザー体験 個々の値を確認し、レイテンシ、エラー率、スループットを検証します。反応時間が長くなったり、リクエストが失敗したりする場合にのみ、ピークは問題であると判断します。負荷は、具体的なワークロードと予想されるパフォーマンス曲線と常に比較します。複数の相関関係を確認してから初めて ホスティングメトリクス 真のボトルネックを明らかにします。これにより、誤解を防ぎ、真に効果のある分野にのみ投資することができます。.

CPU値が高いことがまったく正常である場合

私は高いパーセンテージを、まず以下の点と比較して評価します。 スループット および応答時間。エンコード、画像変換、データベース結合、またはバイラル投稿は、サーバーがまさにその役割である計算を実行するため、CPU を高負荷にします。1 秒あたりのリクエスト数と処理されたトランザクション数が比例して増加している限り、それは効率的な負荷利用率を示しています [3]。 多くのワークロードはバーストで実行され、最新のコアはターボモードを含め、これらのピークを難なく処理します。ウェブホスティングサーバーの場合、多くの場合、約 80% までは典型的な負荷フェーズであり、 応答-清潔に保つ [4][5]。.

稼働率を正しく解釈する方法

私は CPU 使用率を単独で読むことはなく、常に レイテンシー, 、エラー率、負荷平均、I/O 待ち時間。iowait が低い状態で CPU 使用率が高い場合は、実際の計算作業が行われていることを示しています。iowait が高く、CPU 使用率が平均的な場合は、メモリまたはディスクの制限が原因である可能性が高いです [4]。 私はコアごとの統計を確認します。そうしないと、1 つのホットスレッドによってサービス全体が速度低下してしまうからです。CPU がフル稼働しているにもかかわらずスループットが停滞している場合は、非効率なバックグラウンドジョブやロック競合をチェックします。負荷が高いまま、かつ パフォーマンス が低下した場合、この指標は深刻な問題を示しています [3][4]。.

コンテキストにおける適切な指標

コンバイン サーバー監視 ビジネス指標を使って、この組み合わせだけが状況を正しく反映するからね。CPU 使用率に加えて、平均負荷、コアあたりの負荷、iowait、RAM 圧力、ディスクのレイテンシ、ネットワークのドロップもチェックしてるよ。 同時に、リクエストのレイテンシ、スループット、キューの長さ、アプリケーションのエラー率も測定しています。これにより、表面的なピークではなく、真のボトルネックを特定することができます。以下の表は、厳格なルールではなく、大まかな目安として活用しており、常に私の ベースライン およびシステムの目標。.

指標 正常範囲 警告 クリティカル ソース
CPU使用率 < 70% 70–80% > 90% [4][2]
負荷平均 < CPUコア = 核 > 核 [4]
RAM使用量 < 80% 80–90% > 90% [5]
ディスクI/O 低い ミディアム 高い [2]

スナップショットではなく、ベースラインとトレンド

まず、私は ベースライン 通常、1~2週間、同様のトラフィックで監視します。その後、新しいピークを過去のパターンと比較し、真の偏差を認識します。トラフィックが一定であるにもかかわらずCPUが持続的に上昇する場合、更新、設定、データ増加などによる劣化が考えられます[4][6]。 季節的要因やキャンペーンは、その影響が把握できるように記録しています。トレンド分析を行わないと、ピークは劇的に見えるものの、実際には プロフィール アプリケーションに適合する。.

アラーム、しきい値、自動化

警告レベルはおよそ70~80%、重大な警報は90%近くに設定し、以下と連動させています。 応答-時間とエラー率 [4][6]。これにより、アラートの疲労を回避し、ユーザーが気付く可能性のある場合にのみ対応します。時間ベースのルールは、対応を必要としない短いスパイクをフィルタリングします。さらに、SLO とバーンレートチェックを使用して、反射的にスケーリングするのではなく、的を絞った対応を行います。アラートはサービスごとに分離して、 原因 より迅速に割り当て、ランブックを的を絞って実行することができます。.

無害なピークの典型的な原因

多くのトップ選手については、私は次のように説明しています。 正当な コンテンツ管理システムでの画像最適化、キャッシュのウォームアップ、分析クエリなどのワークロード。Cron ジョブとバックアップは、夜間に密集した計算ウィンドウを生成し、モニタリングで明確に確認できます。キャンペーン、ニュースレター、または成功した投稿は、突然のリクエストの波を引き起こします。短時間のコンパイルやビデオエンコーディングも、ユーザーエクスペリエンスに影響を与えることなく、コアを高く押し上げます。 私は、こうしたフェーズをジョブプランに割り当て、必要に応じて調整しています。 タイミング あるいは並行性。.

高い稼働率が本当に問題となる場合

高い音が聞こえると、私は耳を澄ます。 CPU スループットの低下、レイテンシの増加、エラー率の増加と一致します。エンドレスループ、チャッティロック、非効率的な正規表現、または欠陥のあるキャッシュがこのようなパターンを引き起こす可能性があります。マルウェア、クリプトマイナー、または失敗したスクリプトは、対応する利点がないにもかかわらず、急激な増加を示すことがよくあります。 冷却不良によるサーマルスロットリングは、クロック速度が低下し、アプリの動作が重くなる一方で、一見、負荷が高いように見える原因となります。負荷が 80% 以上と長く続き、パフォーマンスが低下している場合は、明確な対応が必要であると判断します [11]。.

CPU スティールタイムと仮想環境

VPS およびクラウドでは、以下の点に注意してください。 盗む-Time、ハイパーバイザーが近隣のコアを盗むことができるため。高いスティール値は、VM が計算を実行しようとしたが、タイムスライスを取得できなかったことを意味します。このような場合、原因は VM の外部にあり、計画された最適化は限定的な効果しか発揮しません。ホスト密度、NUMA アサインメント、および分離に適したインスタンスタイプを確認します。詳細については、以下を参照してください。 CPUスチールタイム そして典型的な騒がしい隣人シナリオ。.

ロードアベレージを正しく読み取る

私は常にロードアベレージを カーン マシン。負荷がコアを上回ると、キューが長くなり、システムは飽和状態を通知します [4]。高い負荷は、CPU、I/O、またはスレッドの待ち時間から生じる可能性があるため、その構成を確認します。コアごとの負荷は、単一のコアを拘束する不均等に分散したスレッドを特定します。さらに詳しく調べる場合は、 ロードアベレージの解釈 そして、iowait、実行キュー、コンテキストスイッチも同時に確認する。.

実用的な診断手順

私はまず CPU 使用率分析 top/htop または ps を使用して、ホットプロセスを確認します。次に、pidstat および perf を使用して、ユーザー時間またはカーネル時間のどちらが優勢であるか、またサイクルがどこで消費されているかを調査します。データベース側では、遅いクエリ、ロックの待機時間、および欠落しているインデックスを確認します。Web スタックでは、ハンドラごとのレイテンシ、キャッシュ率、およびアップストリームの待機時間を測定します。 最後に、結果を私の ベースライン, コード側、設定側、インフラストラクチャ側のいずれで対応すべきかを判断するため。.

過剰反応ではなく最適化

私はまず、以下に投資します。 効率性, 高価なハードウェアに直接投資するのではなく、多くの場合、欠陥のあるプラグインの削除、大規模なテーブルのインデックス、またはキャッシュの改善は、コアのアップグレードよりも大きな効果をもたらします。トレンドが明らかに上昇している場合は、垂直、水平、またはキューの分離によるクリーンなスケーリングを計画します。 トラフィックのピーク時には、バーストがスムーズに処理されるように、弾力性のある割り当てと適切な制限を設定しています。一時的なパフォーマンスのピークが、一定の予備能力よりも価値が高い場合が多い理由については、以下をご覧ください。 バースト性能 非常にわかりやすい。.

CPUの指標の詳細

私の評価 CPUメトリック パーセンテージだけでは説明が不十分であるため、差別化しています。ユーザー時間(user)とカーネル時間(system)を区別し、nice、iowait、softirq/irq、steal を考慮しています。高い ユーザー-の割合は、計算負荷の高いアプリケーションコードを示しています。スループットがスケーリングされる限り、これは概ね良好です。上昇する場合 システム 顕著であるため、システムコール、コンテキストスイッチ、ネットワーク作業、ファイルシステムを確認しています。高い iowait-値は、コアがメモリやディスクを待機しており、CPUがボトルネックではないことを示しています。. softirq/irq ネットワークや割り込みの負荷が高いことを示しています。これは、小さなパケットや多数の接続によって発生する場合があります。. nice 優先順位を意図的に低く設定したジョブを示しており、必要に応じてその処理を抑制することができます。 steal VM で失われたタイムスライス(外部ボトルネック)を表示します。コアごと、および時間の経過とともにこれらの割合を確認し、パターンを認識して、対策を的確に調整します。.

レイテンシ分布と SLO

私は決定を下します パーセンタイル 平均値ではなく、p95/p99 が テールレイテンシ 負荷がかかると傾く。負荷が飽和状態に近づくと、キューは非線形に成長し、p99 は爆発的に増加する(p50 は安定しているにもかかわらず)。そのため、CPU をキューの深さ、アクティブなワーカー数、および スループット. 健全な状態は、CPU の上昇、直線的なスループット、安定した p95 です。スループットが一定で p95/p99 が急上昇する場合は、キューが長すぎるか、ロック競合によってブロックされていることがよくあります。 私は、アラームを SLO(99% レイテンシやエラー率など)と関連付けて、表面的な CPU ピークを追いかけるのではなく、実際のユーザーへの影響に対応しています。バックプレッシャー、レート制限、適応型タイムアウトにより、一時的に CPU 使用率が 90% に達した場合でも、テールレイテンシは制限内に抑えられます。.

コンテナ、制限、スロットリング

コンテナの中で私は評価します cgroups-制限とその副作用。コンテナの負荷が高い場合、以下の原因が考えられます。 スロットリング 後退:厳しい CPU クォータが設定されている場合、CFS スケジューラは、ホストの空き容量があるにもかかわらず、プロセスを遅くします。シェアは相対的な優先度に影響しますが、厳格な制限には影響しません。オーバーブッキングの状況では、サービスが不十分なままになる場合があります。 スレッドの分散が不均等だと、一部のコアが過熱し、他のコアはアイドル状態になるから、cpuset の割り当て、NUMA の位置、ハイパースレッディングの影響をチェックするよ。ホスト CPU に空きがあるように見えるのにレイテンシが上がったら、スロットリング時間、コアごとの実行キューの長さ、 盗む 制限、スケジューリング、近隣の影響を理解して初めて、コンテナの CPU 使用率を正しく評価することができます。.

ガベージコレクションと実行環境

私は GC特性 実行時間にも影響します。Java では、G1、ZGC、Shenandoah は CPU プロファイルを大きく変化させる可能性があります。短くて頻繁なサイクルはレイテンシを低く抑えますが、より多くの計算時間を必要とします。Go では、 GOGC コレクションの攻撃性。値が低すぎると RAM を節約できますが、CPU を消費します。Node/V8 は、ヒープが小さすぎる場合や、短命のオブジェクトが多く発生する場合に GC のピークを発生させます。私は GC 時間、ストップ・ザ・ワールドの休止時間、ヒープサイズを測定し、オブジェクトのライフサイクルを最適化し、必要に応じてキャッシュを利用しています。CPU が上昇すると、 スループット-カーブが平坦化したら、まずGCテレメトリを確認します。ヒープや割り当て率を1回調整するだけで、コアを追加購入することなくp95を安定化できる場合が多いのです。.

サーマル、ブースト、エネルギープロファイル

忘れた 電力状態 いいえ:最新の CPU はクロックと電圧を動的に変更します。 知事 (パフォーマンス/省電力) およびターボモードは、負荷がかかったときにコアがどのようにブーストするかを決定します。冷却不良、ほこりの多いヒートシンク、または過密なラックは、以下の問題を引き起こします。 サーマルスロットリングCPU は「高負荷」の状態になり、クロック速度は低下し、アプリは動作が遅くなります。 アプリケーション側を変更する前に、ホストの温度、クロックの推移、ガバナープロファイルを確認します。バーストワークロードの場合は、パフォーマンスプロファイルを使用することを好みます。持続的な負荷がかかるジョブの場合は、ブーストウィンドウが数分後に終了しないように、冷却の予備能力を確保します。これにより、実際の計算負荷と、熱による見かけの負荷を明確に区別することができます。.

キャパシティプランニングと飽和曲線

を定義する。 作業ライン 固定上限の代わりに:p95 が急激に上昇し、スループットが直線的に成長しなくなる曲線の「屈曲点」はどこにあるのか?この点は、現実的なリクエスト、データ量、キャッシュ効果を再現する負荷テストによって特定します。生産目標は、バーストや未知の要素に備えた余裕を持たせて、この屈曲点より意図的に低く設定しています。 経験則として、p99 SLO が厳しい場合は、1 日の平均 CPU 使用率を 60~70% 以下に抑えます。バッチ処理の多いシステムでは、 応答-時間は安定している [4][5]。デプロイ後の定期的な再テストにより、徐々に進行する劣化を防ぐことができる。その際、同じワークロードを ベースライン, 、漠然とした記憶に対してではない。.

ランブック:アラームから原因特定まで15分で対応

アラームが鳴ったら、私はコンパクトな手順表に従って作業を行います。

  • 1. ユーザー効果を確認する: p95/p99、エラー率、スループット – SLO が低下した場合にのみ対応。.
  • 2. スコープを限定する: どのサービス/ホスト/ゾーンが影響を受けていますか?デプロイやトラフィックのピークと相関関係があります。.
  • 3. ホットスポットを特定する: top/htop によるコア別、実行キュー、iowait、, steal, 、スロットリング指標。.
  • 4. 原因を分類する:計算負荷(ユーザー)、カーネル/ネットワーク(システム/ソフトIRQ)、I/O 制限(IOWait)、VM 負荷(Steal)。.
  • 5. 迅速な解除: 並列処理を抑制し、バックプレッシャーを有効にし、キャッシュのウォームアップを一時停止し、制限を一時的に引き上げます。.
  • 6. 詳細な分析: pidstat/perf、プロファイリング、遅いクエリ、ロックメトリック、GCテレメトリ。.
  • 7. 決定: バグ修正/設定変更、ロールバック、またはスケーリング(垂直/水平/キュー)。.
  • 8. フォローアップ: ベースライン 更新、アラームのしきい値を調整、ランブックを補足。.

そうすることで、盲目的な拡大を避け、以下の点に焦点を当てた介入を行うことができます。 パフォーマンス 著しく改善する。.

モニタリングにおけるエラーの原因を回避する

私は次のことに注意を払っている。 測定誤差 および表示上の問題。サンプリング間隔が粗すぎると、集計方法に応じてピークが平滑化されるか、誇張されて表示されます。スレッドごとのコア使用率のないパーセンテージ値は、個々の炎ノードを隠してしまいます。 ロードアベレージは、純粋な CPU ではなく待機中のタスクを測定するものであり、I/O ロックによって上昇する可能性があります。ハイパースレッディングホスト上の CPU の「合計値」は、物理コアとは異なる挙動を示します。一見「空き」の論理コアは、実際のコアよりも追加のパフォーマンスが低くなります。最後に、ダッシュボードが平均値または最大値を表示しているかどうかを確認します。レイテンシについては、基本的に パーセンタイル, CPUについては、コアごとの内訳を含む時系列データ。.

スタックにおける実用的なチューニング手法

アプリケーションに密着して始めます:キャッシュを意図的に拡大する, バッチ処理 導入、ホットループの最適化、正規表現の簡略化、高価なシリアル化の削減。 Web スタックでは、ワーカー/スレッドを実際の並列処理(PHP-FPM、NGINX/Apache、JVM プールなど)に合わせて調整し、N+1 クエリを排除します。データベース側では、インデックス、クエリの書き換え、リードレプリカが、追加のコアよりも多くの効果をもたらすことがよくあります。分析ジョブでは、 ベクトル化 または、フルスキャンではなくストリーミングを利用してください。システムレベルでは、IRQ アフィニティ、NUMA バランス、および適切なガバナーが役立ちます。私は、1回の反復で1つの変数のみを変更し、その後、 ベースライン – そうすることで、その効果を明確に特定することができます。.

持続的な改善のためのチェックリスト

  • ビジネスファースト:ユーザー目標(SLO)に合わせて指標を設定し、「見栄えの良い」パーセンテージに合わせて設定しない。.
  • ベースラインのメンテナンス:前後測定、季節的パターン、リリースノートを関連付ける。.
  • エンドツーエンドの測定CPU、RAM、I/O、ネットワークを共同で読み取り、コア単位およびリクエスト単位の視点を組み合わせます。.
  • 制限を理解する: cgroups-クォータ、シェア、cpusets、, 盗む, 、スロットリングを可視化する。.
  • GC と実行時間: ヒープ、休止時間、割り当て率を監視し、的を絞って調整する。.
  • サーマルを視野に入れる温度、クロック速度、ガバナー – 物理学なしでは診断は不可能です。.
  • ランブックは生きている迅速な対応策を文書化し、警報を強化し、インシデント発生後にレビューを行う。.
  • プランのスケーリングまず効率性、次に垂直/水平、そして明確なトレンドがある場合に限ります。.

要約:高い稼働率を落ち着いて管理

私は高く評価します CPU-レイテンシ、スループット、エラー率という文脈で、単なるパーセンテージではなく、その値を評価します。ユーザー指標が正常であれば、ピークは障害ではなく、アクティブな作業が行われていることを示す場合が多いのです。ベースライン、スマートなしきい値、相関する指標を用いて、生産的な負荷と真のボトルネックを区別します。アウトプットが低下し、待ち時間が長くなった場合にのみ、ブレーキをかけ、的を絞った対応を行います。そうすることで、 パフォーマンス 計画可能 – そして、私は既存のリソースを最大限に活用し、性急に規模を拡大することはありません。.

現在の記事