我们经营一家游戏服务器公司,我们有大量客户共享一台机器,并且只使用由我们的 Web 控制面板管理的 Java 进程 (Minecraft) 实例。在最近发布的几个游戏更新中,我们注意到客户使用的许多第三方插件编写得很糟糕,我们经常看到某些服务器的 CPU 大幅增加,直到我们手动终止该进程。
我们的游戏面板会自动重启进程,因此关闭它们并不是一个大问题。我们的问题是,一旦这些服务器中的一台开始消耗 50% 以上的 CPU 使用率,就需要至少 5 分钟才能通过 RDP 进入机器,找到它属于谁,将其关闭并通知他们。
目前是否有任何适用于 Server 2008 的解决方案可以限制 CPU 使用率,或者在最坏的情况下,自动终止使用那么多 CPU 的进程?由于 Minecraft 本质上是一个单线程应用程序,我们已经调查了使用 Affinity 的情况,尽管由于我们的软件包变化和使用量的波动,这对我们来说效果不佳。一些限制进程可以使用的最大使用量的选项将是完美的,或者至少是终止使用那么多的进程的选项。
谢谢!
答案1
看起来你想要类似这里描述的东西:
http://technet.microsoft.com/en-us/library/ff384148%28v=ws.10%29.aspx
这是针对每个用户的进程配额系统(严格来说是每个 SID),应该可以满足您的需要。如果您有 10 个 Minecraft 进程,并将每个进程限制为 9%,则应该有 10% 的 CPU 可用于 RDP 等。
如果您遇到了其他资源限制,您可能需要研究单独限制这些资源。
答案2
我建议直接降低每个实例的优先级。这样,您的远程访问将比失控任务具有更高的优先级。您可能还想研究更轻松的管理方案,例如 PowerShell 远程。