このトピックでは、Windows Elastic Compute Service (ECS) インスタンスの高CPU使用率の問題を解決する方法について説明します。
問題の説明
Windows ECSインスタンスのCPU使用率が80% 以上です。
発生原因
次のいずれかの理由により、Windows ECSインスタンスのCPU使用率が高くなる場合があります。
ECSインスタンスがウイルスに感染しているか、トロイの木馬に攻撃されています。
サードパーティのウイルス対策ソフトウェアがECSインスタンスで実行されます。
ECSインスタンス上のアプリケーションまたはドライバーで例外が発生した場合、またはECSインスタンス上のアプリケーションのI/O使用率または割り込み率が高い場合。
解決策
ステップ1: 問題を特定する
タスクマネージャーやリソースモニターなどのMicrosoftツールを使用して、フルメモリダンプをキャプチャし、CPU使用率の高い問題を特定します。 トラフィックの多いシナリオでは、Wiresharkを使用して一定期間のネットワークパケットをキャプチャし、トラフィックパターンを分析できます。
このセクションでは、Windows Server 2022のリソースモニターを使用してCPU使用率の高い問題を特定する方法について説明します。 他の一般的に使用されるツールについては、このトピックの一般的なツールのセクションを参照してください。
VNC (Virtual Network Computing) を使用してECSインスタンスに接続します。
詳細については、「VNCを使用したインスタンスへの接続」をご参照ください。
デスクトップの下部にある [スタート] アイコンをクリックし、[実行] を選択します。
[実行] ダイアログボックスで、
perfmon -res
と入力し、[OK] をクリックします。[リソースモニター] ウィンドウで、CPU使用率が高いプロセスを確認します。
CPUリソースを大量に消費するプロセスのIDと名前を確認します。
[タスクマネージャ] 画面を開き、[詳細] タブをクリックして, [リソースモニタ] 画面で取得したプロセス名とプロセスID (PID) を基に, CPU使用率の高いプロセスを検索します。 高いCPU使用率に寄与する各プロセスの名前を右クリックし、[ファイルの場所を開く] を選択して、プロセスが悪意のあるプロセスであるかどうかを確認します。
ステップ2: 問題の分析と解決
CPU使用率が高いプロセスが正常かどうかを確認し、問題を解決するための操作を実行します。 プロセスが正常か異常かに基づいて実行する必要がある操作を次の表に示します。
考えられる原因 | 操作 |
通常のプロセス | 頻繁にアクセスされるサービスや、更新サービスなどのWindowsインボックスサービスにより、ネットワークトラフィックやCPU負荷が高くなる場合があります。 説明
|
異常なプロセス | 高いCPU使用率は、ウイルスまたはトロイの木馬によって引き起こされる可能性があります。 悪意のあるサードパーティ製アプリケーションは、オペレーティングシステムのsvchost.exeまたはtcpsvcs.exeを悪用して、自分自身を偽装し、過剰なCPUリソースを消費する可能性があります。 異常なプロセスをチェックして終了する必要があります。 説明 プロセスがウイルスかトロイの木馬かを判断できない場合は、インターネットでプロセス名を検索することをお勧めします。 異常なプロセスを終了する前に、インスタンスのスナップショットを作成してインスタンスデータをバックアップすることを推奨します。 詳細については、「ディスクのスナップショットの作成」をご参照ください。
|
一般的なツール
このセクションでは、CPU使用率の高い問題を特定するために使用される一般的なWindowsインボックスツールについて説明します。
タスクマネージャ
タスクマネージャを使用すると、アプリケーションとプロセスのリストを表示し、CPU使用率が高いアプリケーションを特定できます。 タスクマネージャ画面を次の図に示します。
[パフォーマンス] タブでCPU使用率を確認したら、CPUグラフを右クリックし、
を選択します。次の図に示すように、2つの論理プロセッサの使用率を示す2つのグラフが表示されます。
プロセスのCPU使用率がほぼ100% に急上昇し、他のプロセスのCPU使用率がわずかに変化した場合、ネットワークI/Oの問題が発生する可能性があります。
リソースモニター
Resource Monitorを使用すると、CPU使用率を視覚的に確認し、ハンドルとモジュールに基づいてプロセスを検索できます。
プロセスエクスプローラー
Process Explorerは、Microsoft Sysinternalsスイートの一部です。 シンボルを設定して、アプリケーションのスレッド呼び出しスタックを確認し、潜在的な異常なドライバーを識別できます。 Process ExplorerからProcess Explorerをダウンロードできます。
[プロセスエクスプローラー] ウィンドウを次の図に示します。
パフォーマンスモニター
Performance Monitorを使用すると、さまざまなコンポーネントのパフォーマンスカウンターを収集できます。 複数のカウンターを使用して、CPUリソースの消費を監視します。
次の重要なパフォーマンスカウンターに注意してください。
\Processor(_Total)\% Processor Time
: このパフォーマンスカウンターは、プロセッサが非アイドルスレッドの実行に費やす時間の割合を示します。\プロセッサ (_合計)\% プロセッサ時間
=\プロセッサ (*)\% ユーザー時間
+\プロセッサ (*)\% 特権時間
\Processor(*)\% User Time
: このパフォーマンスカウンタは、プロセッサがユーザーモードでコードを実行するのに費やす時間の割合を示します。 パフォーマンスカウンターは、プロセッサがかなりの時間を費やしているアプリケーションや関数を特定するのに役立ちます。\Processor(*)\% Privileged Time
: このパフォーマンスカウンタは、ドライバ、I/Oリクエストパケット (IRP) 、コンテキストスイッチングなど、アプリケーションがカーネル (または特権) モードでシステムコールを実行するのに費やす時間の割合を示します。 オペレーティングシステムの\Processor(*)\% Privileged Time
パフォーマンスカウンターの値が30% を超えると、インスタンスはI/Oリクエストの処理にかなりの時間を費やします。\Processor(*)\% Privileged Time
の値が大きい場合は、% DPC Time
、% Interrupt Time
、およびContext Switch /sec
パフォーマンスカウンターを確認します。% DPC時間
と% 割り込み時間
の値が大きい場合は、未知のデバイスが多数の操作を実行するか、パフォーマンスが大幅に低下する問題が発生することを示します。 詳細については、「自分のアドベンチャー: 高遅延プロシージャコール (DPC) または高割り込み」および「Windows IT Pro Magazine: Examining xPerf」をご参照ください。Context Switch
値が大きい場合は、カーネルがプロセッサ上のプロセスまたはスレッドを切り替えることを示します。 詳細については、「2百万のコンテキストスイッチの場合」および「Mark RussinovichのシステムプロセスCPUスパイクの場合」をご参照ください。Context Switch /sec
の値が大きい場合は、多数のスレッドがReady状態にあることを示します。 この問題を解決するには、スレッドの数を減らします。