注:我已阅读Windows 服务器需要多久重启一次?但这个问题涉及到我们的远程桌面服务器。
我们有一台 Windows Server 2008R2 服务器 - VMware ESX VM - 已获得远程桌面服务许可,有 25 个用户,同时还使用 RRAS (SSTP)。在工作日的普通工作时间内,有 8 到 12 个登录的活跃用户,另外还有 4-6 个“断开连接”的用户。它有一个 12 GHz CPU 硬盘预订以及 16 GB RAM,也全部预留。CPU 预留可在需要时扩展到最大 24 GHz。
我们的许多用户完全依赖服务器来工作。他们也对其性能抱怨不已,但许多人不愿意改变工作习惯或软件来提高其性能。具体来说:
- 用户拒绝注销而不是断开连接
- 用户坚持使用 Lync 2013 而不是 Lync 2010(Lync 2013 非常耗资源)
我不能过分强调他们拒绝退出的重要性。断线用户继续占用内存断开连接时,这意味着在任何给定时间,我们最多有 16实例正在运行某些程序。
我还通过经验注意到,远程桌面服务器运行的时间越长,泄漏/僵尸就越容易累积。重新启动后,服务器会变得非常新,速度也更快,即使在许多用户登录后比较性能也是如此。我还了解到定期重新启动可能会有所帮助。
因此我建议定期重启虚拟机 - 我希望每周重启一次,比如在周六晚上 - 因为我觉得这些重启可以解决很多问题。
我想知道,如果你是 Windows 管理员,
即使在用户断开连接/重新连接后,垃圾/僵尸/泄漏也会随着会话时间而累积,我的说法是否正确?
多常你使用远程桌面服务重新启动同样使用的 Windows Server?
答案1
总体而言,我反对 Windows 服务器定期重启的想法除了关于 TS/RDS 服务器。我们每天都会重启服务器。它会清除旧会话,释放正在使用的资源(CPU、RAM、文件句柄等),所以我的意见和建议是,您应该配置 RDS 服务器的每日计划重启。
请注意,这个答案仅代表我的观点。这里没有事实陈述。
答案2
用户拒绝注销而不是断开连接
设置适当的组策略以自动注销它们。您可以单独控制空闲超时和注销。这肯定会最大限度地减少白天的一些问题。
我每天凌晨 3:00 重启我的 3 服务器 TS 农场。因为,当很多人使用一个系统时,垃圾会随着时间的推移而积累。我们有 3 台服务器,供 60-90 人共享,具体取决于一天、一年中的时间。
我可能不需要这么频繁地重启,但我们开始使用 Windows 2000 的终端服务,当时我们的打印机驱动程序很糟糕。打印后台处理程序基本上会在运行一两天后出现故障。因此,我们开始每晚重启,因为我们没有任何手段让打印机制造商修复他们糟糕的驱动程序。
答案3
根据您的资金、时间和用户的精明程度,另一个想法可能是建立第二台服务器。您仍然需要偶尔重新启动,但您似乎已经达到单台服务器的极限。
您应该能够使用相同的客户端 CAL(许可不是我的强项),并且根据您的虚拟化解决方案,现有许可可能已经涵盖了额外的 VM。
即使没有额外的 VM 资源和额外的 OS 开销,您可能会发现系统作为两个独立的 6 GHZ CPU 和 8GiB 内存 VM 处理得更好,假设您可以均匀分担负载。有三种可能的方法:
- 最干净的方法是使用适当的基于网络的负载平衡解决方案,例如由 F5 Networks、Cisco Systems 和类似公司提供的解决方案。如果您已经购买了这样的解决方案,那么在这里使用它将会非常值得。然后您可以忽略其余的答案,因为 f5 将能够适当地解析用于访问您当前 RD 服务器的 FQDN 的所有查询,并根据您服务器中利用率最低的服务器返回适当的 IP。
- 循环 DNS是一个可行的解决方案。它不能保证负载完全均匀,但如果您不能使用网络负载平衡器,它可以成为您在教育用户时(参见 3)的一个有用的权宜之计。将客户端当前使用的 DNS 名称替换为两个具有相同名称但不同 IP 的主机记录(您的两台服务器),理想情况下还配置链接到每个单独服务器的单独主机记录(最好基于服务器主机名)。
如果您不希望客户端在其 DNS 缓存过期并获取另一台服务器的 IP 后离开一台服务器上断开连接的会话,请在您的循环条目上设置一个较长的 TTL。或者,让他们连接的计算机的主机名显而易见(例如,使其成为背景的一部分),并要求他们在想要恢复会话时重新连接到该主机名。
- 让您的客户端分配负载。对于约 25 个用户,可能只需要求(通过电子邮件或服务器上的登录消息)某些用户访问一台服务器,其余用户访问另一台服务器。或者,如果您控制他们的桌面平台,或者他们通过 citrix 或其他应用程序虚拟化设备访问服务器,只需配置他们的hosts 文件† 这样它们总是访问同一个服务器(桌面)/确保同一个用户总是被发送到同一个服务器(设备)。
† 如果他们总是使用同一个桌面,只需修改本地桌面上的 hosts 文件即可。如果他们在机器之间移动,请编写一个脚本(通过组策略分发)来解析 host 文件,以便他们当前用于服务器的 DNS 条目指向特定用户应该使用的服务器的 IP。如果包含该 DNS 名称的行已存在,则替换该行,如果不存在,则将其添加到文件末尾。
答案4
> 用户拒绝注销而不是断开连接
你这里遇到的是管理/人力资源问题,而不是技术问题。如果人们保持登录状态影响其他人的工作(不必要地降低性能)那么实际上只有两个解决方案:
将其视为技术问题,并尽可能安排增加资源(更多 RAM、SSD 代替旋转金属等),这样问题就会通过这种方式解决。当然,向单台机器投入新资源所能实现的效果是有限的,但这可能有效。
把它当作人事管理问题来处理,并找到某种方法来鼓励(或者不这样做)执行)适当的纪律。当然,这可能不属于你的直接职责,因此根据你办公室的政治情况,这可能会相当棘手……
我们遇到过类似的问题,人们从不重新启动他们的台式机,这意味着安全更新有时要排队等待数月。安全策略规定“应及时安装已知安全问题的补丁,在已经存在漏洞的情况下立即安装,除非能够证明有足够的缓解措施”,所以最终它只是通过组策略强制执行:如果有待处理的更新,所有非服务器 Windows 机器将在周二晚上重新启动,没有例外。如果有人反对这一点,有两个简单的反驳:如果我们不遵循该政策,下次进行任何对业务很重要的审计时,我们将失去 ISO-这-那-和其他认证,我们与客户的合同也对安全政策作出了声明(因为我们有时处理他们的数据,我们必须向他们保证他们的数据在我们这里是安全的),因此,如果没有这种强制执行,我们就会违反一些非常昂贵的合同。
> 用户坚持使用 Lync 2013 而不是 Lync 2010(Lync 2013 是出了名的资源占用大户)
除了他们想要更新更闪亮的东西之外,还有其他具体的原因吗?如果他们确实需要某个功能,那么从这个角度来说,你可能无能为力。
如果聊天应用程序是主要的资源问题,我想知道是否有办法在空闲会话中仅终止该程序的实例而不是终止整个会话?
> 每次我重新启动时,如果没有提前通知,他们就会丢失工作,也就是说,他们需要在当天的“中午”之前知道所有重新启动的信息
你没有说明工作的性质,所以这在很大程度上取决于工作性质,但他们可能没有尽职调查(即没有做好本职工作)。
如果他们没有定期保存文件,那么他们他们的工作面临风险,而不是你。如果发生断电或其他故障导致服务器瘫痪,会发生什么?他们也会责怪你吗?
当然,如果它们在重启时正在积极工作,或者需要让长时间运行的进程无人看管,那么可能存在真正的调度问题,需要你们之间解决。