DNS Server 服務因下列錯誤而停止: 無法創建此服務的線程,事件ID7023

故障現象:

 

DNS服務可能因爲程序自身的線程超過限制而無法啓動。同時,您可能在 系統事件日誌 中找到下面的錯誤信息,

DNS Server 服務因下列錯誤而停止:   無法創建此服務的線程。

QQ截圖20111107172330

 

故障原因:

 

在當前Windows 2003 R2 x64以及Windows Server 2008 或 Windows Server 2008 R2 DNS服務的代碼中 硬性的規定了 DNS 線程的最大數量爲120個 (這個是寫死在代碼中的)。但是,DNS 對 CPU 的核心數並沒有作任何的限制,因此會創建超過120個線程。

具體,DNS服務有2個功能的線程創建是根據CPU數量來決定的,一個是DNS Dynamic update功能以及 UDP I/O and dispatch 程序。 在64核的機器上,它們會創建64個Dynamic update的線程和64個UDP處理線程。因此,在64核CPU的平臺上,線程數量就會大大的超過限制的數量。 64 *2 + (64/2 or NumberOfZones ) + 6 = Max 166 > 120, 因此就會報ERROR_SERVICE_NO_THREAD 的錯誤。 在32核的平臺上, DNS 服務就工作正常,因爲它最多創建86左右的線程。32 * 2 + 16 + 6 = 86 threads.

 

解決方法:

 

我們目前確認這個是Windows DNS服務的一個bug,但是這個問題可能僅會在Windows 8中被fix. 因此,當下,我們唯一的選擇是使用少於48核CPU的平臺來提供DNS服務。48*2+18+6 = 120 (我們可以通過減少AD集成的DNS區域到18個來符合線程的限制)。當然,如果我們僅用 32核CPU,那就更沒有問題了。

當然,通過MSCONFIG 屏蔽CPU至48後,對Cluster 系統及本上沒有任何影響。  開始——運行,鍵入msconfig,掉出“系統配置”窗口,“引導”選項裏找到“高級選項卡”,更改CPU個數,一般改爲32值,就可以徹底解決此問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章