ASPを回す.NET1.1リクエストキュー制限

2805 ワード

教務webの選択授業のメンテナンスでは、aspに直面することが多い。net1.1エラーが発生しました。クライアントからユーザー定義ページにジャンプし、サーバ側で次のエラーメッセージが表示されます。


'/'アプリケーションのサーバーエラー。


サーバが忙しい


説明:現在のWebリクエストの実行中に未処理の例外が発生しました.スタックトラッキング情報を確認して、このエラーとコードでエラーが発生したソースの詳細を確認してください.異常詳細:System.Web.HttpException:サーバビジーソースエラー: Web 。 。
スタックトラッキング:
[HttpException (0x80004005):      ]

   System.Web.HttpRuntime.RejectRequestInternal(HttpWorkerRequest wr) +146


バージョン情報:Microsoft.NET Frameworkバージョン:1.1.4322.2443;ASP.NETバージョン:1.1.4322.2460
 
その深い理を究めると、aspのためであることが分かった.Net 1.1では,各Web AppのRequest Queue Limitをデフォルトで100に設定しているが,このような大量に併発する特殊な時間を選択することは,当然防ぎ難い.修正が必要だconfigでの設定.C:WINDOWSMicrosoft.NET\Framework\v1.1.4322CONFIGで、まずmachineをバックアップします.configを再修正し、次のhttpRuntimeセクションを見つけます.
       executionTimeout="90"
       maxRequestLength="4096"
       useFullyQualifiedRedirectUrl="false"
       minFreeThreads="8"
       minLocalRequestFreeThreads="4"
       appRequestQueueLimit="100"
       enableVersionHeader="true"
/>
appRequestQueueLimitが100であることを見て、cpuの数と性能によって5007000000以上に変更することができますが、この値を簡単に大きく設定することはできません.ワークプロセスはアプリケーションごとにappRequestQueueを維持します.Queueの長さは固定されています.盲目的に設定すると、リソースの浪費と性能の低下になります.実際の使用では、パフォーマンスの悪い仮想マシンの一部が頻繁にエラーを報告しないことがわかります.しかし,その時点でCPUが比較的高い場合には,このweb全体の応答速度は非常に遅い.
もう一つの説明を見て、次の選択の前に比較して調整することができます.すなわち、iis 6は、ローカルモードではなく分離モードであるアプリケーションプールを通常有効にしています.非隔離モードではmachine.configの他の設定が有効になります.
       enable="true"
       timeout="Infinite"
       idleTimeout="Infinite"
       shutdownTimeout="0:00:05" 
       requestLimit="Infinite" 
       requestQueueLimit="5000" 
       restartQueueLimit="10"
       memoryLimit="60" 
       webGarden="false"
       cpuMask="0xffffffff"
       userName="machine"
       password="AutoGenerate"
       logLevel="Errors"
       clientConnectedCheck="0:00:05"
       comAuthenticationLevel="Connect"
       comImpersonationLevel="Impersonate"
       responseDeadlockInterval="00:03:00" 
       maxWorkerThreads="20"
       maxIoThreads="20"
/>
その中のrequestQueueLimit,maxWorkerThreads,maxIoThreadsは適切に大きく変更されており,上記の変更よりも効果的である可能性がある.
会社のウェブアプリケーションでもこの問題が発生し、最後に
appRequestQueueLimitを1000に変更
maxWorkerThreads="20"を40に変更
maxIoThreads="20"を40に変更
後に成功します.