すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Windows ECSインスタンスでCPU使用率が高い場合はどうすればよいですか。

最終更新日:Dec 13, 2024

このトピックでは、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使用率の高い問題を特定する方法について説明します。 他の一般的に使用されるツールについては、このトピックの一般的なツールのセクションを参照してください。

  1. VNC (Virtual Network Computing) を使用してECSインスタンスに接続します。

    詳細については、「VNCを使用したインスタンスへの接続」をご参照ください。

  2. デスクトップの下部にある [スタート] アイコンをクリックし、[実行] を選択します。

  3. [実行] ダイアログボックスで、perfmon -resと入力し、[OK] をクリックします。

    image

  4. [リソースモニター] ウィンドウで、CPU使用率が高いプロセスを確認します。

    image

  5. CPUリソースを大量に消費するプロセスのIDと名前を確認します。

  6. [タスクマネージャ] 画面を開き、[詳細] タブをクリックして, [リソースモニタ] 画面で取得したプロセス名とプロセスID (PID) を基に, CPU使用率の高いプロセスを検索します。 高いCPU使用率に寄与する各プロセスの名前を右クリックし、[ファイルの場所を開く] を選択して、プロセスが悪意のあるプロセスであるかどうかを確認します。

ステップ2: 問題の分析と解決

CPU使用率が高いプロセスが正常かどうかを確認し、問題を解決するための操作を実行します。 プロセスが正常か異常かに基づいて実行する必要がある操作を次の表に示します。

考えられる原因

操作

通常のプロセス

頻繁にアクセスされるサービスや、更新サービスなどのWindowsインボックスサービスにより、ネットワークトラフィックやCPU負荷が高くなる場合があります。

説明
  • Windows Server 2008またはWindows Server 2012インスタンスの場合、少なくとも2 GBのメモリを構成することをお勧めします。

  • 1つのvCPUと1 GiBのメモリを持つWindows Server 2012インスタンスでは、Windows Updateサービスが自動的に新しいWindows更新プログラムのチェック、ダウンロード、およびインストールを行うため、CPU使用率が急上昇します。 これは通常のシナリオです。

  • Windows Updateの操作がバックグラウンドで実行されているかどうかを確認します。

  • ウイルススキャンを実行するには、ウイルス対策ソフトウェアをインスタンスにインストールすることを推奨します。 ウイルス対策ソフトウェアがインスタンスにインストールされている場合は、インスタンスのCPU使用率が高いときにウイルス対策ソフトウェアがバックグラウンドで実行されているかどうかを確認します。 可能であれば、ウイルス対策ソフトウェアを最新バージョンにアップグレードするか、ウイルス対策ソフトウェアをアンインストールしてください。

  • インスタンスでホストされているアプリケーションが、多数のディスク読み取り /書き込み操作を伴うか、多数のネットワークリクエストを開始するか、または計算負荷の高いワークロードを生成するかどうかを確認します。 リソースのボトルネックを解決するために、vCPUまたはメモリが多いインスタンスタイプにアップグレードします。 詳細については、「インスタンス設定の変更の概要」をご参照ください。

  • 現在のインスタンスタイプで高い設定が提供されている場合、インスタンスタイプのアップグレードではCPU使用率が高いという問題が解決されない可能性があります。 この場合、アプリケーションを他のインスタンスに移動して、Windowsインスタンスのリソースを解放し、アプリケーションを最適化します。

    たとえば、データベースをApsaraDB RDSインスタンスに移行できます。 アプリケーションを最適化するために、接続数、キャッシュ設定、web設定、データベースの呼び出しに使用されるパラメーターなどのアプリケーション構成を変更できます。

異常なプロセス

高いCPU使用率は、ウイルスまたはトロイの木馬によって引き起こされる可能性があります。 悪意のあるサードパーティ製アプリケーションは、オペレーティングシステムのsvchost.exeまたはtcpsvcs.exeを悪用して、自分自身を偽装し、過剰なCPUリソースを消費する可能性があります。 異常なプロセスをチェックして終了する必要があります。

説明

プロセスがウイルスかトロイの木馬かを判断できない場合は、インターネットでプロセス名を検索することをお勧めします。 異常なプロセスを終了する前に、インスタンスのスナップショットを作成してインスタンスデータをバックアップすることを推奨します。 詳細については、「ディスクのスナップショットの作成」をご参照ください。

  • 商用版のウイルス対策ソフトウェアまたは無料のスキャンツールであるMicrosoft Safety Scannerを使用して、セーフモードでウイルスをスキャンして削除します。

  • Windows Updateを実行して、最新のMicrosoftセキュリティパッチをインストールします。

  • MSConfigを使用して、Windowsのインボックスドライバーを除くすべてのドライバーを無効にします。 詳細については、「Windowsでクリーンブートを実行する方法」をご参照ください。

  • サーバーまたはWebサイトがDDoS攻撃またはHTTPフラッド攻撃を受けた場合、サーバーまたはWebサイトは多数のアクセス要求によって過負荷になります。 Security Centerコンソールにログインして、DDoS対策しきい値を確認し、HTTPフラッド保護が有効になっているかどうかを確認できます。 攻撃がしきい値に達しない場合、Security Centerはトラフィックのスクラブを実行しません。 Alibaba Cloudテクニカルサポートにお問い合わせください。

一般的なツール

このセクションでは、CPU使用率の高い問題を特定するために使用される一般的なWindowsインボックスツールについて説明します。

タスクマネージャ

タスクマネージャを使用すると、アプリケーションとプロセスのリストを表示し、CPU使用率が高いアプリケーションを特定できます。 タスクマネージャ画面を次の図に示します。

image

[パフォーマンス] タブでCPU使用率を確認したら、CPUグラフを右クリックし、[グラフを変更] > [論理プロセッサ] を選択します。

次の図に示すように、2つの論理プロセッサの使用率を示す2つのグラフが表示されます。

image

プロセスのCPU使用率がほぼ100% に急上昇し、他のプロセスのCPU使用率がわずかに変化した場合、ネットワークI/Oの問題が発生する可能性があります。

リソースモニター

Resource Monitorを使用すると、CPU使用率を視覚的に確認し、ハンドルとモジュールに基づいてプロセスを検索できます。

image

プロセスエクスプローラー

Process Explorerは、Microsoft Sysinternalsスイートの一部です。 シンボルを設定して、アプリケーションのスレッド呼び出しスタックを確認し、潜在的な異常なドライバーを識別できます。 Process ExplorerからProcess Explorerをダウンロードできます。

[プロセスエクスプローラー] ウィンドウを次の図に示します。

image

パフォーマンスモニター

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パフォーマンスカウンターを確認します。