Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1150942
  • 博文数量: 116
  • 博客积分: 2889
  • 博客等级: 少校
  • 技术积分: 1337
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 09:35
个人简介

IT运维工程师、律师 IT相关技术支持、法律咨询

文章分类

全部博文(116)

文章存档

2015年(1)

2014年(2)

2013年(5)

2012年(12)

2011年(4)

2010年(12)

2009年(21)

2008年(37)

2007年(22)

分类: WINDOWS

2013-04-17 09:43:13

DNS Server 服务因下列错误而停止: 无法创建此服务的线程
   

故障现象:


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值,就可以彻底解决此问题。

阅读(5323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~