2012年6月21日

解決'minFreeThreads' 的值必須小於 200 執行緒的執行緒集區限制

當你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,略大於官方數字。


image



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
This number is automatically multiplied by the number of available CPUs

maxWorkerThreads

20

100
This number is then automatically multiplied by the number of available CPUs

minFreeThreads

8

88 * #CPUs

minLocalRequestFreeThreads

4

76 * #CPUs

minWorkerThreads

1

maxWorkerThreads /2

沒有留言:

張貼留言