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に変更
後に成功します.
[HttpException (0x80004005): ]
System.Web.HttpRuntime.RejectRequestInternal(HttpWorkerRequest wr) +146
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
appRequestQueueLimitが100であることを見て、cpuの数と性能によって5007000000以上に変更することができますが、この値を簡単に大きく設定することはできません.ワークプロセスはアプリケーションごとにappRequestQueueを維持します.Queueの長さは固定されています.盲目的に設定すると、リソースの浪費と性能の低下になります.実際の使用では、パフォーマンスの悪い仮想マシンの一部が頻繁にエラーを報告しないことがわかります.しかし,その時点でCPUが比較的高い場合には,このweb全体の応答速度は非常に遅い.
もう一つの説明を見て、次の選択の前に比較して調整することができます.すなわち、iis 6は、ローカルモードではなく分離モードであるアプリケーションプールを通常有効にしています.非隔離モードではmachine.configの他の設定が有効になります.
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に変更
後に成功します.