Утечка памяти в Windows 10

У меня проблема с утечкой памяти в Windows 10 уже около года, но я действительно хочу это исправить, так как она оказывает значительное влияние на мою работу.

Как видно из рисунка ниже, у меня 8 ГБ ОЗУ. 92% из них используется, хотя приложения не превышают 1 ГБ.

В прошлом году я обновил 64-разрядную версию Windows 7 Pro до Windows 10.

Спросите более подробную информацию, я не знаю, что еще предоставить. Я в недоумении относительно того, что может быть причиной этого.

1 ответ

1 большая часть вашего высокого использования памяти (2 ГБ) происходит из-за высокого использования таблицы страниц.

Чтобы увидеть, какие процессы используют его, установите Windows Performance Toolkit который является частью Windows 10 SDK, откройте командную строку от имени администратора и выполните эту команду:

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

Открой MemUsage.etl с помощью анализатора производительности Windows (WPA.exe) разверните запись в памяти

перетащите график ResidentSet от списка левого графика до панели анализа:

Теперь переместите Page Category столбец слева и разверните Page Table запись:

Здесь вы видите процессы, которые имеют высокое использование таблиц. На правом сайте (после синей линии) вы видите использование памяти таблицей страниц в МБ для каждого процесса.

Также использование объединенного (не) выгружаемого пула составляет почти 2 ГБ.

Установите WDK, запустите poolmon (C:\Program Files (x86)\Windows Kits\10\Tools\x64\poolmon.exe), отсортируйте данные через P после типа пула, чтобы число страниц без постраничной / следующей постраничной обработки было вверху, а через B - после байтов, чтобы увидеть тег, который использует больше всего памяти.

Теперь посмотрите, какой тэг пула использует больше всего памяти, как показано здесь:

введите описание здесь

Теперь откройте командную строку и запустите команду findstr. Для этого откройте командную строку и введите "cd C:\Windows\System32\drivers" без кавычек. Затем введите "findstr / s __ . ", Где __ - тег (самое левое имя в poolmon). Сделайте это, чтобы увидеть, какой драйвер использует этот тег:

введите описание здесь

Теперь перейдите в папку драйверов (C:\Windows\System32\drivers) и щелкните правой кнопкой мыши нужный драйвер (intmsd.sys в приведенном выше примере изображения). Нажмите Свойства, перейдите к details вкладка, чтобы найти название продукта. Ищите обновление для этого продукта.

Исправление обеих проблем может вернуть почти 4 ГБ.

На основе вашего скриншота на stackoverflow, 4 тега (VoSM, FILE, Ntfx и Proc), которые принадлежат функциям Windows.

Скопируйте / вставьте этот текст в новый текстовый файл и переименуйте его в 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 на панели анализа, упорядочить столбцы Type, Pooltag, Stack,

Теперь перейдите к AIFO (расположен внутри, освобожден снаружи, так что это возможная утечка), найдите ваши 4 тега и разверните стек, чтобы увидеть, какие функции используют этот тег. На основании названий функций вы можете увидеть "причину". В моем демо Thre Тег (Thread) используется AVKCl.exe из G-Data, потому что он запускает много потоков. Ищите обновления драйверов / программ, чтобы исправить это.

Другие вопросы по тегам