iisのワーカープロセスが原因でCPU使用率が100%になるのを防ぐ方法

Windows Server 2008-R2で、自分のvps、vmware、クアッドコア、4GBラムを使用しているときに、CPU使用率がほとんど100%です。Windowsのタスクマネージャを開いてリソースモニタを見ると、100%の使用率は「workerprocess.exe」によるものだとわかります。 私のIISには3つのウェブサイトがあります。

  • どのウェブサイトがその使用量の原因となっているのか、どのようにして見つけることができますか?
  • どのようにしてCPUの使用率を80%に制限することができますか?
  • DDOS攻撃の可能性はありますか?
  • DDOSを防ぐ方法はありますか?

vpsにeset-nod32をインストールしたのですが、ログに攻撃が表示されません。 IISとDDOS対策について検索してみたところ、IPアドレスを禁止する拡張機能を見つけましたが、どのIPアドレスがトラフィックを発生させているのかをどうやって見つけることができますか?

WebサイトはASP.NETC#で書かれています。Webサイトで何が起こっているのか、どのコードがCPU使用率の原因になっているのかを判断するにはどうしたらよいでしょうか?

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

質問へのコメント (5)

診断。

App Poolが問題を引き起こしているものを診断するという点では、次のことができます。

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

サーバー設定。! これにより、このようなメニューが表示され、実行中のアプリプールが正常に実行されているかどうかを判断できます。

ワーカープロセス。! そこからアプリプールを再起動するだけで、10回のうち9回で問題が発生します。

治療。

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

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

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

アプリプールの詳細設定。! 注意:kraken101が指摘したように、異なるIIS GUIはこれを時間の経過とともに異なる方法で処理してきました。 構成値は常に1/1000%ですが、GUIが全体の割合を占める場合があります。

これを次のように[構成] [iis構成]セクションに追加できます。





または、次のようにPowershellのWebAdministration Moduleでスクリプト化することもできます。 (* web-scripting-toolsが有効になっていることを確認してください)< / sup>。

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

防止。

上記の手順は、壊れた場合にいくつかのことを修正するのに役立ちますが、根本的な問題は実際には解決しません。

パフォーマンス監視を行うためのリソースをいくつか示します。

解説 (6)
ソリューション

これを解決するには、長い時間がかかります。絞り込みのポイントはいくつかあります。

解説 (5)

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

1。 ASP.NET Webアプリケーション内の高いエラー率。 2。 Webトラフィックの増加により、高いCPUが発生します。 3。 アプリケーションの依存関係の問題。 4。 ごみ収集。 5。 ASP.NETパイプラインのどこかでブロックまたはハングされるリクエスト。 6。 最適化する必要がある非効率的な.NETコード。

解説 (0)

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

同様の問題を検索しているときにこのリンクを見つけました。

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

解説 (0)

私は最近同じ問題に直面していて、私のために働き、記憶消費レベルを大幅に削減する解決策を見つけました。

ソリューション:

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

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

次。

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

このソリューションが機能する場合は、コメントを追加して、私が知ることができるようにしてください。

解説 (3)

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

これは私の地元のマシンでうまくいきました。

解説 (0)

procmon]1を使って問題を定義します。

解説 (0)

私自身も最近この問題に直面しましたが、どのAppPoolが問題を引き起こしているかを特定した後、問題を解決する唯一の方法は、そのAppPoolを完全に削除し、サイトが使用するために新しいAppPoolを作成することでした。

解説 (0)