Windows 服务器 2012 内存泄漏

Windows Server 2012 Memory Leak

我在 windows 服务器 2012 上的总内存 6 Gb 中有 non-pool 内存值大约 3 Gb。我认为这是内存泄漏,请看屏幕:

顶级进程:

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

  1. 如何判断坏进程?
  2. 以及如何解决问题?也许可以处理这个泄漏?

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

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

现在看看哪个 pooltag 使用的内存最多,如下所示:

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

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

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

如果找不到 pooltag 的驱动程序,请查看 pooltag.txt 标签是否被 Windows 驱动程序使用。

如果您在 pooltag.txt 中找到标签,您需要使用 xperf. First, you have to install the Windows Performance Toolkit. Next open a cmd prompt (cmd.exe) as admin 和 运行 捕获池使用量的增长:

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

现在在 WPA.exe, load the debug symbols 中打开它并在 AIFO 下寻找你在 poomon 中看到的标签(分配的插入释放在外部)并扩展堆栈.从函数名称你可能知道发生了什么。

在此示例中,FILE 标签的使用来自一个名为 locate32 的工具,该工具扫描 HDD 以建立其搜索索引。