Windows 10 内存泄漏

Windows 10 内存泄漏

大约一年来,Windows 10 一直存在内存泄漏问题,但我真的很想现在就解决这个问题,因为它对我的工作产生了相当大的影响。

从下图可以看出,我有 8GB 的​​ RAM。尽管应用程序不超过 1GB,但其中 92% 已被使用。

去年我从 Windows 7 Pro 64 位升级到了 Windows 10。

询问更多详细信息,我不知道还能提供什么。我不知道是什么原因造成的。

细节

答案1

1 很大一部分高内存使用量(2GB)来自高页表用法。

在此处输入图片描述

要查看哪些进程使用它,请安装Windows Performance Toolkit哪个是 Windows 10 SDK 的一部分,以管理员身份打开命令提示符并运行以下命令:

wpr.exe -start ReferenceSet -filemode && timeout 5 && wpr.exe -stop C:\MemUsage.etl

使用Windows Performance Analyzer(WPA.exe)打开MemUsage.etl,展开内存条目

在此处输入图片描述

将图表从左侧图表列表拖放ResidentSet到分析窗格:

在此处输入图片描述

现在将Page Category列移到左侧并展开Page Table条目:

在此处输入图片描述

这里您可以看到页表使用率较高的进程。在右侧(蓝线之后),您可以看到每个进程的页表内存使用率(以 MB 为单位)。

此外,组合的(非)分页池使用量接近 2GB。

安装 WDKInstall the WDK,运行poolmonC:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe),通过池类型对数据进行排序,P以便非分页/下次分页位于顶部,并通过B字节后查看使用最多内存的标签。

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

在此处输入图片描述

现在打开 cmd 提示符并运行 findstr 命令。为此,打开 cmd 提示符并输入“cd C:\Windows\System32\drivers”(不带引号)。然后输入“findstr /s __",其中 __ 是标签(poolmon 中最左边的名称)。执行此操作以查看哪个驱动程序使用此标签:

在此处输入图片描述

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

解决这两个问题可以恢复近 4GB 的空间。

根据您在 stackoverflow 上的屏幕截图,4 个标签(VoSM、FILE、Ntfx 和 Proc)属于 Windows 功能。

将此文本复制/粘贴到新的 txt 文件并将其重命名为PoolTagLeak.wprp

<?xml version="1.0" encoding="utf-8"?>
<WindowsPerformanceRecorder Version="1.0" Author="MagicAndre1981" Copyright="MagicAndre1981" Company="MagicAndre1981">
  <Profiles>
    <SystemCollector Id="SystemCollector" Name="NT Kernel Logger">
      <BufferSize Value="1024" />
      <Buffers Value="1024" />
    </SystemCollector>
    <SystemProvider Id="SystemProvider">
      <Keywords>
        <Keyword Value="Pool" />
      </Keywords>
      <Stacks>
        <Stack Value="PoolAllocation" />
        <Stack Value="PoolAllocationSession" />
      </Stacks>
      <PoolTags>
        <PoolTag Value="VoSM"/>
        <PoolTag Value="File"/>
        <PoolTag Value="Ntfx"/>
        <PoolTag Value="Proc"/>
      </PoolTags>
    </SystemProvider>
    <Profile Id="PoolUsage.Verbose.File" Name="PoolUsage" Description="Pool usage Tag 'Leak' " LoggingMode="File" DetailLevel="Verbose">
      <Collectors>
        <SystemCollectorId Value="SystemCollector">
          <SystemProviderId Value="SystemProvider" />
        </SystemCollectorId>
      </Collectors>
    </Profile>
    <Profile Id="PoolUsage.Verbose.Memory" Name="PoolUsage" Description="Pool usage Tag 'Leak'" Base="PoolUsage.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose" />
  </Profiles>
</WindowsPerformanceRecorder>

现在运行wpr.exe -start C:\PoolTagLeak.wprp && timeout 600 && wpr.exe -stop C:\PoolusageUsage.etl并尝试重现使用量的增长。

将 拖放Pool Graph到分析窗格,将列排序为TypePooltagStack

在此处输入图片描述

现在转到 AIFO(内部分配,外部释放,因此这可能是泄漏),找到您的 4 个标签并展开堆栈以查看此标签使用哪些函数。根据函数的名称,您可以看到“原因”。在我的演示中,ThreG-Data 的 AVKCl.exe 使用标签(线程),因为它启动了很多线程。查找驱动程序/程序更新以修复它。

相关内容