SVCHOST / Workstation服务上的Windows 2012 Core Extreme内存使用


9

我们大约有200台服务器,Hyper V,文件群集和IIS都遇到相同的问题,通过正常使用在服务器上发生一个事件,该事件使服务器上的RAM达到最大或接近最大。一旦发生这种情况,特别是SVCHOST / Workstation服务(通过将Workstation服务与其自身的SVCHOST隔离开来而被淘汰)将停止释放句柄/线程,并且该服务使用的内存永远不会释放。在某些极端情况下,我们拥有在255GB服务器上使用多达40GB RAM的工作站服务。在某些情况下,还会发现4000万个手柄。

重新启动后,问题当然消失了,并且直到W3进程或HyperV VM使用完所有内存后,问题才再次出现,此后,Workstation服务开始获取所有RAM。该过程非常慢,可能需要数周/数月,具体取决于服务器上的RAM数量。

我们的Hyper V服务器和IIS服务器都访问工作文件的共享,这些共享位于SSD存储上,因此它们的性能很高。我们已经安装了所有当前的补丁程序,但是还没有迁移到R2,因为我们拥有大量工具,这将使这成为重要的一步,并且找不到任何明确的迹象表明它将在R2中得到修复。

我们已经运行了ProcMon和其他工具,但是在最有问题的服务器上,这些工具甚至无法运行。另一方面,他们提供的结果仅表明该过程中确实存在内存泄漏。

有没有一种方法可以从此过程中释放内存或完全避免错误?我们不想重新启动,一旦过程处于错误状态,我们就无法重新启动。该过程被冻结。

我们正在尝试避免进行定期重新启动以“修复”此问题,因此,所有答复将不胜感激。


你的问题是什么?
Andrew Schulman 2014年

确实,我们这样做了,但充其量是模棱两可的,仅打开了数千/数百万个线程。在最有问题的系统上,我们甚至无法运行这些工具,它们只会使服务器崩溃。
克雷格2014年

除了重新启动包装盒之外,我们还想找到一个解决问题的好方法。此问题开始后,我们将无法停止服务。
克雷格

是否已安装KB 2811660?这些系统是否正在运行服务器管理器?support.microsoft.com/kb/2793908

是的,此知识库是在一段时间前安装的。此外,此泄漏特定于工作站服务,该知识库适用于WMI服务。
Craig

Answers:


1

我也遇到过类似的问题,其中svchost破坏了服务器性能。

解决方案:原来我有完整的事件日志。我清除了所有内容后,一切都恢复正常并正常运行。

(我还建议从默认值更改事件日志的大小,请参见下文)

要使用Windows界面设置最大日志大小
-启动事件查看器。
-在控制台树中,导航到并选择要管理的事件日志。
-在“操作”菜单上,单击“属性”。
-在“最大日志大小(KB)”中,使用微调器控件设置所需的值,然后单击“确定”。

听起来完全像这里发生的事情,但最终确实很容易解决。重新启动可以暂时解决该问题,但是只要尝试将任何内容写入日志,一切都将一发不可收拾,并不断消耗资源。

希望这可以帮助!


-1
>Is there a way we can free up the memory from this process ?

您无法从外部(适当)释放分配的内存或处理资源,而不会杀死有问题的应用程序。

>or avoid the bug all together? 

您正在遇到内存和资源泄漏。解决问题的唯一方法是查找泄漏并避免其触发(如果可能)或将泄漏修复为源代码级别;在最后一种情况下,您需要Microsoft帮助来制作补丁,但似乎他们希望您“准确地”告诉他们问题的真正出处。

您可以尝试通过使用MS Application Verifier精确定位内存/资源泄漏来找到罪魁祸首


触发因素是文件共享,这是我们无法避免的。
克雷格

如果您无法避免触发,请使用“应用程序验证程序”查找泄漏并与该信息联系MS。
Pat

由于有多个应用程序,都是Microsoft。我们已经与他们联系,我们正在寻找一种更快的解决方案,因为他们表示可能需要数周/数月的时间才能解决问题。
克雷格

考虑到MS不会真的急于在非当前OS上解决这类问题,我认为您不会找到更快的解决方案。另一件事是,如果您告诉他们泄漏的位置。
2014年

我们有一个未结案件,已经与他们合作了一个月。泄漏实际上是在Workstation服务中。
克雷格

-1

扩展RAM很容易,但没有解决方案。

我建议使用Sysinternals RAMMAP或VMMAP进行更深入的研究。使用此工具,您可以更好地了解会发生什么。通常它是一个图元文件问题。

从Server 2008开始,由于共享服务器启动应用程序时,所有终端服务器的内存不足,并且随着时间的推移出现不可思议的内存消耗,因此出现了此问题。

我们的解决方法是将应用程序托管在单独的终端服务器上,并经常清除内存消耗。

我们通过
在所有进程上使用带有SeDebugPrivilege的SetProcessWorkingSetSize()的自行设计的c ++命令行应用程序来执行此操作

强烈建议不要做这样的事情;)


为什么要投票?它的确切要求!尝试在这里提供帮助并不高兴...
Magnus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.