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

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

在重新启动时,问题当然会消失,直到所有的内存都被使用,例如W3进程或者HyperV虚拟机,在这之后Workstation服务开始抓取所有的内存。 该过程非常缓慢,可能需要数周/数月,具体取决于服务器上的RAM数量。

我们的Hyper V服务器和IIS服务器都可以访问工作文件的共享,这些共享位于SSD存储上,所以它们具有很高的性能。 我们已经安装了所有当前的补丁,但还没有搬到R2,因为我们有很多的工具,这将是一个重要的步骤,无法find任何明确的迹象表明,这将在R2中得到解决。

我们运行ProcMon和其他工具,但在最有问题的服务器上,这些工具甚至不能运行。 在其他方面,他们提供的结果只是表明在这个过程中确实存在内存泄漏

有没有一种方法可以从这个过程中释放内存或一起避免错误? 我们不希望重新启动,并且一旦处于错误状态,我们就不能重新启动进程。 这个过程变得冻结了。

我们正试图避免定期重启来解决这个问题,所以任何答案将不胜感激。

    我有一个很棘手的问题,那就是svchost破坏了服务器的性能。

    解决scheme:原来我有一个完整的事件日志。 我把它清理出去,一切都恢复正常,没有任何事情发生。

    (我也build议改变事件日志的大小从默认,见下文)

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

    这听起来完全像在这里发生的事情,但最终成为一个非常简单的修复。 重新启动会暂时解决问题,但是一旦有任何事情想写入日志,所有事情就会一发不可收拾,只是不断地耗尽资源。

    希望这可以帮助!

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

    没有办法你可以从外部(正确)释放分配的内存或处理资源,而不会杀死有问题的应用程序。

     >or avoid the bug all together? 

    您遇到内存和资源泄漏。 解决问题的唯一方法是find泄漏点,并避免触发(如果可能的话)或修复源代码级的泄漏; 在最后一种情况下,你需要微软帮助生成补丁,但是他们希望你能够“确切地”告诉他们问题到底在哪里。

    你可以尝试通过使用MS 应用程序validation程序来查明内存/资源泄漏的罪魁祸首

    轻松的RAM,但没有解决scheme。

    我build议Sysinternals RAMMAP或VMMAP进行更深入的调查。 有了这个工具你可以更好地看到发生了什么。 很多时候它是一个图元文件的问题。

    从Server 2008开始,我们遇到了所有terminal服务器耗尽内存的问题,从共享启动应用程序时,随着时间的推移,内存消耗将会不可思议。

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

    我们使用自行devise的c ++命令行应用程序来完成此操作
    SetProcessWorkingSetSize()与所有进程上的SeDebugPrivilege

    强烈build议不要这样做;)