题 2008 R2终端服务器:“系统资源不足,无法完成所请求的服务”


我正在使用在vSphere环境中配置的不健康的Windows 2008 R2终端服务器。它目前有4个vCPU和32GB RAM。 没有过度承诺。

最近几个月(~70),该服务器上的并发用户数大幅增加,可能超过建议的水平。由于用户在此系统上使用的应用程序,将其拆分为多个服务器将是一个超出此问题范围的挑战。

但是,在本周的某些时间点(现在几乎每天),新用户登录会产生以下错误: 事件ID 1500

Windows无法登录,因为无法加载您的个人资料。校验   您已连接到网络,并且您的网络是   运作正常。

详细信息 - 没有足够的系统资源来完成   要求的服务。

这将保留,直到某些用户注销,手动断开会话或完全重新启动系统。

我想知道:

  • 此错误消息指的是哪些资源?究竟有什么限制?
  • 是否有操作系统级可调参数或配置可以帮助解决这个问题?
  • 除了此错误消息的频率增加外,用户对性能感到满意。这里有其他的东西吗?
  • 终端服务器可以容纳的用户数量是否存在绝对限制?我看到终端服务器的某些调优指南中描述了150多个用户。

enter image description here

enter image description here


19
2018-01-17 18:27




是 这是你的问题?。我不能说我在Windows Server 2008上遇到过这种情况 R2 服务器,但我在2003年和2008年遇到了很多,所以它可能仍然适用。 - HopelessN00b
@ HopelessN00b 事件编号1508 通常引用的不会出现在此环境中。我的大部分研究都让我找到了面向Windows 2003环境的解决方案,但也许我的Google技能现在已经关闭...... - ewwhite
这是2003年,但你可能想看看它是否相关: support.microsoft.com/kb/935649 - ErikE
@ HopelessN00b我查了一下 RegistrySizeLimit,它没有定义。 - ewwhite
@ErikE这些注册表项是 在2008 R2中被忽略了。 - ewwhite


答案:


这已经解决了。 

我开始检查注册表,因为增加虚拟机上的CPU和RAM资源无法解决问题。

我被指向微软的 dureg 用于估计注册管理机构规模的工具。通过注册表浏览,我遇到了打开密钥的问题 HKEY_USERS\.Default\PRINTERS。运用 dureg,我开始在这种等级制度下进行探索。


打印机是问题所在。原因和修复详述如下:
  基于Windows Server 2008 R2 SP1的服务器上“HKEY_USERS.DEFAULT”注册表配置单元的大小不断增加

修复: http://support.microsoft.com/kb/2871131 

这显然会阻止增长,但需要压缩密钥和注册表以回收空间。

压缩膨胀的注册表: http://support.microsoft.com/kb/2498915

1)  Boot from a WinPE disk.
2)  Open regedit while booted in WinPe, load the bloated hive under HLKM. (e.g. HKLM\Bloated)
3)  Once the bloated hive has been loaded, export the loaded hive as a "Registry Hive" file with a unique name.
4) Unload the bloated hive from regedit.
5) Rename the hives so that you will boot with the compressed hive.
e.g.
c:\windows\system32\config\ren software software.old
c:\windows\system32\config\ren compressedhive software

嗯,几步......在生产时间做远程有点棘手。我试着联系我 驻地微软专家 完成,但他是 忙着在某个地方追逐一些SCCM或SCVMM问题。通过一些与Citrix相关的论坛,我注意到一个可以用更少的步骤执行上述工具的工具......

所以我拍了一个虚拟机快照,然后下载并运行 免费软件注册表压缩软件(Tweaking.com);尽管 无处不在的微软系统工程师集体呻吟声......

注意默认配置中保存的1.4GB ... tucows

请重启!

重新启动后,一切都很好。用户数达到86,没有任何不良影响,也没有与配置文件相关的错误。我已经监控了打印机注册表配置单元,它保持稳定。


15
2018-01-26 19:33



可以通过禁用RDP打印机重定向来防止这种情况吗?有时客户会有 可怕 打印驱动程序,它们也被复制到RDP的任何服务器上。当然,对于终端服务器,您可能需要RDP打印机重定向... - kce
@kce此环境中的所有客户端都是瘦客户端,除了2或3台PC。客户在TS上安装本地打印机而不是GPO - 分布式打印机也可能存在问题......但是修补程序中提到的错误无论如何都是一个问题。 - ewwhite
感谢您的诊断,修补程序和工具!我依旧回忆起这个问题曾经发生在我身上,但随后发生了一场无关的彻底腐败,所以我只是重新安装了一切。如果我将来遇到类似的问题,我肯定会在我的Evernote中将其加入书签。再次,谢谢! - pepoluan
对于记录,我已完成上述操作并解决了,但现在我面临另一个注册表膨胀: HKU\.DEFAULT\Software\Hewlett-Packard 和 HKU\.DEFAULT\Software\Lexmark 两者一起构成约1.2GB的DEFAULT注册表文件! - ETL


在Windows Server 2003中,该错误是内核内存耗尽的结果。因为您正在处理Windows Server 2008 R2,我不确定问题的原因与W2K3中的原因有多密切相关,但我敢打赌,由于用户和进程的数量,这是一个内存问题。我会看看Nonpaged Pool内存耗尽是可能的原因。此外,过程的数量几乎是800,这是相当高的。 MS可能会告诉您减少进程数量,这只能通过减少用户负载来完成。

本文提供了一些有关Windows中内存使用情况的良好信息,以及如何查看非页面缓冲池限制以查看是否是问题的原因:

https://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx


3
2018-01-17 19:34



800个流程太高了?!? 但在Linux中...... :( - ewwhite
在抱怨与Linux相比有800个进程之前,将“线程”列添加到进程监视器,看看你看到了多少... Linux和Windows中的进程是不同的。比较它们对两个内核设计都是不公平的。 - Mark


启动Windows性能监视器以监视各种计数器:

  • 上下文切换
  • 页表条目
  • GDI元素
  • 手柄
  • ......(无论你能找到什么)

当您登录失败时,看看其中一个是否达到峰值。

另外:某些因素会导致系统内核CPU占用率过高 - 您应该调查一下这是否会导致您遇到相关问题。


用户配置文件Hive清理 服务可以在这里提供帮助,因为它“有助于确保在用户注销时完全终止用户会话”。


2
2018-01-20 17:14



我可以添加更多vCPU吗? - ewwhite
添加更多处理能力不会修复高内核%的使用,它只是掩盖它。此外,它不可能直接导致您的登录失败。 - MikeyB
我正试图深究...... - ewwhite
UPHClean实用程序功能本身通过w2k8及更高版本的用户配置文件清理服务提供。 - ErikE
@ewwhite 这是一篇微软文章,提到W2k3 TS服务器上的PTE耗尽。可能值得抛出一些perfmon计数器来检查这是否正在发生在你身上。 - HopelessN00b


好吧,根据我在Server 2008 R2中读到的有关RDS容量规划的内容,您可能只是在资源不足的情况下运行您的糟糕终端服务器,因为您使用它的用户数量不足。特别是,我注意到4个vCPUS上有80个用户,MS建议每15个用户使用1个核心。

来自technet博客标题为 RDS规模和容量规划指南

We always felt the need of Hardware capacity guidance and sizing information for Terminal Services or Remote Desktop services for Server 2008 R2, Whenever I am engaged in any architectural guidance discussion for RDS deployment i always get a question what needs to be taken into consideration while deciding the hardware configuration and to do capacity planning.

Here are some bullet points which I recommend to my partners and customers to consider:

  • 2GB内存(RAM)是CPU每个内核的最佳限制。例如。如果您有4 GB RAM,那么为了获得最佳性能,应该有双核CPU。
  • 2双核CPU的性能优于单核四核处理器。
  • 30个用户的LAN和20个用户的WAN的推荐带宽。带宽(b)= 100兆比特/秒(Mbps),延迟(l)小于5毫秒。
  • 在终端服务器上,每个用户64 MB是GP的理想内存(RAM)要求仅对OS使用+ 2 GB。 (100个用户* 64)+ 2000 = 8.4 GB,即8GB RAM。
  • 使用的更多应用程序(即Office,CAD应用程序等)将需要每个用户更多的内存,以便通过每个用户的64 MB基本内存添加到此计算中。
  • 每个CPU核心15个TS会话是终端服务器的最佳性能限制。
  • 网络不应超过5个跃点,延迟应小于100毫秒。
  • 64 kbps是每个用户会话的理想带宽。 (256色,交换网络,仅限位图缓存)
  • 如果每个核心的处理器时间百分比始终高于65%,则CPU性能会下降。
  • 终端服务器在X64硬件和操作系统上运行时性能提高一倍。

In addition to that, Microsoft has just released a whitepaper on Capacity Planning in Windows Server 2008 R2.

在这里下载


1
2018-01-20 19:38





我的时间很少,所以我只会做一个粗略的回答,希望以后能够充实。

当我在Citrix团队中进行法术时,我记得我们试图将每台服务器的用户数降至15-20,但是那些运行的应用程序很多。在x64的这些日子里,我们加载了更多的用户,但是70+听起来很多。

perfmon计数器最大化并不是很少上下文切换,它会使服务器下降,而其他计数器如RAM,CPU等看起来很好。可能这可能是一个原因(由于过多的上下文切换,服务器无法在超时之前分配资源)。这是 两种监控上下文切换的方法

The System\Context Switches/sec counter in 
System Monitor reports systemwide context 
switches.

The Thread(_Total)\Context Switches/sec  
counter reports the total number of context 
switches generated per second by all threads.

您也可以在容量规划指南中找到一些有用的东西,您可以找到它的链接 这篇博文

当我可以在这个答案上抽出时间时,我会这样做,我只是在这里添加一个在vSphere虚拟机中基于所有时间的测量的警告。

由于vCPU是如何从物理CPU中抽象出来的,因此vCPU不知道它的时间(一个虚拟秒可能多于或少于一个真实(或至少是物理)秒。因此,所有基于时间的perfmon计数器(CPU时间,上下文切换/秒等)是不准确的(有时甚至是疯狂的),即使它们可能作为非常粗糙的指标。

要验证这一点,请将VM中的任何基于本机时间的CPU计数器与该VM的vSphere主机上的对应计数器进行比较。出于这个原因,VMware通过VMware工具将一些CPU(和内存,从客户角度来看也不准确)的计数器发布到两个VMguest perfmon对象中。

因此,可以在guest虚拟机perfmon中提供正确的基于时间的值,但前提是查看VMware发布的对象计数器。

我只是认为这个基本信息有点相关,因为到目前为止的答案都集中在vSphere虚拟机内基于时间的测量,在某些情况下这是正确分析的关键环境。它当然也直接涉及这个特定(未完成)答案的主题及其评论。它可能对某人有用。

一旦我有时间,我将编辑链接到白皮书等详细说明这一点,以及确切的计数器路径\名称。当然,这也是可谷歌的。


1
2018-01-18 08:56



您是否建议我需要减少上下文切换?通过procmon报告的数字远低于我在网上看到的其他例子。但这不能被额外的硬件/ CPU资源所抵消吗? - ewwhite
我建议你看看它是否与你的问题有关。根据你的研究,如果你已经测量了它并且量似乎很低,那显然不是。对于添加到系统的每个处理器,容差水平线性增加。但是,我不认为存在绝对阈值水平,但原则上它需要基于每个(健康)系统。 - ErikE
从虚拟化的角度来看,这篇博文简直很有趣,即使可能不相关: professionalvmware.com/2010/11/context-switching-some-resources 如此链接文档所示,虚拟化多核上下文切换的成本估算很棘手: blog.tsunanet.net/2010/11/... - ErikE


我建议实现WSRM(Windows系统资源管理器)。当有大量的应用程序,连接,服务在一台主机上运行时,系统并不知道每个人都需要一起玩。 Windows Server自然会尝试使用它的所有资源来一直完成所有内容,除非它知道...输入WSRM。

通过实现WSRM,您可以通过各种变体设置资源限制,以确保运行的所有内容或连接的用户都有一个均匀的游戏区域。从您的笔记中看,这似乎不是ESX / vSphere问题,而是太多连接用户,他们不断竞争一切。您将不得不测试WSRM以找到一种平衡资源的快乐媒介,但也不会影响每个人都习以为常的性能水平。

WSRM概述: http://technet.microsoft.com/en-us/library/cc732553.aspx


0
2018-01-25 03:44



谢谢。我已经安装了WSRM 每次会议均等 轮廓。 - ewwhite
我不确定WSRM可以缓解潜在的问题,我的直觉告诉我的是某种类型的内存耗尽(并且基于W2K3中的相同问题和错误消息是某种类型的内核内存耗尽)。 - joeqwerty