2013-11-12 01:10:06 +0000 2013-11-12 01:10:06 +0000
75
75

Windows, использующая слишком много оперативной памяти, как диагностировать засорение ресурсов

У меня 16 ГБ системной оперативной памяти. При запуске без открытых приложений, кроме задач-менеджера Windows использует около 3 Гб оперативной памяти. Я заглянул во вкладку процессов, но ничего необычного, похоже, нет. Как узнать, почему Windows использует столько оперативной памяти.

все процессы от всех пользователей


Читая из пулмона, кажется, что мой драйвер беспроводной широкополосной связи использует около 0.4 ГБ оперативной памяти. Даже если я удалю его, он все равно будет использовать 2.6 ГБ при запуске, что все равно слишком много.


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

Ответы (4)

85
85
85
2013-11-12 04:54:18 +0000

У вас утечка памяти, вызванная водителем. Посмотрите на высокое значение нестраничной памяти ядра. В вашем случае это больше 3,7 ГБ. Вы можете использовать poolmon , чтобы увидеть, какой драйвер вызывает высокое использование. 0x2 & 0x2 & Установить [ Windows WDK ]0x3 &, запустить poolmon, сортировать его по P после типа пула, так что не-страницы находится сверху и через B после байтов, чтобы увидеть тег, который использует большую часть памяти. Запустите poolmon, перейдя в папку, где установлен WDK, перейдите в Tools (или C:\Program Files (x86)\Windows Kits\10\Tools\x64) и нажмите poolmon.exe.

Теперь посмотрите, какой pooltag использует большую часть памяти, как показано здесь:

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

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

Если пултег показывает только драйверы Windows или находится в списке pooltag.txt ("C:\Program Files (x86)\Windows Kits.1\Debuggers\x64\triage\pooltag.txt")

вы используете xperf для трассировки причин использования . Установите WPT с SDK Windows , откройте cmd.exe от имени администратора и запустите его:

xperf - на PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree+PoolAllocSession+PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\pool.etl

захват 30 -60-х годов роста. Откройте ETL с помощью WPA.exe, добавьте графики Пула в панель анализа.

Поместите столбец пула на первое место и добавьте столбец стека. Теперь загрузите символы внутри WPA.exe и разверните стек тега, который вы видели в poolmon.

Теперь найдите другие драйверы сторонних производителей, которые можно увидеть в стеке. Здесь тег Thre (Thread) используется AVKCl.exe из G-Data. Ищите обновления драйверов/программ для их исправления.

15
15
15
2013-11-12 05:41:48 +0000

Ну, во-первых, прежде чем я перейду к более подробному ответу. На первом снимке экрана ваш Non-Page Pool (тип использования памяти ядра) находится на уровне 1.3 Гб. Это кажется мне необычно высоким, особенно в течение всего 30 минут после загрузки. Думаю, я мог видеть, как NP Pool получает такой высокий уровень после длительного использования или с программой, которая протекала как сито. Напротив, мой NP Pool обычно составляет от 100 до 200 мегабайт, а мой страничный пул может достигать 400 или 500 (и это после того, как моя система работала без перезагрузки в течение нескольких недель).


Вы можете включить несколько дополнительных столбцов в диспетчере задач, щелкнув правой кнопкой мыши по заголовкам столбцов и выбрав выбранные столбцы. Вы должны добавить Working Set (private), Working Set (shared), Commit и NP Pool. Я просканирую все ваши процессы от всех пользователей и посмотрю, есть ли у кого-нибудь из них пул NP более 256KB. Если вы видите любой, особенно тот, который значительно выше, то это может быть источником проблемы или, по крайней мере, ее частью.

Ваш общий рабочий набор, объем физической памяти, используемой процессом, является комбинацией частного и общего рабочих наборов (WS). Частная память обычно больше для большинства процессов, однако некоторые из них используют больший объем общей памяти WS. Обычно эти два набора должны составлять общую сумму WS. Обязательный (Commit) - это количество вашего рабочего набора, которое было зафиксировано в хранилище резервных копий (в большинстве случаев, в файле страницы Windows). Фоновые приложения часто имеют больший объем фиксации, чем WS, что указывает на то, что большая часть их пула страниц была заменена из памяти в ваш файл подкачки (что довольно нормально для настольных приложений, которые были минимизированы и не использовались в течение некоторого времени). 0x2 и 0x2 и Не-страничный пул - это память, которая не может и никогда не будет подменяться из физической памяти…что, по сути, является вашим постоянным минимальным использованием физической памяти. Память NP Pool часто содержит программный код и критические секции, которые должны находиться в физической памяти, чтобы вести себя корректно или безопасно, специальные кучи и т.д. Из 60 процессов, если все они имеют 256 КБ памяти NP Pool, то ваш абсолютный минимум использования физической памяти составит около 15 360 КБ. В большинстве случаев одно или два приложения могут иметь 256KB NP Pool, в то время как большинство из них имеют меньше, часто значительно меньше (или ни одного). Весьма маловероятно, что система когда-нибудь выведет на экран весь рабочий набор всех процессов, так что никогда не ждите, что использование памяти получит такой низкий уровень.


Наконец, смысл наличия большего количества памяти в том, чтобы избежать необходимости выстраивать данные в и из расширенного пространства памяти (swap, файл страницы) на физическом диске. Подкачка страниц - это процесс, который включает в себя перемещение блоков выделенной физической памяти, перемещение одних на диск, а других в физическую память с диска. Подкачка страниц - это простой и крайне нежелательный процесс. Это не “плохо” per se, но это может реально затянуть производительность, когда это происходит слишком часто. Конечная цель увеличения общего объема физической памяти в системе - позволить большему количеству процессов хранить большее количество своих коммитов в физической памяти (больший рабочий набор). Потребление памяти не является проблемой, и когда больше выполняющихся процессов используют больше памяти, общая производительность системы и активная производительность процессов обычно будет выше, так как активность физического диска, связанная с доступом к памяти (в частности, ошибки страницы) будет ниже. 0x2 и 0x2 и Windows управляет памятью для вас, и автоматически страницы данных в и из памяти к и от страницы (подкачки) файл для вас. Если вы запустили процесс, которому требуется 9 ГБ памяти, а ваша система уже использует 4 ГБ (из 12 ГБ), то система автоматически выяснит, какие процессы не нуждаются в немедленном доступе ко всему их рабочему набору, и выведет часть или весь пул страниц для подкачки, чтобы освободить этот лишний 1 ГБ. Если вашему большому процессу в конце концов понадобится больше памяти, windows еще больше уменьшит рабочий набор других процессов до тех пор, пока у него не будет достаточно свободного места для выделения только что запрошенного блока. Ваш большой процесс в конечном итоге может потреблять всю доступную память, кроме NP Pool и, возможно, некоторые дополнительные минимальные накладные расходы для периодически выполняющихся процессов, которые не позволяют Windows высвободить больше рабочего набора (т.е. у них есть ошибки на странице, которые Windows в противном случае подкачала бы из физической памяти, но из-за того, что они запрашиваются, их нельзя переместить).

Если процессу требуется больше памяти, чем ему разрешено (32-битным процессам обычно доступно 2 Гб, а некоторым чуть менее 4 Гб с расширенными техниками, в то время как 64-битным процессам обычно доступно около 48 Гб памяти, каждый), то Windows иногда пытается виртуализировать свою память с помощью пространства подкачки. Если 32-битное приложение хочет использовать максимально допустимый объем 2Гб, но доступно только 1.2Гб, windows зарезервирует полные 2Гб в файле страниц, и будет перемещать собственные данные процессов внутрь и наружу файла страниц по мере необходимости для поддержки использования памяти приложения. Общее использование “памяти” в этом случае может оказаться больше, чем доступная физическая память, при прохождении мимо Тотальный Комитет. Обычно суммарный размер файла страницы, который при управлении системой обычно в 2-3 раза превышает физический объем памяти, составляет максимум. В вашем случае, Общий объем памяти составит около 24 Гб, или в 2 раза больше физического объема памяти в 12 Гб (и это указано на первом снимке экрана, где указано его состояние: Зафиксируйте (Гб) 3 / 23).


Один последний пункт. В своем ответе вы сказали, что у вас есть 16 Гб оперативной памяти, где в качестве диспетчера задач диспетчер видит только 12 Гб оперативной памяти. Одна из двух вещей здесь. Либо ваша система действительно имеет только 12Гб оперативной памяти, либо одна из ваших ключей не регистрируется должным образом. Если палочка тарана (я предполагаю 4х 4Гб), то она может быть плохой, может быть неправильно расположена в системной плате, или на системной плате может возникнуть проблема с обнаружением памяти.

Чтобы проверить, не является ли это последней версией, необходимо сначала обновить BIOS материнской платы до последней версии. У меня была похожая проблема… мои шесть палочек Tripple-Channel DDR3 ram (6х2Гб) были хороши, основываясь на индивидуальном тестировании каждой из них… но моя материнская плата случайным образом решила не считать один или два из них так часто, часто оставляя мне только 8Гб ram. Обновление BIOS исправило проблему, и теперь у меня есть надежный доступ ко всем 12 Гб памяти.

12
12
12
2013-11-12 01:35:00 +0000

Как я могу узнать, почему моя Windows использует так много оперативной памяти.

Она использует так много оперативной памяти, потому что для этого designed. Использование оперативной памяти не связано с какими-либо затратами. На самом деле, использовать оперативную память лучше, чем свободную, потому что операционной системе не нужно ничего делать, чтобы ее использовать. Использование свободной оперативной памяти требует усилий.

Если вы думаете: “Я хочу получить свободную оперативную память сейчас, чтобы использовать ее позже”, забудьте об этом. ОЗУ не обязательно должна быть свободной сейчас, чтобы ее можно было использовать позже. Вы можете использовать ее сейчас и использовать позже. Здесь есть _ no_ tradeoff – нет абсолютно никакого недостатка в использовании оперативной памяти. ОЗУ

RAM используется и напрямую переключается с одного использования на другое без необходимости делать ее свободной только для того, чтобы снова использовать ее. Современные операционные системы оставляют оперативную память свободной только тогда, когда у них нет другого выбора.

2
2
2
2017-01-14 12:37:08 +0000

Причина, не упомянутая выше, - Гипер-V.

мне удалось идентифицировать его с помощью отличной утилиты RamMap :

Снимок экрана сделан после. До того, как объем памяти “Driver Locked” превышал 6 Гб, более 80% оперативной памяти на этой конкретной машине. Мне пришлось зайти в Hyper-V Manager и отключить “Динамическую память”. Любопытно, что даже после повторного включения “Driver Locked” память оставалась на низком уровне - я могу только предположить, что предыдущие экземпляры увеличивали ее, и что Hyper-V не уменьшает автоматически выделяемую ей память:

Похожие вопросы

3
19
10
28
6