Как объяснить использование памяти на Windows Server вне списка запущенных процессов


9

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

Текущая статистика из диспетчера задач:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

Хорошо, так что давайте откроем SysInternals Process Explorer и проверим размер рабочего набора всего запущенного. Крупнейшим виновником является экземпляр Tomcat, использующий 121 980 КБ WS, 481 284 КБ ВМ. Ничто в этом не приближается к объяснению комиссии за фиксацию в 5 ГБ.

Следующий шаг: SysInternals pslist :, pslist -mразделите выходные данные по столбцам и вычислите суммы столбцов для 61 процесса, о которых сообщается.

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

Я в корне неправильно понимаю, о чем сообщают инструменты? У меня всегда было впечатление, что операционная система на самом деле выделяет гораздо меньше памяти, чем полный объем виртуальной памяти, отображаемой процессом, при условии, что она фактически никогда не будет использовать так много, и что взгляд на виртуальную машину здесь красная сельдь


1
Обновление: Да, эта система пейджинговая, и я часто получаю предупреждение «Недостаточно виртуальной памяти». Всякий раз, когда я получаю предупреждение, я проверяю статистику памяти, и нет никакого процесса, который, кажется, особенно плохо себя ведет, но статистика памяти, зафиксированных байтов всегда превышает 5 ГБ.
jpdaigle

Ответы:


1

JP, я полагаю, ваш комментарий говорит о том, что это автоматизированный сервер сборки / модульного тестирования, на котором выполняется менее стабильный код. Я предполагаю, что этот сервер необходимо часто перезагружать, поскольку из-за нестабильного кода, который на нем запущен, возможно, произошла утечка памяти, которая дает вам симптомы, которые вы видите. Утечки памяти не будут перечислены ни в одном из деревьев процессов запущенных процессов, поскольку они представляют собой память, которая захвачена процессами, которые больше не существуют и по-прежнему выделяются, даже если связанный с ними процесс давно исчез.

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

Некоторое время назад у нас были серверы Oracle Application Servers на Windoze, которые нужно было перезагружать два раза в день. Мы выгнали пользователей во время обеда и среди ночи каждый день. Это было несколько лет назад с предположительно стабильным производственным кодом от Oracle.


2

Извините, что просто вставил несколько ссылок - но мы использовали некоторые методы для поиска утечек памяти, используя logparser и powershell, поэтому я поделюсь.

http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx

(Сайт «Никогда не сомневайся в своем отладчике» превосходен): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx

Я также приведу ссылку на превосходное представление Марка Руссиновича об использовании памяти в Windows:

http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1

Если не считать реальных дел Microsoft, на сайте Performance Team также есть много полезной информации: http://blogs.technet.com/askperf/Default.aspx?p=2


1

Основным инструментом для диагностики этого является perfmon. Счетчики, на которые я посмотрю (для начала):

Memory, Committed Bytes - это мера потребности в виртуальной памяти.
Process, Working Set, _Total виртуальная память в «активном» использовании.
Файл подкачки,% pagefile в использовании.
Memory, Pages / Sec (это не обязательно является индикатором недостатка памяти. , хотя все, кажется, полагают, что это так)
Память, Страниц Вывод / сек сколько страниц виртуальной памяти было записано в файл подкачки для освобождения кадров памяти ОЗУ для других целей каждую секунду

Память, Кэш-
память байтов , Пул невыгружаемой байтовой
памяти, Память выгружаемых пулов
, Системный код Всего байтов
, Системный драйвер Всего байтов

когда эта сумма приближается к 2 ГБ, у вас будут проблемы с производительностью, как правило, из-за 32-битной архитектуры

Memory, Available MBytes (объем доступной памяти) - измеряет объем доступной оперативной памяти для удовлетворения требований к виртуальной памяти (либо для новых выделений, либо для восстановления страницы из файла подкачки).

Смотрите также http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


Интересная ссылка. На этом сервере я вижу полный рабочий набор процессов в 640 МБ, но «Память, зафиксированные байты» составляет 5,4 ГБ. Ни один из упомянутых вами счетчиков не очень высокий. Я часто получаю предупреждение «Недостаточно виртуальной памяти», поэтому я занимаюсь расследованием. Добавление комментария в ОП.
jpdaigle

1

Как долго этот сервер работает с момента последней перезагрузки? К сожалению, Windows имеет утечки памяти. т.е. выделенная память не всегда высвобождается обратно в систему. Симптомы именно то, что вы видите. Если вы этого еще не сделали, я бы рекомендовал перезагрузить компьютер хотя бы раз в неделю. Многие центры обработки данных перезагружают Windows каждый день, что значительно сокращает количество обращений в службу поддержки. Конечно, это гораздо проще сделать, когда вы используете кластеры, потому что нет простоев.


0

Говорят, что где-то есть системный администратор, который действительно понимает статистику памяти Windows, но я никогда не встречал их.

Однако обычно не так уж трудно найти неправильный процесс. Попробуйте использовать Perfmon для просмотра различных счетчиков процессов, таких как дескрипторы или ошибки страниц / сек.

JR

Дополнительные мысли: вы уверены, что на самом деле у вас мало памяти. Главное, получаешь ли ты пейджинг. Если нет пейджинга, у вас недостаточно памяти. Используя PerfMon взгляните на счетчик Memory - Pages / sec.


Я не вижу ничего очевидного в запущенных процессах. Есть ли какой-нибудь возможный способ, чтобы память не возвращалась ОС после завершения процесса? Это автоматизированный сервер сборки / модульного тестирования, поэтому, конечно, все процессы аварийно завершаются, поскольку он всегда выполняет самые передовые сборки, автоматически созданные из SVN.
jpdaigle

Смотрите мои изменения для некоторых дальнейших мыслей
Джон Ренни

0

Помните, что рабочий набор - это бит памяти, который фактически представлен РЕАЛЬНОЙ физической памятью. у вас также есть заряд виртуальной памяти, и Windows осуществляет совместное использование кодовых страниц, некоторые фрагменты MFC будут распределены между множеством процессов без дублирования использования памяти. Кроме того, у вас есть непрекращающееся желание Windows поддерживать кэш файловой системы как можно большим (раньше я видел его на 800 МБ на ноутбуке 2,5 ГБ).

Управление памятью в Windows очень надежное. Однако, как только Windows начинает пейджинг, все становится ужасно, и вы ВСЕГДА должны оставлять место для кэша файловой системы - всегда всегда всегда. Мне обычно приходится выключать и перезапускать Firefox, когда мои 80+ вкладок управляют, это потребляет память до 1,2 ГБ / 1,2 + ГБ.

Windows также немного стирает грань между страницами в кеше и страницами, которые перечислены как память / рабочий набор.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.