當你ASP.NET執行時遇到『'minFreeThreads' 的值必須小於 XXX 執行緒的執行緒集區限制』,這是甚麼原因造成的呢?
[發生原因]
經過一番調查發現是machine.config裡的minFreeThreads設太大,設定值為352,這參數使用時機是在event log裡發現ASP.NET有dead lock錯誤時進行的效能調校用,可參考http://support.microsoft.com/kb/821268/zh-tw 。
[解決方式]
那我們這裡為何會出錯呢?是因為機器只有一個processor(這裡的processor以邏輯計算),也就是你在工作管理員上看到幾核心,像我們遇到的情況就是1 個processor,如下所示。 經過實驗結果minFreeThreads單核最大必須<=100,雙核<=200,略大於官方數字。
那minFreeThreads應該設定多少?根據微軟官方數據的公式為:88 * N,N是processor數,我們只有一個 Processor因此minFreeThreads應是88。
底下是我整理的machine.config調校數據:
Configuration setting | Default value (.NET Framework 1.1) | Recommended value |
maxconnection | 2 | 12 * #CPUs |
maxIoThreads | 20 | 100 |
maxWorkerThreads | 20 | 100 |
minFreeThreads | 8 | 88 * #CPUs |
minLocalRequestFreeThreads | 4 | 76 * #CPUs |
minWorkerThreads | 1 | maxWorkerThreads /2 |
沒有留言:
張貼留言