web-dev-qa-db-ja.com

iisのワーカープロセスのためにCPU使用率を100%防ぐ方法

私自身のvps、vmware、クアッドコア、および4GB Ramを搭載したWindows Server 2008-R2では、ほとんどの場合CPU使用率は100%です。 Windowsタスクマネージャーを開いてリソースモニターに移動すると、100%の使用はworkerprocess.exeが原因であることがわかります。 IISに3つのWebサイトがあります。

  • どのWebサイトがその使用を引き起こしているのかを知るにはどうすればよいですか
  • CPUの使用率を80%に制限するにはどうすればよいですか?
  • DDOS攻撃の可能性がありますか?
  • DDOSを防ぐ方法はありますか?

Vsetにeset-nod32をインストールしましたが、ログに攻撃が表示されません。 IISについて検索してDDOSを防止しようとしましたが、IPアドレスを禁止する拡張機能を見つけましたが、どのIPアドレスがトラフィックを生成しているのかを見つけるにはどうすればよいですか?

WebサイトはASP.NETおよびC#で記述されています。そのWebサイトで何が起こっているのか、どのコード行がCPUの使用を引き起こしているのかをどのように判断できますか?

また、私のWebサイトの1つは管理者のデスクトップにアクセスし、いくつかのファイルを読み書きする必要があります。そのため、アプリケーションプール-> ID(プロセスモデル)をローカルシステムに変更しましたが、それがCPU使用率に関連しているかどうかはわかりません。

49
SilverLight

さて、これを理解するには長い時間がかかる場合があります。絞り込むポイントはほとんどありません:

13
Tomas Voracek

診断

問題を引き起こしているアプリプールの診断に関しては、次のことができます。

  1. サーバーを選択
  2. IIS>ワーカープロセスに移動します

Server Settings

これにより、このようなメニューが表示され、どのアプリケーションプールが正常に実行されているかを判断できます。

Worker Processes

そこから、アプリプールを再起動するだけで、10回のうち9回は、当面の問題を修正します。

処理する

何らかの物議を醸すビジネスを実行しない限り、これはおそらくDDOS攻撃ではありません。別のサーバーにアクセスできなかったり、ループやリソースの割り当てが間違っていたり、アプリプールがしばらくリサイクルされていないために、一部のコードがハングしている可能性があります。

アプリプールを手動で識別、ログイン、リサイクルすることなく、プログラムでこの問題に対処できます。アプリプールで CPUプロパティ を構成するだけです。一定時間CPUしきい値に達すると、プロセスを強制終了(および自動的に再起動)できます。

あなたの場合、80%で再起動する場合は、アプリプールを右クリックして[詳細設定]に移動し、次の構成を適用できます。

App Pool Advanced Settings

NOTEkraken101 指摘したように、異なるIIS GUIはこれを時間の経過とともに異なる方法で処理しました。構成値は常に%の1/1000ですが、GUIが全体の割合を占める場合があります。

これを your config セクションに次のように追加できます。

<applicationPools>
   <add name="DefaultAppPool">
     <cpu limit="80000" action="KillW3wp" resetInterval="00:01:00" />
   </add>
</applicationPools>

あるいは、Powershellの WebAdministration Module でスクリプトを作成することもできます:
(* web-scripting-toolsが有効になっていることを確認してください

Import-Module WebAdministration

$appPoolName = "DefaultAppPool"
$appPool = Get-Item "IIS:\AppPools\$appPoolName"
$appPool.cpu.limit = 80000
$appPool.cpu.action = "KillW3wp"
$appPool.cpu.resetInterval = "00:01:00"
$appPool | Set-Item

防止

上記の手順は、破損した問題を解決するのに役立ちますが、根本的な問題を実際に解決することはできません。

パフォーマンスモニタリングを行うためのリソースを次に示します。

86
KyleMit

PerfMonを使用してデータを収集し、DebugDiagを分析します。

同様の問題を検索中にこのリンクを見つけました。

http://www.iis.net/learn/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool

1
azed

私は最近同じ問題に直面していましたが、私にとっては有効で、メモリ消費レベルを大幅に削減する解決策を見つけました。

解決策:

まず、メモリ使用量が多いアプリケーションを見つけます。

これは、タスクマネージャーの[詳細]セクションにあります。

次。

  1. IISマネージャーを開きます。
  2. アプリケーションプールをクリックします。システムが使用している多くのアプリケーションプールがあります。
  3. タスクマネージャから、どのアプリケーションが大量のメモリ消費を引き起こしているのかがわかりました。それには複数のオプションがあり、Webアプリケーションのアプリケーション列に「1」が含まれているものを選択する必要があります。
  4. 右側のアプリケーションプールをクリックすると、[アプリケーションプールの編集]の下にAdvance settingsというオプションが表示されます。詳細設定に移動します。 5. [一般]カテゴリで、2ビットアプリケーションを有効にするTrueに設定します
  5. IISサーバーを再起動するか、タスクマネージャーのパフォーマンスセクションで消費量が減少するのを確認できます。

この解決策がうまくいく場合は、コメントを追加してください。

1
Pramil Gawande

W3wp.exeの高いCPU使用率を確認できる理由はたくさんあります。対象となる6つの一般的な原因を選択しました。

  1. ASP.NET Webアプリケーション内の高いエラー率
  2. 高いCPUを引き起こすWebトラフィックの増加
  3. アプリケーションの依存関係の問題
  4. Garbage collection
  5. ASP.NETパイプラインのどこかでブロックまたはハングしたリクエスト
  6. 最適化が必要な非効率的な.NETコード
0

必要ない場合は、Webサイトの各アプリケーションプールから「32ビットアプリケーションを有効にする」をオフにします。

これは私のローカルマシンで私のために働いた

0
Yoggesh Paatil