Утечка памяти в 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, потому что он запускает много потоков. Ищите обновления драйверов / программ, чтобы исправить это.