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

Simple Application Server:Windows シンプルアプリケーションサーバーでの CPU 使用率の高さのトラブルシューティング

最終更新日:Dec 24, 2024

このトピックでは、Windows シンプルアプリケーションサーバーでの CPU 使用率の高さのトラブルシューティング方法について説明します。

問題の説明

Windows シンプルアプリケーションサーバーの CPU 使用率が 80% 以上です。

原因

Windows ECS インスタンスで CPU 使用率が高くなる原因として、次のいずれかが考えられます。

  • サーバーがウイルスに感染しているか、トロイの木馬による攻撃を受けている。

  • サードパーティ製のウイルス対策ソフトウェアがサーバー上で実行されている。

  • アプリケーションまたはドライバーで例外が発生しているか、アプリケーションの I/O 使用率または割り込み率が高い。

解決策

ステップ 1: 問題の特定

タスク マネージャーやリソース モニターなどの Microsoft ツールを使用して、完全メモリダンプをキャプチャし、CPU 使用率が高い問題を特定します。トラフィックが多いシナリオでは、Wireshark を使用して一定期間ネットワークパケットをキャプチャし、トラフィックパターンを分析できます。

このセクションでは、Windows Server 2022 のリソース モニターを使用して CPU 使用率が高い問題を特定する方法について説明します。その他の一般的に使用されるツールについては、このトピックの一般的なツールセクションを参照してください。

  1. 仮想ネットワークコンソール (VNC) を使用して、シンプルアプリケーションサーバーに接続します。詳細については、シンプルアプリケーションサーバーコンソールで 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 GiB のメモリを構成することをお勧めします。

  • vCPU が 1 つ、メモリが 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 サイトは大量のアクセスリクエストによって過負荷状態になります。セキュリティセンターコンソールにログインして、アンチDDoS しきい値を確認し、HTTP フラッド保護が有効になっているかどうかを確認できます。しきい値に達する攻撃がない場合、セキュリティセンターはトラフィックスクラビングを実行しません。トラフィックをスクラビングするには、Alibaba Cloud テクニカルサポートにお問い合わせください。

一般的なツール

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

タスク マネージャー

タスク マネージャーを使用すると、アプリケーションとプロセスのリストを表示し、CPU 使用率が高い原因となっているアプリケーションを特定できます。次の図は、タスク マネージャーウィンドウを示しています。

image

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

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

image

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

リソース モニター

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

image

Process Explorer

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

次の図は、Process Explorer ウィンドウを示しています。

image

パフォーマンス モニター

パフォーマンス モニターを使用すると、さまざまなコンポーネントのパフォーマンスカウンターを収集できます。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 TimeContext Switches/secパフォーマンスカウンターを確認します。