У меня Windows 2003 Server работает немного медленнее, где время фиксации и использование файла подкачки тикают до тех пор, пока я в конечном итоге не перезагружусь. Чтобы исправить это, мне нужно выяснить, что занимает всю память, и в этом заключается большая загадка.
Текущая статистика из диспетчера задач:
Physical Memory (K): 2096400
Commit Charge (K): 5364848
Page file usage: 5.11 GB
Хорошо, давай подтянемся Обозреватель процессов SysInternals и проверьте размер рабочего набора всего, что работает. Самым большим виновником является экземпляр Tomcat, использующий 121 980 КБ WS, 481 284 КБ размера виртуальной машины. Ничего подобного не объясняет взимание платы за фиксацию 5 ГБ.
Следующий шаг: SysInternals pslist: pslist -m
, разделите вывод по столбцам и вычислите суммы столбцов для 61 процесса, о котором идет речь.
SUM (Working Set) : 681,484 K
SUM (Private Bytes): 593,424 K
Не понимаю ли я, о чем сообщают инструменты? У меня всегда было впечатление, что ОС на самом деле выделяет гораздо меньше памяти, чем полный объем виртуальной памяти, отображаемой процессом, при условии, что она на самом деле никогда не будет использовать столько, и что взгляд на виртуальную машину здесь отвлекающий маневр.
Извините, что просто вставил несколько ссылок - но мы использовали некоторые методы для поиска утечек памяти, используя logparser и powershell, поэтому я поделюсь.
(Сайт Never Doubt Thy Debugger отличный): 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
На сайте Performance Team, помимо открытия реальных кейсов Microsoft, также есть много полезной информации: http://blogs.technet.com/askperf/Default.aspx?p=2
Основной инструмент, помогающий диагностировать это, - это perfmon. Счетчики, на которые я бы посмотрел (для начала):
Память, выделенные байты - это мера потребности в виртуальной памяти.
Процесс, рабочий набор, _Общая виртуальная память в "активном" использовании
Файл подкачки,% pagefile используется
Память, страниц в секунду (это не обязательно показатель нехватки памяти, хотя все, кажется, так думают)
Память, вывод страниц / сек, сколько страниц виртуальной памяти было записано в файл подкачки для освобождения страничных фреймов ОЗУ для других целей каждую секунду
Память, байт кэша
Память, невыгружаемые байты пула
Память, байт выгружаемого пула
Память, общее количество байт системного кода
Память, общее количество байтов системного драйвера
когда эта сумма приближается к 2 ГБ, у вас будут проблемы с производительностью, обычно из-за 32-битной архитектуры
Память, доступные мегабайты - измеряет, сколько оперативной памяти доступно для удовлетворения требований к виртуальной памяти (либо новых выделений, либо для восстановления страницы из файла подкачки).
Смотрите также http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm
JP, я считаю, что ваш комментарий о том, что это автоматизированный сервер сборки / модульного тестирования, на котором работает менее стабильный код, говорит обо всем. Я предполагаю, что этот сервер необходимо часто перезагружать из-за нестабильного кода, работающего на нем, вероятно, есть утечки памяти, которые вызывают симптомы, которые вы видите. Утечки памяти не будут перечислены ни в одном из деревьев процессов запущенных процессов, поскольку они представляют собой память, которая захватывается процессами, которые больше не существуют, и все еще выделяются, даже если процесс, связанный с ними, давно ушел.
Получите частое окно обслуживания, чтобы позволить вам автоматически перезагружать этот компьютер, возможно, каждую ночь, пару раз в неделю или еженедельно в зависимости от скорости, с которой это поведение начинает проявлять проблемы с производительностью.
Некоторое время назад на Windoze установлены серверы Oracle Application Servers, которые необходимо перезагружать дважды в день. Мы выгоняли пользователей в обеденное время и каждый день посреди ночи. Это было несколько лет назад с предположительно стабильным производственным кодом от Oracle.
Как долго этот сервер работал с момента последней перезагрузки? Это досадный факт, что в Windows происходят утечки памяти. То есть выделенная память не всегда возвращается в систему. Симптомы - это именно то, что вы видите. Если вы еще этого не сделали, я бы посоветовал перезагрузить компьютер хотя бы раз в неделю. Многие центры обработки данных перезагружают Windows каждый день, так как это значительно сокращает количество обращений в службу поддержки. Конечно, при использовании кластеров это сделать намного проще, потому что нет простоев.
Говорят, что где-то есть системный администратор, который действительно разбирается в статистике памяти Windows, но я никогда их не встречал.
Однако обычно не так сложно найти неправильный процесс. Попробуйте использовать Perfmon для просмотра различных счетчиков процессов, таких как дескрипторы или количество ошибок страниц в секунду.
JR
Дальнейшие мысли: вы уверены, что у вас действительно мало памяти. Ключевым моментом является то, получаете ли вы пейджинг. Если нет подкачки, значит, памяти хватает. Используя PerfMon, посмотрите на счетчик Память - Страниц / сек.
Помните, что рабочий набор - это бит памяти, который фактически представлен НАСТОЯЩЕЙ физической памятью. у вас также есть заряд виртуальной памяти, а Windows выполняет совместное использование кодовой страницы, некоторые фрагменты MFC будут совместно использоваться множеством процессов без дублирования использования памяти. Кроме того, у вас есть непрекращающееся желание Windows сохранить как можно больший размер кеша файловой системы (я видел, как он увеличивался до 800 МБ на ноутбуке с 2,5 ГБ).
Управление памятью Windows очень надежное. Однако как только Windows начинает пейджинг, все становится некрасиво, и вам ВСЕГДА нужно оставлять место для кеша файловой системы - всегда всегда. Мне регулярно приходится выключать и перезапускать Firefox, когда мои 80+ вкладок увеличивают потребление памяти до 1,2 ГБ / 1,2 + ГБ.
Windows также немного размывает линию между страницами, находящимися в кеше, и страницами, указанными как набор памяти / рабочего набора.