【发布时间】:2014-11-12 15:07:45
【问题描述】:
如果我有一个站点(无意中)消耗大量 CPU,但消耗的内存在正常参数范围内,则会对单独应用程序池中所有其他站点的性能产生不利影响。这些其他网站正在努力获得一小部分 CPU 时间,导致通常需要几毫秒才能完成的请求,最终需要超过 10 秒。
理想的情况是,如果一个应用程序池变热,每个进程(或应用程序池)都可以访问同等份额的 CPU;使他们能够继续及时处理请求。
理论上,应用程序池有助于隔离消耗过多资源(CPU 或内存)的站点,以免影响不同应用程序池下的其他站点。
许多网站都声明了这一点,这里有一个摘录表明这是真的。
结论
“在这篇文章(链接)中,我已经解释了一个 Web 的问题 site 可以影响服务器托管的其他网站。但是,您可以 通过将每个托管网站放入自己的网站来防止这些问题 应用程序池。”
实际上,这并不像建议的那样发生。我与微软专家交谈过,他们也说过,如果 CPU 被某个进程耗尽,其他应用程序池将不会获得共享 - 即优先考虑消耗 CPU 的进程;但我不能完全相信没有解决方案或保护措施。
我收到的建议是在应用程序池设置中启动“CPU 限制”选项。这使您可以在进程超过某个时间间隔的限制时终止该进程。很好,但其他网站在 5/10 分钟内仍会遇到服务降级的情况,直到检测到并启动。
我的另一个问题是高 CPU 负载可能是由合法任务引起的;我不希望在流程中重置进程,并且我确实希望启用其他应用程序池来共享 CPU 时间。在这些任务完成时将流程优先级降低到“低于正常水平”,使其他站点能够做出响应;但是,如果另一个具有更高优先级的应用程序池开始热运行,则此进程将获得有限的 CPU 份额或没有 CPU 份额。
是否有任何方法可以设置 IIS7,以便在可用的 CPU 资源有限时,应用程序池可以共享 CPU? IIS8 对此有改进吗?是否有任何替代解决方案来保持性能/平等地将资源分配给 w3wp 进程?
附:我正在寻找一种在发生此类事件时提高服务器性能的方法;我实际上并没有每 5 分钟在我的服务器上运行大量的热进程,但需要防止意外发生。
【问题讨论】: