Чи варто повністю вимкнути своп для веб-сервера linux?


22

Нещодавно мій друг сказав мені, що це гарна ідея вимкнути swap на linux веб-серверах з достатньою кількістю пам'яті. Мій сервер має 12 ГБ і в даний час використовує 4 ГБ (не рахуючи кеш-пам'яті та буферів) під максимальним навантаженням.

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

Чи це правильно? Чи щось мені не вистачає (на кшталт того, що swap-розділ якимось чином корисний, навіть якщо мені достатньо оперативної пам’яті)? Чи варто його вимкнути?


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

2
Помилково думати, що своп призначений виключно для «резервування» пам’яті. Swap призначений для місця, де можна розмістити невикористану пам'ять (щоб ви могли ефективніше використовувати фактичну пам'ять). Ви завжди повинні мати своп. Якщо у вас немає пам'яті, то у вашої пам'яті - період. Це проблема управління потенціалом - не тенденція до обміну. У мене досить довгий сервер відповідей defaultfault.com/a/332205/75118, який намагається краще пояснити наміри віртуальної пам'яті.
Матвій Іфе

Відповіді:


27

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

Але дозвольте відповісти риторичним питанням. Якщо гроші не є проблемою, і у вас є вибір між двома системами - однією з 12G оперативної пам’яті та 4G свопом, а іншою з 16G оперативної пам’яті та жодним свопом, яку б ви обрали? На жаль, більшість людей все одно відповість, що вони обирають 16G оперативної пам’яті і все ще додають 4G свопу, що не вистачає моєї точки зору.

І ще зауважую, що я особисто знаходжу мінливу систему гіршу, ніж збій. Збійна система призведе до запуску резервного сервера резервного копіювання, щоб зайняти набагато швидше. І в активно-активних (або збалансованих навантаженнях) системах, що вийшли з ладу, буде виведена з обертання набагато швидше. Знову виграш для системи без заміни.


14

НЕ рекомендується вимикати swap, навіть якщо у вас достатньо пам'яті. Якщо вашому серверу потрібно більше пам’яті, і він його не отримав, він вийде з ладу. Однак це можна запобігти (певною мірою), коли у вас є зона заміни.

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

Я знайшов цю сторінку, що розповідає про своп. Погляньте на 3-й розділ.

Замість того , щоб вимкнути своп, ви можете контролювати swapiness .


1
У ситуації, яку я описав, вона буде споживати як swap, так і оперативну пам'ять, а також вийде з ладу. Він працює кілька місяців і ніколи не використовував більше 30% пам'яті. Тож малоймовірно, що під час нормальної роботи він так швидко підскочить до 100%. Тож якщо якийсь процес зійшов з розуму і спожив 8 ГБ, це означає, що він буде споживати стільки пам’яті, скільки може отримати ОС, це означає все це.
Пома

@Poma, є й інші переваги свопу. Крім того, ви можете дозволити системі жити набагато довше, коли у вас є заміна. Це тому, що своп може бути більшим, ніж пам’ять, враховуючи наявність дешевих HD-дисків.
Халед

6

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

ulimit -d

на час або до часу створення процесу, щоб встановити обмеження на пам’ять сегменту даних процесу - І, можливо, обмеження кількості потоків

ulimit -T

за процес. ulimit - твій друг. Будь ласка, прочитайте один із посібників з налаштування пам'яті, перш ніж вимкнути заміну. Ви також можете змінити парми ядра на деякі речі, щоб спробувати обробити атаки DOS або погані програми.

Подивіться на це так: Загальна пам'ять у вашій системі - оперативна пам'ять + своп. Якщо у вас є 12 Гб свопу, ви просто ефективно скоротите ємність VM системи вдвічі, відключивши своп. Погана ідея. Це насправді не дискусія, це просто читання того, що інші люди знали з попереднього поганого досвіду роками. Цілком можливо, що ваш друг також має потребу читати.


5

Як говорили інші, ви можете ефективно зупинити ваш сервер за допомогою swap, за винятком випадків, коли це абсолютно необхідно, поводячись із параметром "swappiness". Це контролює, наскільки агресивно ядро ​​буде замінювати сторінки пам'яті.

Ви можете бачити, для чого зараз встановлено:

cat /proc/sys/vm/swappiness

і ви можете відредагувати його "наживо" за допомогою (як root):

# echo "10" > /proc/sys/vm/swappiness

і щоб він зберігався, додайте до /etc/sysctl.conf таке:

vm.swappiness=10

2

Ще одна хороша річ, яку ви можете зробити - це помінятись на RAM за допомогою zRAM. Я думаю, що це чудова ідея! Щодо продуктивності, це як взагалі не робити заміну, але також запобігає збоям, коли система дуже завантажена!

Подивись на це:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Мій досвід: У цій машині, де я зараз пишу, я відключив своп, тому що у мене є 4Gb ОЗУ (у 2009 році було багато!). Я відчув лише пару проблем, одна з них помилково відкривалась, як 127 картинок!

Але ... це робоча станція, і я можу дозволити собі перезавантажити, якщо вона зависає. На сервері я думаю, що краще мати swap, і своп-оперативна пам'ять мені добре звучить.


1

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


0

Не гарна ідея. Ви можете визначити 2 файли підкачки з різним пріоритетом. Один менший, який використовується, і один більший, який буде використаний у випадку першого заповнення.

Також vm.swappiness може допомогти вам контролювати, наскільки агресивно відбувається заміна диска.


0

Якщо ви встановите 0 до vm.swappiness, це не обов'язково означає, що система не буде мінятися. Це параметр, який визначає, наскільки агресивною буде тенденція до ядра, але він не вимикає своп.

Знову ж таки, свопінг - це не погано, але молотьба є. Погляньте на дані про sysstat, і це повинно дати досить хороший покажчик на них.

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