我在Windows Server 2012上总共6 Gb的非池内存值约为3 Gb。我认为它的内存泄漏,请参阅屏幕:
Bamboo使用Microsoft Visual Studio 2013来构建项目并运行测试。
答案 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使用了大部分内存,如下所示:
现在打开cmd提示符并运行findstr命令。为此,请打开cmd提示符并键入" cd C:\ Windows \ System32 \ drivers"转到驱动程序目录,没有引号。然后输入findstr /s __ *.*
,其中__
是您在poolmon中看到的标记。
执行此操作后,查看哪个驱动程序使用此标记:
现在,转到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.exe,load the debug symbols中打开它,然后在AIFO
下找到你在poomon中看到的标记(分配insde释放到外面)并花费堆。从函数名称中,您可能知道发生了什么。
在此示例中,FILE
标记用法来自名为locate32的工具,该工具扫描硬盘以构建其搜索索引。