Windows Server 2012内存泄漏

时间:2016-01-25 10:11:33

标签: visual-studio-2013 memory-leaks server bamboo windows-server-2012-r2

我在Windows Server 2012上总共6 Gb的非池内存值约为3 Gb。我认为它的内存泄漏,请参阅屏幕: enter image description here

热门流程: enter image description here

Bamboo使用Microsoft Visual Studio 2013来构建项目并运行测试。

  1. 如何确定不良流程?
  2. 如何解决问题?可能有可能处理这个泄漏吗?

1 个答案:

答案 0 :(得分:1)

由于驱动程序而非应用程序导致内存泄漏。查看非分页内核内存的高值。在你的情况下,这是2.7 GB。您可以使用poolmon查看导致高使用率的驱动程序。

安装Windows WDK,运行poolmon,在池类型之后通过 P 对其进行排序,以便非分页位于顶部,并通过 B 在字节后查看使用大多数内存的标记。通过转到安装WDK的文件夹运行poolmon,转到Tools(或C:\ Program Files(x86)\ Windows Kits \ 8.1 \ Tools \ x64)并单击poolmon.exe。

现在查看哪个pooltag使用了大部分内存,如下所示:

enter image description here

现在打开cmd提示符并运行findstr命令。为此,请打开cmd提示符并键入" cd C:\ Windows \ System32 \ drivers"转到驱动程序目录,没有引号。然后输入findstr /s __ *.*,其中__是您在poolmon中看到的标记。

执行此操作后,查看哪个驱动程序使用此标记:

enter image description here

现在,转到drivers文件夹(C:\ Windows \ System32 \ drivers)并右键单击有问题的驱动程序(上图中的intmsd.sys示例)。单击“属性”,转到“详细信息”选项卡以查找“产品名称”。寻找该产品的更新。

如果找不到pooltag的驱动程序,请查看pooltag.txt,如果Windows驱动程序使用该标记。

如果在pooltag.txt中找到该标记,则需要使用xperf捕获池使用量的增长。首先,你必须install the Windows Performance Toolkit。接下来打开cmd提示符(cmd.exe)as admin并运行:

  

xperf -on BASE + Pool -stackwalk PoolAlloc + PoolFree -buffersize 2048   -MaxFile 1024 -FileMode Circular&&超时-1&& xperf -d C:\ trace_pool_alloc.etl

现在在WPA.exeload the debug symbols中打开它,然后在AIFO下找到你在poomon中看到的标记(分配insde释放到外面)并花费堆。从函数名称中,您可能知道发生了什么。

enter image description here

在此示例中,FILE标记用法来自名为locate32的工具,该工具扫描硬盘以构建其搜索索引。