3

一連の Web サービスを備えた ASP.NET アプリケーションと、これらの Web サービスを呼び出す WinForms アプリケーションがあります。

w3wp.exe (asmx 呼び出しを処理する) は、本当に「難しい」仕事 (圧縮、xml 解析など) を行う特別なプロセスを実行します。別のプロセスで実行する必要がある理由と、このコードを w3wp.exe 内で実行しない理由については、長い話になりますが、ここでは問題ではありません。そのようなものでなければなりません。

複数の要求が多数のユーザーから同時に送信された場合、そのようなプロセスが 30 ~ 40 あり、CPU を消費します。IIS 自体の CPU リソースがほとんど残っていないほど消費します。

問題は次のとおりです。次の HTTP 要求がこの IIS に送信されると、IIS はそれらを処理できません。サーバーが「爆撃」されているため、w3wp.exe に渡すことさえできません。 その結果、ピーク時に 30 人のユーザーがクエリを実行し、31 番目のユーザーが WinForms クライアントで「タイムアウトの期限が切れました」という WebException を取得しています。

IIS を微調整する方法を説明する記事をインターネットでたくさん見つけましたが、他のプロセスやアプリケーションが同じマシンで実行できるという事実を誰も考慮していません。また、IIS の優先順位を高くするために何をすべきかを誰も教えてくれません。

したがって、次の質問です。IIS がデフォルトで apppool (svchost.exe) と w3wp.exe をより高い優先度で開始する必要があることを "説明" する方法はありますか?

4

1 に答える 1

0

Windows Server 2008 r2 でこの問題に直面しました。私は、CPUを大量に肥大化させ、IISとSQL Serverに何も残さなかったWindowsサービス(並列処理を使用)を持っていました。

そこで、Windows サービスにプロセッサ アフィニティを設定して、特定のプロセッサのみを消費するようにしました。タスク マネージャー -> 右クリック プロセス -> アフィニティの設定 に入ります

これにより、他のプロセッサを SQL と IIS に自由に使用できるようになりました。

ある程度、現在限られたプロセッサ セットで動作している Windows サービスの生産性が低下しましたが、それほど問題ではありませんでした。

于 2016-12-27T11:26:27.083 に答える