文章編號 | : | 821268 |
最後修改 | : | 2005年8月29日 |
修訂 | : | 6.0 |
本頁
症狀
<script type="text/javascript">loadTOCNode(1, 'symptoms');</script>• | 如果您使用 MicrosoftInternet 信息服務 (IIS) 5.0, 會應用程序事件日誌中您收到以下消息:
Event Type: Error Event Source: ASP.NET 1.0.3705.0 Event Category: None Event ID: 1003 Date: 5/4/2003 Time: 6:18:23 PM User: N/A Computer: <ComputerName> Description: aspnet_wp.exe (PID: <xxx>) was recycled because it was suspected to be in a deadlocked state. It did not send any responses for pending requests in the last 180 seconds.
|
• | 如果您使用 IIS 6.0, 會應用程序事件日誌中您收到以下消息:
Event Type: Warning Event Source: W3SVC-WP Event Category: None Event ID: 2262 Date: 5/4/2003 Time: 1:02:33 PM User: N/A Computer: <ComputerName> Description: ISAPI 'C:/Windows/Microsoft.net/Framework/v.1.1.4322/aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.
|
• | 如果您使用 IIS 6.0, 會系統事件日誌中您收到以下消息:
Event Type: Warning Event Source: W3SVC Event Category: None Event ID: 1013 Date: 5/4/2003 Time: 1:03:47 PM User: N/A Computer: <ComputerName> Description: A process serving application pool 'DefaultAppPool' exceeded time limits during shut down. The process id was '<xxxx>'.
|
原因
<script type="text/javascript">loadTOCNode(1, 'cause');</script>對 Web 服務調用通常, 使用一個輔助線程來執行代碼發送請求和一個完成端口線程以從 Web 服務接收回調。 但是, 如果請求重定向或需要驗證, 調用可能使用多達兩輔助和兩完成端口線程。 同時發生多個 Web 服務調用時, 因此您可消耗託管 ThreadPool。
例如, 假設 ThreadPool 僅限於 maxworkerthreads, 10, 並且當前執行所有 10 工作線程正在等待回調來執行代碼。 由於工作項排隊以 ThreadPool 阻塞線程可用之前可從不執行回調。
其他潛在源爭奪是 maxconnection 參數, System.Net 命名空間用於限制的連接數。 此限制通常, 按預期工作。 但是, 如果許多應用程序嘗試使許多請求到單個 IP 地址同時, 線程可能需要等待一個可用連接。
解決方案
<script type="text/javascript">loadTOCNode(1, 'resolution');</script>• | maxWorkerThreads |
• | minWorkerThreads |
• | maxIoThreads |
• | minFreeThreads |
• | minLocalRequestFreeThreads |
• | maxconnection |
• | executionTimeout |
• | 限制同時到大約 12 每 CPU 執行, ASP.NET 請求的數量。 |
• | 允許 Web 服務回調用於 ThreadPool 中自由線程。 |
• | 選擇一個適當值對於 maxconnections 參數。 根據您選擇的 IP 地址和 AppDomains 使用數。 |
maxWorkerThreads 和 maxIoThreads
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 使用以下兩配置設置來限制輔助線程和完成線程所使用的最大數量:
<processModel maxWorkerThreads="20" maxIoThreads="20">
maxWorkerThreads 參數和 maxIoThreads 參數是可隱式乘以的 CPU 數。 例如, 如果有兩個處理器, 的工作線程數是:
minFreeThreads 和 minLocalRequestFreeThreads
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 還包含以下配置設置決定多少輔助線程和完成端口線程必須可用於啓動遠程請求或本地請求:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
如果還有, 不夠線程請求是排隊直到足夠線程可以自由地發出請求。 ASP.NET, 因此不在同一時間執行超過下列數量的請求:
minWorkerThreads
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> 存爲 ASP.NET 1.0 Service Pack 3 以及 ASP.NET 1.1, ASP.NET 還包含以下配置設置決定了多少工作線程可能可立即向遠程請求服務。
<processModel minWorkerThreads="1">
以多快速度比從 CLR 默認優化 " 線程 " 功能創建輔助線程創建由該設置控制線程。 此設置允許 ASP.NET 對服務請求, 可能是突然填充 ASP.NET 請求隊列由於以 slow-down 在後端服務器, 突然暴發來自客戶端, 或類似的請求會導致突然高度以多種請求隊列中。 對於 minWorkerThreads 參數默認值爲 1。 我們建議, 您將 < minWorkerThreads 參數值設置爲以下值。
minWorkerThreads = maxWorkerThreads / 2
默認情況下, minWorkerThreads 參數是 Web.config 文件或 Machine.config 文件中不存在。 此設置隱性乘以的 CPU 數。
maxconnection
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> maxconnection 參數確定如何多連接可對特定 IP 地址。 參數顯示如下:
<connectionManagement>
<add address="*" maxconnection="2">
<add address="65.53.32.230" maxconnection="12">
</connectionManagement>
對於本文中前面討論參數設置爲所有在進程級。 但是, maxconnection 參數設置適用於 AppDomain 級別。 默認, 因爲此設置適用於 AppDomain 級別, 最多兩個連接創建到特定 IP 地址從每個 AppDomain 過程中您。
executionTimeout
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 使用以下配置設置來限制請求執行時間:
<httpRuntime executionTimeout="90"/>
也可以通過 Server.ScriptTimeout 屬性設置此限制。注意 如果您增加 executionTimeout 參數, 值可能還需要修改 processModel responseDeadlockInterval 參數設置。
建議
<script type="text/javascript">loadTOCNode(2, 'resolution');</script> 本節中推薦設置對所有應用程序可能無法工作。 但是, 以下附加信息可以幫助您進行適當調整。如果進行一個 Web 服務調用到單個 IP 地址從每個 ASPX 頁面, Microsoft 建議您使用下列配置設置:
• | 設置到 100 maxWorkerThreads 參數和 maxIoThreads 參數的值。 |
• | 設置到 12 maxconnection 參數的值 * N N (其中 N 是的, 您有 CPU 數)。 |
• | minFreeThreads 參數的值設置爲 88 * N N , minLocalRequestFreeThreads 參數來 76 N N *。 |
• | 設置到 50 minWorkerThreads 的值。 請記住, minWorkerThreads 處於默認配置文件。 必須添加它。 |
注意使用此配置時, 因爲您可以同時執行最多 12 ASP.NET 請求每 CPU = 12 100 - 88。 因此, 至少 88 N 輔助線程和 88 N 完成端口線程可對其他使用 (例如用於 Web 服務回調) * *。
例如, 有服務器與四處理器和 hyperthreading 啓用。 對於本文中提及配置設置基於這些公式, 將使用下列值。
<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50">
<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608">
<connectionManagement>
<add address="[ProvideIPHere]" maxconnection="96"/>
</connectionManagement>
還, 使用此配置, 時 12 連接可用每個 CPU 按 IP 地址對於每個 AppDomain。 因此, 在下列情況下, 幾乎爭奪當請求正在等待連接, 並且不耗盡 ThreadPool:
• | Web 承載一個應用程序 (AppDomain)。 |
• | 每對 ASPX 頁面請求發出一個 Web 服務請求。 |
• | 所有請求是到同一 IP 地址。 |
• | 請求是到多個 IP 地址。 |
• | 請求是定向 (302 狀態代碼)。 |
• | 請求需要身份驗證。 |
• | 從多 AppDomains 進行請求。 |
狀態
<script type="text/javascript">loadTOCNode(1, 'status');</script>參考
<script type="text/javascript">loadTOCNode(1, 'references');</script>
關鍵字: |
kbprb KB821268 KbMtzh kbmt |