このトピックでは、Windows シンプルアプリケーションサーバーでの CPU 使用率の高さのトラブルシューティング方法について説明します。
問題の説明
Windows シンプルアプリケーションサーバーの CPU 使用率が 80% 以上です。
原因
Windows ECS インスタンスで CPU 使用率が高くなる原因として、次のいずれかが考えられます。
サーバーがウイルスに感染しているか、トロイの木馬による攻撃を受けている。
サードパーティ製のウイルス対策ソフトウェアがサーバー上で実行されている。
アプリケーションまたはドライバーで例外が発生しているか、アプリケーションの I/O 使用率または割り込み率が高い。
解決策
ステップ 1: 問題の特定
タスク マネージャーやリソース モニターなどの Microsoft ツールを使用して、完全メモリダンプをキャプチャし、CPU 使用率が高い問題を特定します。トラフィックが多いシナリオでは、Wireshark を使用して一定期間ネットワークパケットをキャプチャし、トラフィックパターンを分析できます。
このセクションでは、Windows Server 2022 のリソース モニターを使用して CPU 使用率が高い問題を特定する方法について説明します。その他の一般的に使用されるツールについては、このトピックの一般的なツールセクションを参照してください。
仮想ネットワークコンソール (VNC) を使用して、シンプルアプリケーションサーバーに接続します。詳細については、シンプルアプリケーションサーバーコンソールで 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 の問題が発生している可能性があります。
リソース モニター
リソース モニターを使用すると、CPU 使用率を視覚的に確認し、ハンドルとモジュールに基づいてプロセスを検索できます。
Process Explorer
Process Explorer は、Microsoft Sysinternals スイートの一部です。シンボルを構成して、アプリケーションのスレッド呼び出しスタックを確認し、潜在的な異常ドライバーを特定できます。Process Explorer はProcess Explorerからダウンロードできます。
次の図は、Process Explorer ウィンドウを示しています。
パフォーマンス モニター
パフォーマンス モニターを使用すると、さまざまなコンポーネントのパフォーマンスカウンターを収集できます。CPU リソースの消費量を監視するために複数のパフォーマンスカウンターが使用されます。
次の重要なパフォーマンスカウンターに注意してください。
\Processor(_Total)\% Processor Time
: このパフォーマンスカウンターは、プロセッサがアイドル状態ではないスレッドの実行に費やした時間の割合を示します。\Processor(_Total)\% Processor Time
=\Processor(*)\% User Time
+\Processor(*)\% Privileged Time
.\Processor(*)\% User Time
: このパフォーマンスカウンターは、プロセッサがユーザーモードでコードを実行に費やした時間の割合を示します。このパフォーマンスカウンターは、プロセッサが多くの時間を費やしているアプリケーションまたは関数を特定するのに役立ちます。\Processor(*)\% Privileged Time
: このパフォーマンスカウンターは、アプリケーションがカーネル (または特権) モードでシステムコール (ドライバー、I/O 要求パケット (IRP)、コンテキストスイッチなど) の実行に費やした時間の割合を示します。オペレーティングシステムの\Processor(*)\% Privileged Time
パフォーマンスカウンターの値が 30% を超える場合、インスタンスは I/O 要求の処理に多くの時間を費やしています。\Processor(*)\% Privileged Time
の値が大きい場合は、% DPC Time
、% Interrupt Time
、Context Switches/sec
パフォーマンスカウンターを確認します。% DPC Time
と% Interrupt Time
の値が大きい場合は、不明なデバイスが多数の操作を実行しているか、パフォーマンスを大幅に低下させる問題が発生していることを示します。詳細については、Choose Your Own Adventure: High Deferred Procedure Calls (DPCs) or High InterruptsとWindows IT Pro Magazine: Examining xPerfを参照してください。Context Switch
の値が大きい場合は、カーネルがプロセッサ上でプロセスまたはスレッドを切り替えていることを示します。詳細については、The Case of the 2 Million Context SwitchesとMark Russinovich's The Case of the System Process CPU Spikesを参照してください。Context Switches/sec
の値が大きい場合は、多数のスレッドが「準備完了」状態にあることを示します。この問題を解決するには、スレッドの数を減らします。