Windows インスタンスの CPU 使用率が 80% 以上に達した場合、このガイドを使用して原因を特定し、適切な解決策を適用します。
現象
Windows インスタンスの CPU 使用率が 80% 以上になっています。
原因
一般的な原因:
-
ウイルスまたはトロイの木馬の感染。
-
インスタンス上で実行されているサードパーティ製のウイルス対策ソフトウェア。
-
異常なアプリケーションまたはドライバー、高い I/O 使用率、または高い割り込み率。
解決策
ステップ 1:問題の特定
タスク マネージャーやリソース モニターなどのツールを使用して、高い CPU 使用率の原因となっているプロセスを特定します。
以下の手順では、Windows Server 2022 のリソース モニターを例として使用します。
-
VNC を介してインスタンスに接続します。レスキュー用のサーバーへの接続 (コンソール) をご参照ください。
-
デスクトップの下部で、[検索] ボタンをクリックし、[
Resource Monitor] と入力して、[OK] をクリックします。 -
[CPU] タブをクリックします。プロセスエリアで、[CPU] 列で並べ替えて、CPU 使用率の高いプロセスとそれに対応する PID を特定します。
[リソースモニター] ウィンドウで、CPU 使用率が極端に高いプロセスがないか確認します。

高い CPU リソースを消費するプロセスについて、そのプロセス ID (PID) とプログラム名を記録します。
タスクマネージャーを開きます。[詳細] タブで、リソースモニターで特定した異常なプロセス名とそれに対応する PID を見つけます。プロセス名を右クリックし、[ファイルの場所を開く] を選択して、そのプロセスが悪意のあるプログラムであるかどうかを判断します。
ステップ 2:問題の分析と解決
CPU 使用率の高いプロセスが正常なプロセスか異常なプロセスかを特定し、対応する手順に従ってください。
|
考えられる原因 |
操作 |
|
正常なプロセス |
頻繁なビジネスアクセスや、更新サービスなどの Windows サービスは、高い CPU リソースを消費する可能性があります。 説明
|
|
異常なプロセス |
悪意のあるプログラムは、svchost.exe や Tcpsvcs.exe などのシステムプロセスを装い、高い CPU 使用率を引き起こす可能性があります。異常なプロセスを手動で特定して終了してください。 説明
プロセスが悪意のあるものかどうかを特定できない場合は、オンラインでプロセス名を検索してください。プロセスを削除する前に、データをバックアップしてください。スナップショットの作成をご参照ください。
|
診断ツール
以下のツールは、Windows インスタンスの高い CPU 使用率の原因を特定するのに役立ちます。
タスク マネージャー
タスク マネージャーには、実行中のアプリケーションとその CPU 使用率が一覧表示されます。
タスク マネージャーの [プロセス] タブでは、プロセスが CPU 使用率の降順で並べ替えられています。[Antimalware Service Executable] は CPU を 26.7%、メモリを 264.2 MB 使用しており、CPU 使用率が最も高いプロセスとなっています。
パフォーマンス タブで、CPU 使用率グラフを右クリックし、を選択します。
単一のプロセスがほぼ 100% にスパイクする一方で、他のプロセスが安定している場合、原因はネットワーク I/O 処理である可能性があります。
リソース モニター
リソース モニターは、CPU 使用率のグラフィカルビューを提供し、ハンドルまたはモジュールでプロセスを検索できます。
[CPU] タブをクリックします。[プロセス] エリアで、[CPU] 列を使用して各プロセスの CPU 使用率を確認します。右側の折れ線グラフで CPU 使用率の傾向を観察できます。
CPU 使用率の折れ線グラフには、2 つの顕著な使用率のスパイクが表示されています (現在の全体的な使用率は 5%)。ランタイム環境は仮想マシン (Intel Xeon Platinum、2 仮想プロセッサ、ベース速度 2.50 GHz) です。
Process Explorer
Process Explorer は、スレッドのコールスタックを検査して問題のあるドライバーを特定する Microsoft Sysinternals のツールです。使用する前に、正しいシンボルを設定してください。Process Explorer をご参照ください。
Process Explorer のインターフェースには、実行中のすべてのプロセスがツリービューで表示されます。主な列には、[プロセス] (プロセス名)、[CPU] (CPU 使用率)、[プライベートバイト]、[ワーキングセット]、[PID]、[説明]、および [会社名] が含まれます。下部のステータスバーにはシステム全体のリソース使用状況が表示され、これには [CPU 使用率]、[コミットチャージ]、[プロセス] (合計プロセス数)、および [物理使用量] (物理メモリ使用量) が含まれます。プロセスリストで対象のプロセスを選択し、問題診断のためにそのスレッドのコールスタックをさらに調査することができます。
パフォーマンス モニター
パフォーマンス モニターは、さまざまなシステムコンポーネントからパフォーマンス カウンターを収集します。CPU リソースの消費を分析するには、次のカウンターを確認してください。
主要なパフォーマンス カウンター:
-
\Processor(_Total)\% Processor Time:プロセッサがアイドル状態でないスレッドを実行する時間の割合。\Processor(_Total)\% Processor Time=\Processor(*)\% User Time+\Processor(*)\% Privileged Time。 -
\Processor(*)\% User Time:プロセッサがアプリケーションコードを実行する時間。このカウンターを使用して、どのアプリケーションまたは関数が最も多くの CPU 時間を消費しているかを特定できます。 -
\Processor(*)\% Privileged Time: ドライバー、 I/O 要求パケット (IRP)、コンテキストスイッチなど、カーネルレベルのシステムコールに費やされる時間です。Privileged Timeが 30% を超える場合、インスタンスの I/O スループットが高い可能性があります。% Privileged Timeが高い場合は、% DPC Time、% Interrupt Time、およびContext Switches/secを確認します。-
高い
% DPC Timeと% Interrupt Timeの値は、過度な操作を実行しているデバイス、またはパフォーマンスが低いデバイスを示しています。 -
高い
Context Switchの値は、プロセスまたはスレッド間でカーネルの切り替えが頻繁に発生していることを示します。 これについては、「200万回のコンテキストスイッチの事例」や「Mark Russinovich 氏のシステムプロセスの CPU スパイクの事例」をご参照ください。高い
Context Switches/secの値は、Ready 状態のスレッドが多すぎることを示しています。これを解決するには、スレッド数を減らしてください。
-