2

.net 2.0 aspx アプリ / IIS6 が w3wp.exe プロセス アプリ プールに大量のスレッドを作成します。

アプリは、次の設定で独自のアプリ プールに分離されています。

リサイクル

ワーカー プロセスのリサイクル (分単位): 870 ワーカー プロセスのリサイクル (リクエスト数): (チェックなし) 次の時間にワーカー プロセスをリサイクル: 00:00 最大仮想メモリ: (チェックなし) 最大使用メモリ (MB): 1000mb (1ギガバイト)

パフォーマンス

アイドル状態になった後にワーカー プロセスをシャットダウンする (分単位の時間): 20 カーネル要求キューを制限する (要求数): 1000 CPU 監視を有効にする (%): 85 CPU 使用率を更新する (分単位): 5 CPU 使用率が最大 CPU 使用量: NO ACTION (セッションを保持) ワーカー プロセスの最大数: 1

健康

ping を有効にする (チェックあり) ping ワーカー プロセスごと (秒): 30 ラピッド フェイル プロテクションを有効にする (チェックあり) 失敗: 5 期間 (分単位):5 開始時間制限 - ワーカー プロセスは (秒) 以内に起動する必要があります: 90 シャットダウン時間制限 -ワーカー プロセスは (秒) 以内にシャットダウンする必要があります: 90

通常の実行では、w3wp.exe プロセスが 300MB の RAM と 50 台のスレッドを使用します。私の問題が発生すると、スレッド数がゆっくりと 10,000 に増加し、スレッドが 0 に戻る前に RAM が 1GB になります。w3wp.exe プロセスはシャットダウンされず、ユーザーは (重要なことに) ログアウトされません。再度ログインする必要があります。ただし、標準の 50 のスレッドは、10,000 のルージュ スレッドの中で殺されます。

1) 専門家は、上記のアプリ プールの設定について賛否両論を提供できますか?

2)「最大使用メモリ」設定は、この問題を自動的に処理するためのトリックを行っているようです(スレッドを強制終了し、セッションを維持しますが、誰かが理由を説明できますか?...スレッドはセッションとは無関係だと思います) .

アプリはサーバー ベースのセッションを使用しますが、認証用にローカル Cookie を保存します。

4

1 に答える 1

2

スレッド

10kスレッドはめちゃくちゃ高く、スレッドは実際の作業よりもプロセッサのオンとオフに多くの時間を費やしています。別名スラッシング。

編集:ここでは、それが.NETWebアプリケーションであると想定しています。

アプリケーションはThreadPoolまたはBackgroundWorkersを使用していますか?10kスレッドに到達するには、IISの標準スレッド側近(プロセッサあたり約4)以外のメカニズムを使用する必要があるようです。

メモリー

各スレッドには、作業に使用するメモリに加えて、追跡するメモリが必要です。そのため、スレッドの量が非常に多いため、おそらく1Gの制限に達していることになります。

セッション(私は生き残ります!)

アプリケーションは、おそらくセッション状態を永続ストレージまたはセッション状態サービスに格納するように設定されています。この場合、ユーザーの状態情報を失うことなく、ワーカープロセスを安全にリサイクルできます。セッション状態が(Web.configで)In-Procとして構成されている場合、ワーカープロセスがリサイクルされると、セッション状態は失われます。

作業工程のリサイクル

もう1つ注意すべき点は、ワーカープロセスが停止する前に、別のワーカープロセスがセットアップされ、その代わりに開始されます。このプロセスのどこかで、スレッドが0のw3wp.exeプロセス(古いまたは新しい)が表示されている可能性があります。

BackgroundWorkersはウサギのようなものです

スレッドが1秒(実際には1/2秒)より長く続く作業を実行している場合は、BackgroundWorkersを使用しないでください。ThreadPoolの最大スレッドを変更しない限り(これは.NET内のより深い機能を台無しにする可能性があるため、お勧めしません)、同時に実行できるBackgroundWorkerの数に厳しい(十分な)制限はありません。その場合は、生産者/消費者キューモデルを使用することをお勧めします。

このサイトをチェックしてください。これは、多くのモデルと例を使用した並行プログラミングに関するすばらしいリソースです。

于 2009-11-19T16:34:49.543 に答える