Як пояснити використання пам'яті на Windows Server поза списком запущених процесів


9

У мене є сервер Windows 2003, який працює трохи повільніше, коли плата за фіксацію та використання файлів сторінок галочками та до тих пір, поки я врешті не перезавантажтесь. Щоб виправити це, мені потрібно з’ясувати, що споживає всю пам'ять, і саме тут велика таємниця.

Поточні статистичні дані менеджера завдань:

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

Добре, тому давайте піднімемо SysInternals Process Explorer і перевіримо розмір робочого набору всього, що працює. Найбільшим винуватцем є екземпляр Tomcat, використовуючи 121,980 КВ, розмір 481,284 КВ. Нічого там не підходить до пояснення плати за 5 Гб.

Наступний крок: pslist SysInternals : pslist -mрозділіть результат на стовпчик і обчисліть суми стовпців для 61 процесу, про який повідомляється.

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

Я принципово не розумію, про які інструменти звітують? У мене завжди було враження, що ОС насправді заробляє набагато менше пам’яті, ніж повний обсяг віртуальної пам’яті, відображений процесом, за умови, що він насправді ніколи не використовуватиме так багато, і що дивлячись на VM тут червона оселедець.


1
Оновлення: Так, ця система працює на пейджингу, і я часто отримую попередження "Вичерпання віртуальної пам'яті". Щоразу, коли я отримую попередження, я перевіряю статистику пам’яті, і немає жодного процесу, який видається особливо поганим, але статистика пам'яті, наданих байтів завжди перевищує 5 Гб.
jpdaigle

Відповіді:


1

JP, я вважаю, що ваш коментар про те, що це автоматизований тестовий сервер побудови / одиниць, на якому працює менше, ніж стабільний код. Думаю, що цей сервер потрібно часто перезавантажувати через нестабільний код, який працює на ньому, ймовірно, має витоки пам'яті, які надають вам симптоми, які ви бачите. Витоки пам’яті не зазначаються в жодному з дерев процесів запущених процесів, оскільки це пам'ять, яка захоплюється процесами, які вже не існують, і все ще виділяються, навіть незважаючи на те, що процес, пов'язаний з ними, давно минув.

Отримайте часте вікно технічного обслуговування, яке дозволить вам автоматично перезавантажувати цю машину, можливо, щоночі, кілька разів на тиждень або щотижня, залежно від швидкості, з якою така поведінка починає виникати проблеми з продуктивністю.

На Windoze у нас є сервери додатків Oracle, які потрібно перезавантажувати двічі на день. Ми виганяли користувачів у обідній час, а посеред ночі щодня. Це було кілька років тому, з нібито стабільним виробничим кодом від Oracle.


2

Вибачте, що вставте деякі посилання - але ми використовували деякі методи пошуку витоків пам’яті, використовуючи logparser та powerhell, тому я поділюсь ними.

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

(Сайт The 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

Окрім відкриття справжніх випадків Microsoft, сайт Performance Team також має багато корисної інформації: http://blogs.technet.com/askperf/Default.aspx?p=2


1

Принциповим інструментом, який допомагає діагностувати це, є перфмон. Лічильники, на які я подивився (для початку):

Пам'ять, виділені байти - це показник попиту на віртуальну пам'ять
Процес, робочий набір, _Всього віртуальну пам'ять при "активному" використанні
файлу підкачки,%
сторінок у використанні Пам'ять, Сторінки / сек (це не обов'язково є показником низької пам'яті , хоча всі, здається, припускають, що це так)
Пам'ять, виведення сторінок / сек, скільки сторінок віртуальної пам'яті було записано у файл сторінки, щоб звільнити рамки сторінок оперативної пам’яті для інших цілей щосекунди

Пам'ять, пам'ять байтів кеша, пам'ять байтів
, не заповнених байтами,
пам'ять байтових байтів у басейні,
пам'ять системного коду, загальна кількість байт
, загальна кількість байтів драйвера системи

коли ця сума наблизиться до 2 Гб, у вас виникнуть проблеми з продуктивністю, як правило, через 32-бітну архітектуру

Пам'ять, наявні MBytes - це вимірювання обсягу оперативної пам’яті, доступного для задоволення потреб у віртуальній пам’яті (або нових виділень, або для відновлення сторінки із файла сторінки).

Дивіться також http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


Цікаве посилання. На цьому сервері я бачу загальний робочий набір процесора в 640 МБ, але "Пам'ять, скоєні байти" становить 5,4 Гб. Жоден з інших лічильників, які ви згадуєте, не є дуже високим. Я часто отримую попередження "Вичерпання віртуальної пам'яті", саме тому я розслідую. Додавання коментаря до ОП.
jpdaigle

1

Як довго цей сервер працює з останнього перезавантаження? Це невдалий факт життя, що Windows має витоки пам'яті. тобто виділена пам'ять не завжди повертається до системи. Симптоми - це саме те, що ви бачите. Якщо ви цього ще не зробите, я б запропонував перезавантажити принаймні раз на тиждень. Багато центрів обробки даних перезавантажують Windows щодня, оскільки це значно зменшує виклики підтримки. Звичайно, це набагато простіше зробити, коли ви використовуєте кластери, оскільки немає простою часу.


0

Кажуть, що десь є sysadmin, який справді розуміє статистику пам'яті Windows, але я ніколи їх не зустрічав.

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

JR

Подальші думки: ви впевнені, що насправді мало пам’яті. Ключовим моментом є те, чи отримуєте ви пейджинг. Якщо немає підкачки, вам не вистачає пам’яті. Використовуючи PerfMon, подивіться на лічильник пам'яті - Сторінки / сек.


Я не бачу нічого очевидного в запущених процесах. Чи можливий спосіб відновлення пам'яті операційною системою після закінчення процесу? Це автоматизований тестовий сервер побудови / одиниць, тому, звичайно, процеси постійно виходять з ладу, оскільки він завжди працює автоматично, будується з 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.