本記事では、Windows Elastic Compute Service (ECS) インスタンスにおける高い CPU 使用率の問題をトラブルシューティングし、解決する方法について説明します。
症状
ご利用の Windows ECS インスタンスで、以下の現象が発生することがあります。
システムの動作が遅くなり、サービスの応答時間が増加し、アプリケーションのパフォーマンスが低下します。
ECS コンソールでインスタンスを監視すると、CPU 使用率またはロードが高いことがわかります。一般的なガイドラインとして、CPU 使用率が 80% を超える場合、またはロードが 0.5 を超える場合は、高いと見なされます。
CPU 使用率またはロードが設定されたしきい値を超えたことを示すアラート通知を受信します。
考えられる原因
高い CPU 使用率は、以下の原因によって引き起こされる可能性があります。
ECS インスタンスがウイルスやトロイの木馬などのマルウェアに感染している。
ECS インスタンス上のサードパーティ製ウイルス対策ソフトウェアが、高い CPU リソースを消費している。
ECS インスタンス上のアプリケーションの例外。例えば、CC 攻撃によるビジネスプロセスのフル稼働、無限ループを含むコード、ドライバーの例外、高い I/O 使用量、または頻繁な割り込みを引き起こすアプリケーションなど。
操作手順
リソースモニターでの CPU 使用率の確認
このセクションでは、Windows Server 2022 インスタンスのリソースモニターを使用して、高い CPU 使用率の原因を診断する方法を示します。その他の一般的なツールについては、「一般的なツール」をご参照ください。
VNC を使用して ECS インスタンスに接続します。
詳細については、「VNC を使用した接続」をご参照ください。
デスクトップの下部にある [検索] アイコンをクリックし、「
Resource Monitor」と入力して [OK] をクリックします。[リソースモニター] ウィンドウで、CPU 使用率が極端に高いプロセスがないか確認します。

高い CPU リソースを消費するプロセスについて、そのプロセス ID (PID) とプログラム名を記録します。
タスクマネージャーを開きます。[詳細] タブで、リソースモニターで特定した異常なプロセス名とそれに対応する PID を見つけます。プロセス名を右クリックし、[ファイルの場所を開く] を選択して、そのプロセスが悪意のあるプログラムであるかどうかを判断します。
CPU 使用率が高い問題の解決
次の表に、高い CPU 使用率の一般的な原因とそのソリューションを示します。
症状 | 原因 | ソリューション |
異常なユーザープログラムまたはプロセスが大量の CPU リソースを継続的に消費し、高い CPU 使用率とロードを引き起こしている。 | アプリケーションが誤動作しているか、最適化が不十分なため、過剰な CPU リソースを消費している。 |
|
通常のユーザープログラムまたはプロセスが長期間にわたって大量の CPU リソースを消費し、高い CPU 使用率とロードを引き起こしている。 | ビジネスクリティカルなアプリケーションが、インスタンスが提供する以上の CPU リソースを必要としている。 | インスタンスの CPU がパフォーマンスのボトルネックになっている場合は、ビジネス要件に基づいて次のソリューションを検討してください。
|
単一のビジネスプログラムまたはプロセスで、CPU 使用率とロードが時折高くなるが、その持続時間は短く、頻度も低い。 | 暗号化、復号、高い同時実行性など、特別なビジネスシナリオによってトリガーされる高い CPU リソース消費を処理するために、ビジネスプログラムを最適化する必要がある。 | ビジネスプログラムを最適化します。 |
大量の CPU リソースを消費する単一のプログラムやプロセスはないが、全体の CPU 使用率は高く、ロードは低い。 | インスタンス上のサービスの正常な運用に必要な CPU リソースが、インスタンスの CPU 容量を超えている。 | インスタンスの CPU がボトルネックになっている場合は、インスタンスタイプをスペックアップします。 詳細については、「インスタンスタイプの変更」をご参照ください。 |
一般的なツール
このセクションでは、高い CPU 使用率の原因を特定するのに役立つ Windows ツールについて説明します。
タスクマネージャー
タスクマネージャーはアプリケーションのリストを表示し、高い CPU リソースを消費しているアプリケーションを見つけるのに役立ちます。次の図は、タスクマネージャーのウィンドウを示しています。

[パフォーマンス] タブで CPU 使用率を確認する際に、CPU 使用率のグラフを右クリックし、 を選択します。
次の図は、2 つの論理 CPU の使用率を示しています。

単一のプロセスの CPU 使用率が 100% 近くまで急上昇し、他のプロセスの使用率が低いままである場合、原因はネットワーク I/O 処理に関連している可能性があります。
リソースモニター
リソースモニターは、CPU 使用率を明確に表示し、関連するハンドルやモジュールによってプロセスを検索することができます。

Process Explorer
Process Explorer は Microsoft Sysinternals のツールです。正しいシンボルを設定することで、アプリケーションのスレッドの呼び出しスタックを検査し、問題のある可能性のあるドライバーを特定できます。Process Explorer をダウンロードするには、「Process Explorer」をご参照ください。
次の図は、Process Explorer ツールのウィンドウを示しています。

パフォーマンスモニター
パフォーマンスモニターは、さまざまなコンポーネントからパフォーマンスカウンターを収集するための Microsoft のツールです。システムの CPU リソース消費を分析するために、いくつかのカウンターを確認できます。
パフォーマンスモニターには、次の 3 つのコアパラメーターがあります。
\Processor(_Total)\% Processor Time:プロセッサが非アイドルスレッドの実行に費やす経過時間の割合です。\Processor(_Total)\% Processor Time=\Processor(*)\% User Time+\Processor(*)\% Privileged Timeとなります。\Processor(*)\% User Time:ユーザーモードでプログラムコードの実行に費やされた時間です。どのアプリケーションまたは関数呼び出しが最も多くの時間を消費しているかを判断するのに役立ちます。\Processor(*)\% Privileged Time:アプリケーションがカーネルモード (特権モード) で、ドライバー、IRP、コンテキストスイッチなどのシステムコールを実行するのに費やす時間の割合です。オペレーティングシステムがその時間の 30% 以上をPrivileged Timeで費やしている場合、インスタンスは高い I/O スループットの操作を実行している可能性があります。% Privileged Timeが高い場合は、% DPC Time、% Interrupt Time、およびContext Switches/secカウンターをさらに確認する必要があります。高い
% DPC Timeおよび% Interrupt Timeの値は、不明なデバイスが多数の操作を実行しているか、パフォーマンスが低いことを示します。高い
context switchの値は、カーネルが CPU 上でプロセスまたはスレッドを頻繁に切り替えていることを意味します。詳細については、「The Case of the 2 Million Context Switches」および「Mark Russinovich's The Case of the System Process CPU Spikes」をご参照ください。高い
Context Switches/secの値は、多数のスレッドが準備完了状態にあることを示します。この問題を解決するには、スレッドの数を減らす必要があります。
関連ドキュメント
Linux システムで高い CPU 使用率を解決するには、「Linux インスタンスにおける高い CPU 使用率またはロードの問題のトラブルシューティングと解決」をご参照ください。