Чому Windows 2008 використовує своп до заповнення пам'яті?


9

Я адмініструю сервер Windows 2008 (ну, на Amazon EC2) під керуванням IIS та веб-додатком .NET4. Днями я отримав попередження про пам’ять, пішов і подивився, і досить впевнений, що пам'ять процесу виросла з часом через якусь повільну течі. Вона не зростала набагато, як 60М до 200М, але з коробкою було достатньо іншого, що вона перейшла за наш досить низький поріг (75%), щоб відключити монітор.

Я переробив пул програми і звільнилася пам'ять, і, переглянувши статистику, помітила, що поміняється простір своп і значно більше 1 Гб його вивільняється за допомогою цієї утилізації.

Можливо, це основне питання, але я хлопець UNIX, і я звик обмінятися, не звикши, поки у тебе не залишиться пам'яті. Це поле ніколи не перевищувало 75% використання пам'яті. Це річ Windows або .NET річ або річ Amazon? Я підозрюю, що в цьому додатку є набагато більший витік пам’яті, ніж підозрюване - він не протікає з 60М до 200М, він протікає з 60М до 1,2 ГБ, але багато чого з них так чи інакше стає «холодним» і виштовхується на обмін?

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

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

Редагування за допомогою додаткової інформації: пам'ять екземпляра: 1,7 Гб своп: 4,5 ГБ

Я бачу процес w3wp.exe в taskmgr, що показує, що пам'ять: 211 000k. Але коли я перезапустив його (він знаходиться у власному пулі додатків, і це єдиний додаток у коробці), його використання пам'яті знизилось до нормальної початкової точки 60M, і, як 1 ГБ + своп, також вивільнився. У taskmgr у мене був просто встановлений звичайний режим пам'яті (приватний робочий набір), але я помітив, що зміна змінилася за допомогою мого іншого моніторингу (Cloudkick). Повернувшись назад і подивившись на це, сьогодні процес запам'ятовується до 195 мільйонів (всього 1,2 ГБ), а своп пройшов від 1,0 ГБ до 1,1 ГБ, але не весь шлях назад, де був (графік з часом, це повільна повзання).

Мене менше турбує цей конкретний додаток і більше стурбований просто розумінням того, коли Windows обміняється і як це використовує, і чим слід занепокоєти дані пам’яті Windows та використання обміну взагалі.


4
До речі, принаймні Linux зможе розміщувати сторінки умовно-провідниково, якщо до них не було доступно протягом тривалого часу, навіть якщо система не обробляється близько до використання всієї доступної оперативної пам’яті. Це робиться для звільнення пам'яті для кеш-диска, буферів тощо
EEAA

Скільки пам’яті має цей екземпляр? Ви хочете сказати, що процес w3wp.exe вражає 1 Гб? Це єдиний сайт, що працює в цьому пулі додатків?
Кев

@ KevΩ Додав більше інформації в Q на ваш запит.
Ернест Мюллер

@ErikA, добре знати, я думаю, я слухав хлопців, які говорять: "Якщо ви поміняєте, у вас вже є продуктивність, просто вимкніть заміну взагалі і не закінчіться оперативної пам'яті", щоб я не став " не так дивитись своп.
Ернест Мюллер

Якщо ваш диск забився на диск, це правда. Якщо він міняється, це звільняє місця для буферів тощо.
Барт Сільверстрім

Відповіді:


17

У Windows та Linux є дві різні стратегії розміщення сторінок / свопів.

Linux

Linux хоче взагалі уникати використання місця для заміни і чекає останнього можливого моменту. Якщо ви бачите велику кількість свопів у Linux, ваша система, швидше за все, перебуває або переживає проблеми. Ця стратегія хороша для мінімізації загального вводу / виводу диска, який є найповільнішою частиною вашої системи, але слабкішим для систем з чергуванням періодів легкого та великого навантаження (і, чесно кажучи, це більшість з нас). Часи, коли ваше навантаження вже велике, тепер будуть обтяжені "додатковим" дисковим введенням-виводом або, кажучи іншим способом, вам потрібно спроектувати побудову вашого сервера з огляду на те, щоб було достатньо оперативної пам’яті, яку ви не міняєте навіть під час найбільший очікуваний час навантаження.

Windows

Windows хоче трактувати пам'ять як простий кеш файлу сторінки. Ваша справжня пам'ять завжди на диску, але вона спочатку прочитає / запише з "кешу", якщо зможе. Ця стратегія хороша для вечірнього навантаження з часом; коли система зайнята і потребує заміни сторінок, поточна сторінка вже на диску, і половина роботи вже виконана. Цей підхід отримав величезний сенс ще тоді, коли Windows була молодою, 32 Мб (забудьте ГБ) було ще багато оперативної пам’яті, і часто давалась потреба у використанні місця для обміну. Навіть сьогодні це добре для робочих навантажень, що чергуються між легкими та зайнятими навантаженнями, оскільки це допомагає більш рівномірно розподіляти введення / виведення диска з часом.

Сучасні версії Windows мають додаткові оптимізації - такі як SuperFetch - для попереднього завантаження та підготовки сторінок пам'яті на диску та в оперативній пам’яті, коли завантаження в іншому випадку легке, щоб уникнути необхідності додаткового запису диска під час першого завантаження програми. Все це означає, що ви можете спроектувати вашу систему лише на достатню кількість оперативної пам’яті для чогось меншого, ніж найбільше очікуване навантаження, так що ви все одно можете мати принаймні прийнятну продуктивність весь час, з меншими витратами.

Конвергенція

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

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


Дуже специфічно щодо стратегії кінця Windows, дякую! Також підтверджений цією Microsoft KB, я знайшов ... support.microsoft.com/kb/2267427
Ернест Мюллер

1
Linux не обов'язково чекає останнього можливого моменту, якщо ви прямо не встановите vm.swappiness = 0. За значенням за замовчуванням 60 він замінить сторінки, які не торкалися протягом певного часу.
Kjetil Joergensen

@KjetilJoergensen не забудьте прочитати останній розділ про конвергенцію.
Джоель Коель

1
@JoelCoel я беззастережно відректися мою критику :)
Кьєтіл Joergensen

7

Windows (і Linux та інші ОС, схожі на Unix) перенесуть сторінки, які не використовувались протягом певного часу, на диск, щоб звільнити місця для буферів та кешу, щоб прискорити активну діяльність вводу / виводу. Також програми часто виділяють більше пам’яті, ніж вони негайно використовуватимуть - це може спонукати ядро ​​розміщувати сторінки, які нещодавно не торкалися у фоновому режимі, так що згадані програми не бачать затримки виклику під час запуску раптово. використовуючи це виділення.

У Linux ви можете налаштувати (або заблокувати) цю поведінку, змінивши відповідні значення "свобідності" у /procфайловій системі - без сумніву, є значення реєстру, які можна налаштувати, щоб змінити, як Windows поводиться і в цьому відношенні.

Інша річ, яку слід пам’ятати, це те, що коли щось було створено на попередній сторінці та згодом прочитано, ядро ​​не видалить його із файлу сторінки, доки інший файл не буде заповнений або сторінка в оперативній пам’яті не буде змінена. Таким чином, якщо йому потрібно знову розгорнути сторінку, це можна зробити без необхідності записувати сторінки на диск: вміст вже є. Це може значно підвищити продуктивність у ситуаціях, коли надмірний обсяг пам’яті став настільки поганим, що спричинив обмолот файлів сторінок (значна кількість сторінок постійно відображається на картках). Ви, ймовірно, виявите, що деякі дані були витіснені цим витоком пам’яті, і з тих пір їх зачитували, але не стирали з диска на випадок, якщо ці сторінки потрібно буде відобразити на карті або оперативної пам’яті, щоб звільнити місце пізніше. У Linux значення "SwapCched" в/proc/meminfoпоказує, скільки даних міститься на сторінках, які мають однакові копії в оперативній пам’яті та на диску. Windows, без сумніву, використовує ту саму оптимізацію (або щось подібне), але я не точно куди дивитись, щоб побачити, наскільки це відбувається (без сумніву, є відповідні лічильники моніторів продуктивності, на які можна запитувати).

tl; dr: Це нормально. Сучасне ядро ​​ОС намагатиметься бути розумним та збільшити максимальну кількість оперативної пам’яті, яку він може використовувати як кеш для збереження операцій вводу / виводу, а інколи буде копіювати дані на диск і в оперативну пам’ять, щоб зберегти введення / вивід, якщо йому потрібно передати на сторінку ці біти пізніше оперативної пам’яті. Можливо, протилежно інтуїтивно зрозуміло, що використання файлів сторінок цими двома способами, навіть якщо ви зараз не маєте низької оперативної пам’яті, покращує загальну продуктивність, а не зменшує її.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.