解決'minFreeThreads' 的值必須小於 200 執行緒的執行緒集區限制(一點通系列 – MVP撰寫)

關於作者:

本文由微軟最有價值專家 MVP Johnson Gau提供。微軟十分感謝 MVP 主動地將他們的經驗與上百萬名其他技術使用者交流。MVP Johnson Gau 同時也將此篇文章放在他的部落格內,歡迎您按 此處  瀏覽 MVP Johnson Gau更多的技術文章、經驗分享與觀點。

問題的來龍去脈

當你 ASP.NET 執行時遇到『'minFreeThreads' 的值必須小於 XXX 執行緒的執行緒集區限制』,這是甚麼原因造成的呢?

問題的發生原因

經過一番調查發現是machine.config裡的minFreeThreads設定太大,我們的 CPU 為一個processo但minFreeThreads設定值為 352,這參數使用時機是在 event log裡發現 ASP.NET 有d ead 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

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

請讓我們知道

還滿意我們寫的內容嗎?無論您是遇到了以下任何一種情況:
「太好了!問題解決了。」
「問題沒有解決,我有更好的建議。」
都歡迎您利用本篇文章底部的意見調查表,寫下您寶貴的意見。也期待您的鼓勵,讓我們為您創造更多實用的技術文章。

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×