CentOS Скільки SWAP для 16 ГБ оперативної пам’яті?


11

Скільки SWAP ви б дали встановити CentOS на подвійний Quad Core XEON з 16 ГБ оперативної пам’яті, який буде запускати веб-сайт php з mysql backkend - середнє / велике навантаження?

centos  swap 

Відповіді:


20

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


7
І пам’ятайте, що ви завжди можете додати більше місця для заміни, якщо це потрібно, зробивши трохи місця та створивши новий том (якщо використовується LVM) або скористайтеся файлом як свопом чимось на кшталтdd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
Девід Спіллетт

3
Як бічна примітка, ви можете контролювати ступінь заміни, регулюючи значення / proc / sys / vm / swappiness.
Девід

2
Мені доведеться не погодитися з кількома пунктами тут. . . По-перше, диск дешевий, ви також можете кинути на нього пару ГБ. По-друге, вбивця OOM може зняти всю вашу скриньку, якщо вам не пощастить. Покладатися на це будь-яким чином або вважати, що краще викликати вбивцю OOM - дуже погана ідея. Думка, що потенційно оснащений ящик кращим, ніж потенційне уповільнення, також є поганою ідеєю. Єдиний час, який був би розумним - це якщо у вас була запланована дуже конкретна установка навколо цієї ситуації.
Крістофер Кашелл

бічне зауваження, як правило, бажано встановити своп на розділ, а не на файл, щоб уникнути накладних витрат та спростити процес завантаження. однак використання файлу буде працювати. 4 ГБ - це все, що потрібно будь-якій системі, я сумніваюся, ви все одно будете сильно обмінюватися 16gb оперативної пам’яті
Silverfire

Насправді, на думку Ендрю Мортона, продуктивність повинна бути приблизно однаковою між свопфайлом
Journeyman Geek

8

Прошу вибачення за дуже довгу відповідь. Я хотів би на деякий час поставити цей матеріал десь доступним!

TLDR; Теоретично кажучи, відповідь буде "ймовірно, не менше загальної кількості пам'яті резидента, яку всі ваші програми хочуть використовувати"

Я спробую пояснити, якщо ти залишишся зі мною ..

Трохи про віртуальну пам'ять

Я відчуваю, що в наші дні існує поширене неправильне уявлення про значення суапу і для чого його мета. Часто вважають, що своп означає "резервний банк" для пам'яті, коли у вас мало пам'яті. Так, це частково так, але ядро не хоче використовувати ваш своп як резервний банк . Крім того, ядро ​​ніколи не хоче викликати диск, щоб отримати дані, які ви шукаєте!

У просторі додатків є декілька речей, які ядро ​​зберігатиме в пам'яті.

  • Картовані дані файлів.
  • tmpfs файлові системи.
  • Сира пам'ять програми, виділена під час виконання.
  • Код програми (наприклад, матеріали у сегменті даних форматів ELF)
  • Дані файлів із приватним дозволом

З метою управління пам'яттю розподіл пам’яті підтримується в тій чи іншій формі підтримуючим пристроєм.

Запам’ятована файлом пам’ять - це пам’ять, яка вийшла з файлу і на типовому O / S складає переважну більшість розподілу пам’яті в системі. Він включає такі файли, як завантажені бібліотеки, які завантажуються, файли, зчитувані з диска і зберігаються в кеші сторінки, і файли, зібрані з диска (насправді, ядро ​​не розрізняє сторінки між файлами в кеш-сторінки і файлами, що позначаються як їх по суті Те ж саме).

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

Анонімно підтримувана пам'ять - інша справа. Пам'ять з цього регіону є анонімною, тому що на диску немає файлу, який насправді містить ці дані. Зазвичай це складається з стека додатків, купи, нічого в tmpfs та mmapped даних, які є приватними та змінені (оскільки він не може синхронізувати цей матеріал назад на диск). Оскільки у файловій системі просто не існує дійсного файлу, на який можна записати ці сторінки, якщо вони змінюються, анонімно збережена пам'ять підтримується носієм своп.

Тепер ядро ​​знає, що, коли пам'яті дефіцитно, її набагато дешевше виривати файли з резервною пам'яттю анонімно відображеної пам’яті, ось тому, що анонімні дані мають набагато більший шанс бути «брудними», ніж дані, захищені файлом, насправді ядро ​​за замовчуванням. оцінює анонімно резервну пам’ять як 80 разів більшу цінність, ніж пам'ять, що підтримується файлами, і це насправді те, що модифікатор затишності робить у Linux (див. цю публікацію тут, якщо ви хочете знати, що саме змінює параметр zamppiness).

Найгірший сценарій

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

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

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

Другий - менш розглянутий, але не менш важливий. Якщо ви виділите майже всю свою пам'ять на реальні дані програми - ви не будете тривати довго. Практично кожна програма покладається на читання файлів з файлової системи для роботи, це може бути тому, що деякі інструкції живуть у спільній бібліотеці або тому, що вам потрібно прочитати /etc/resolv.conf для виклику бібліотеки чи будь-якої іншої мети. Це повністю правдоподібно, щоб зупинити операційну систему - все ж мати достатньо пам’яті, щоб вмістити всі ваші програми, але оскільки ваша черга на стільки запитів вводу / виводу нічого не має шансів виконати належним чином.

Що ядро ​​хоче зробити з вашим свопом

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

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

Що ядро ​​хотіло б зробити з цими даними - це поміняти його, щоб замість цього зробити місце для діяльності файлової системи, оскільки у вас набагато більший шанс фактично використовувати ці сторінки частіше, ніж сторінки, які ви використовуєте для свого додатка. У цьому сенсі можна поміняти обмін транзакціями 16 кбіт на ваш носій своп, який ви навряд чи відчуєте, але взамін ви звільнили пам'ять 16 Кбіт, яка могла бути використана для зберігання чотирьох файлів, варті даних.

Для чого ядро ​​не хоче використовувати swap

Ядро напевно не хоче використовувати свій swap для виділення більше анонімної пам’яті, заміняючи якусь іншу анонімну пам’ять, це ситуація, про яку люди хвилюються найбільше і правильно.

Однак я повинен зазначити, що якщо у вас виділено стільки пам’яті, що у ядра немає іншого вибору, крім цього, це проблема конфігурації системних адміністраторів, а не самого ядра - його просто намагаються зробити найкраще Варіанти, які Ви дали!

Якщо у вас є величезна кількість свопів, чи збільшуєте ви шанс використовувати його?

Ні! Якщо у вас є 1G оперативної пам’яті та 4G свопу, це не на 80% шансів, що ваші дані будуть замінені! Ядро хоче використовувати своп лише тоді, коли сторінки в пам'яті можна краще обслуговувати, роблячи щось інше!

Чи вигідно взагалі не використовувати своп

Я б ніколи цього не робив. Заміна дозволяє O / S позбутися пам'яті, яку вам потрібно мати, але ніколи не використовується. Якщо у вас немає підкачки, ви просто не проганяєте пам’ять, яку ви ніколи не повернете, і для цього, можливо, ви побачите значне поліпшення продуктивності, дозволяючи, скажімо, кешувати сторінку замість неї.

Що найкраще мати своп

Теоретично кажучи, з’ясуйте, скільки пам'яті резидента + 20% на безпеку, наприклад, дзвінки з бібліотеки, що повторно вступають, яким потрібно виділити пам'ять з купи - тоді встановіть свій своп на цю кількість. Це (теоретично так чи інакше) дозволить операційній системі витіснити всю анонімну пам'ять, якби довелося створити місце для чогось більш корисного.

Якщо я отримаю можливість ядра поміняти все небезпечне, чи не так?

Пам'ятайте, що ядро ​​не хоче обмінятися, щоб створити місце для більш анонімного розподілу пам’яті тут, воно буде лише коли-небудь міняти сторінки, які не використовуються, для переваги чогось іншого, що дозволить краще використовувати простір.

Якщо ваша заміна анонімної пам’яті не лише для виділення з анонімної пам'яті, ви робите щось не так, і вам потрібно більше оперативної пам’яті або все одно переробляти стек додатків.

Скільки оперативної пам'яті вам знадобиться

Вам потрібно дозволити достатню кількість оперативної пам’яті, щоб запустити всі ваші програми, звичайно, але ви, мабуть, повинні дозволити додаткові 2G оперативної пам’яті, щоб заповнити кеш сторінки - можливо, і більше. Кеш сторінки робить ваш комп'ютер набагато швидшим, а ваші диски довше. Якщо ви думаєте про запуск веб-сервера, маючи ще більше для кеш-сторінки, це гарна ідея завдяки великій кількості статичного вмісту, який ви можете отримати та використати з кеш-сторінок, який би вийшов у службу (якщо пропускна здатність вашого веб-сервера 5 Мб / с, ви дійсно не працюєте Ви хочете отримати той вміст 5 Мб / с, який ви генеруєте з диска!

Що робити, якщо ви дійсно не довіряєте Linux, щоб правильно міняти місцями

Якщо ви дійсно стурбовані, ви можете виділити більше пам'яті, ніж у вас є:

  • Встановіть суму свопу, щоб вона не перевищувала оперативну пам'ять
  • Встановіть / proc / sys / vm / overcommit_memory на 2
  • Встановити / proc / sys / vm / overcommit_ratio є значенням, яке фактично ніколи не може перевищувати фізичні межі оперативної пам'яті. Перегляньте документацію на ядро, щоб визначити, що це число буде для вас.

Що найкращий спосіб налаштувати мою пам'ять для мого застосування

  • Зрозумійте, що насправді робить свобідність.
  • Використовуйте CGroups для розподілу правильних ресурсів для кожної програми.
  • Змініть режим перезарядки, згаданий вище, щоб операційна система виконувала суворі обмеження.
  • Використовуйте групи, як описано вище, щоб встановити пріоритети OOM для програм, які ви дійсно хочете зберегти, якщо ваша пам'ять та додаток ви дійсно хочете вирватися, якщо у вас немає пам'яті.

Постачальник рекомендує іншу конфігурацію ..

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

Підводячи підсумок

  • Swap призначений для використання в якості місця для зберігання марної пам'яті. Не як "запасна пам'ять"
  • Наявність величезної кількості свопів ніяк не впливає на ваші шанси використовувати його.
  • Ядро справді хоче зупинити вам доступ до диска для своїх даних. Це застосовується так само - якщо не більш рівномірно кеш сторінок, як це робиться для заміни місця.
  • Ядро постарається зробити все можливе, щоб вшанувати налаштування, які ви надаєте цим програмам, які ви запускаєте. Але не дивуйтеся, якщо ви ОМО, якщо у вас є 500 дітей з апашею, всі займають 32 млн пам'яті. Це помилка обраної конфігурації, а не управління пам'яттю.

Ядро, як правило, робить дуже хорошу роботу з належного керування віртуальною пам'яттю. Практично завжди буває так, що ваша програма виділяє більше пам’яті, ніж ви могли б сподіватися на роботу, і ось що викликає OOM.

Swap використовувався як "запасна пам'ять", але це вже не є його основною метою, тому не думайте використовувати його так. Натомість оцініть, що ваше ядро, ймовірно, найкраще знає, для чого хоче використовувати вашу пам’ять. Дайте йому простір для прийняття цих рішень, і ви отримаєте користь від загального підвищення ефективності.


2

З документа "Сервер Oracle 10g на Red Hat® Enterprise Linux® 5 рекомендацій щодо розгортання".

Oracle надає загальні рекомендації щодо розміру свопу в MetaLink Note 169706.1. Ці рекомендації можуть призвести до створення дуже великого місця обміну в системах з великим обсягом пам'яті. Дуже великий своп може призвести до погіршення продуктивності системи і може бути усунений за рахунок зменшення місця заміни. Red Hat не рекомендує виділяти більше 4 Гб для своп на Red Hat Enterprise Linux 5.

Таким чином, для 16 Гб у вас має бути не більше 4 Гб свопу.

PS. Також варто зазначити, що викликається oomмайже завжди краще, ніж непридатний процес заміни, використовуючи всю пропускну здатність вводу / виводу.



-1

З того, що я пам'ятаю з документації на Linux: Якщо ваш RAM більше 2 Гб, то ви робите swap = (ramSize + 2). Якщо менше, то робиш swap = (ramSize * 2)


-2

Я знайшов цей документ для вас, він повинен допомогти вам прийняти це рішення, ось він: Що таке Swap Space? , але жоден із наведених відповідей не є правильним


1
Документ, на який ви зв'язали, не погоджується сам із собою. Дотримуючись заявленого правила «для більшої кількості оперативної пам’яті 2 Гб оперативної пам’яті вище 2 Гбіт», буде дано 1Gb своп на 3Gb оперативної пам’яті (3-2 = 1), а не на 5Gb.
Девід Спіллетт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.