Czy powinienem całkowicie wyłączyć swap dla linux webserver?

22

Ostatnio mój przyjaciel powiedział mi, że dobrym pomysłem jest wyłączenie wymiany na serwerach Linux z wystarczającą ilością pamięci. Mój serwer ma 12 GB i obecnie używa 4 GB (nie licząc bufora i buforów) przy maksymalnym obciążeniu.

Argumentował, że w normalnej sytuacji serwer nigdy nie wykorzysta całej swojej pamięci RAM, więc jedynym sposobem, w jaki może napotkać sytuację OutOfMemory, jest błąd / ddos ​​/ etc. Tak więc w przypadku wyłączenia wymiany system zabraknie pamięci, co ostatecznie spowoduje awarię pamięci zapełniającej program (najprawdopodobniej proces serwera WWW) i prawdopodobnie niektóre inne procesy. W przypadku wymiany jest włączony nazje zarówno pamięć RAM, jak i swap i ostatecznie spowoduje taką samą awarię, ale wcześniej odciąży kluczowe procesy, takie jak sshd do zamiany i zacznie wykonywać wiele operacji wymiany, powodując poważne spowolnienie. W ten sposób, gdy system w systemie ddos ​​może przejść do stanu całkowicie bezużytecznego z powodu dużych opóźnień i prawdopodobnie nie będę w stanie zalogować się i zabić procesu serwera WWW lub odmówić całego ruchu przychodzącego (wszystkie oprócz ssh).

Czy to jest poprawne? Czy coś mi brakuje (np. Fakt, że partycja wymiany jest w jakiś sposób bardzo przydatna, nawet jeśli mam wystarczającą ilość pamięci RAM)? Czy powinienem to wyłączyć?

Poma
źródło
6
Tak więc wszystkie odpowiedzi sprowadzają się do stwierdzeń, że 1. większa pamięć wirtualna jest bezwarunkowo lepsza niż mniejsza, i 2. musi być włączona zamiana, ponieważ jest dobra, żadna z nich nie jest dobrze uziemiona.
NekojiruSou
2
Błędem jest myśleć, że zamiana służy wyłącznie pamięci „rezerwowej”. Zamiana jest przeznaczona do umieszczenia nieużywanej pamięci (abyś mógł efektywniej wykorzystać swoją rzeczywistą pamięć). Zawsze powinieneś mieć zamianę. Jeśli brakuje pamięci, to brak pamięci - kropka. Jest to problem zarządzania wydajnością - nie tendencja do zamiany. Mam dość długą odpowiedź serverfault.com/a/332205/75118, która próbuje lepiej wyjaśnić intencje pamięci wirtualnej.
Matthew Ife

Odpowiedzi:

27

Powiedziałbym, że to zależy od twojego przypadku użycia, a reszta odpowiedzi całkiem dobrze to opisała. 4G swapów to przecież tani sposób na zwiększenie bezpieczeństwa. I czuję, że ta taniość sprawia, że ​​ludzie nie chcą jej wyłączać.

Ale pozwól, że odpowiem retorycznym pytaniem. Jeśli pieniądze nie stanowią problemu i masz do wyboru dwa systemy - jeden z 12G RAM i 4G swap, a drugi z 16G RAM i bez swapu - który wybrać? Niestety większość ludzi nadal odpowiada, że ​​wybrałaby 16 GB pamięci RAM i nadal dodaje 4 GB wymiany, co nie ma mojego znaczenia.

Z drugiej strony osobiście uważam, że podmieniony system jest gorszy niż zepsuty. Awaria systemu spowodowałaby, że rezerwowy serwer kopii zapasowych przejąłby znacznie wcześniej. A w układzie aktywny-aktywny (lub z równoważeniem obciążenia) rozbity system zostałby znacznie szybciej wycofany z obrotu. Wygrana dla systemu bez zamiany ponownie.

chutz
źródło
14

NIE jest zalecane wyłączanie zamiany, nawet jeśli masz wystarczającą ilość pamięci. Jeśli Twój serwer potrzebuje więcej pamięci, ale jej nie otrzymał, nastąpi awaria. Można jednak temu zapobiec (do pewnego stopnia), gdy masz obszar wymiany.

Tak, wydajność serwera obniży się podczas korzystania z wymiany, ale przynajmniej będzie działać i będzie dostępna. Następnie możesz zaplanować dodanie więcej pamięci, jeśli zajdzie taka potrzeba, jeśli serwer zacznie używać wymiany.

Znalazłem tę stronę mówiącą o zamianie. Spójrz na trzecią część.

Zamiast wyłączać swap, możesz kontrolować zamianę .

Khaled
źródło
1
W opisanej przeze mnie sytuacji zużyje zarówno swap, jak i pamięć RAM, a także ulegnie awarii. Działa przez kilka miesięcy i nigdy nie zużywał więcej niż 30% pamięci. Jest więc bardzo mało prawdopodobne, aby podczas normalnej pracy tak szybko skoczył do 100%. Więc jeśli jakiś proces zwariował i zużył 8 GB, oznacza to, że zużyje tyle pamięci, ile tylko system operacyjny może uzyskać, to znaczy wszystko.
Poma,
@Poma, istnieją również inne zalety wymiany. Możesz także pozwolić systemowi żyć znacznie dłużej, gdy masz zamianę. Wynika to z faktu, że swap może być większy niż pamięć, biorąc pod uwagę dostępność tanich dysków HD.
Khaled
6

Nie, to nie jest dobry pomysł. „jakiś proces zwariował” oznacza, że ​​powinieneś już proaktywnie zadzwonić

ulimit -d

w czasie tworzenia procesu lub przed nim, aby ustawić limit pamięci segmentu danych procesu - a może limit liczby wątków

ulimit -T

na proces. ulimit jest twoim przyjacielem. Zanim wyłączysz swap, przeczytaj jedną z instrukcji dostrajania pamięci. Możesz również zmienić parms jądra na niektóre rzeczy, aby spróbować poradzić sobie z atakami DOS lub złymi programami.

Spójrz na to w ten sposób: Całkowita pamięć w twoim systemie to RAM + swap. Jeśli masz 12 GB swapu, po prostu skutecznie zmniejszasz pojemność maszyny wirtualnej o połowę, wyłączając swap. Kiepski pomysł. To nie jest debata, to po prostu czytanie tego, co inni ludzie znali z poprzednich złych doświadczeń od lat. Możliwe, że twój przyjaciel też musi trochę poczytać.

Jim Mcnamara
źródło
5

Jak powiedzieli inni, możesz skutecznie zatrzymać serwer za pomocą swap, chyba że jest to absolutnie konieczne, majstrując przy parametrze „swapiness”. Kontroluje to, jak agresywnie jądro zamienia strony pamięci.

Możesz zobaczyć, co jest obecnie ustawione za pomocą:

cat /proc/sys/vm/swappiness

i możesz edytować go „na żywo” za pomocą (jako root):

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

i aby było trwałe, dodaj następujące polecenie do /etc/sysctl.conf:

vm.swappiness=10
Orlando Richards
źródło
2

Kolejną dobrą rzeczą, którą możesz zrobić, jest zamiana na RAM za pomocą zRAM. Myślę, że to świetny pomysł! Dla wydajności jest to jak brak wymiany, ale także zapobiega awariom, gdy system jest bardzo obciążony!

Spójrz na to:

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

Moje doświadczenie: na tym komputerze, na którym teraz piszę, wyłączyłem swap, ponieważ mam 4 GB pamięci RAM (w 2009 było dużo!). Miałem tylko kilka problemów, jeden z nich przez pomyłkę otwierał jak 127 zdjęć jednocześnie!

ALE .. to jest stacja robocza i mogę sobie pozwolić na ponowne uruchomienie, jeśli się zawiesi. Na serwerze myślę, że lepiej jest mieć swap, a zamiana w RAM brzmi dla mnie dobrze.

CyberPlant
źródło
1

Jak już zostało wyjaśnione, nie jest to dobry pomysł. Jeśli nic innego, zamiana daje ci trochę miejsca na oddychanie, gdy rzeczy nie są całkiem normalne. np. w jednym systemie, na który patrzę, który zwykle odwiedza tylko kilka osób dziennie, nastąpił gwałtowny wzrost ruchu spowodowany wspomnieniem strony w czasopiśmie. Spowodowało to, że serwer sieciowy po raz pierwszy użył przestrzeni wymiany od momentu uruchomienia. Bez tej przestrzeni wymiany rzeczy nie poszłyby dobrze.

John Gardeniers
źródło
0

To nie jest dobry pomysł. Możesz zdefiniować 2 pliki wymiany o innym priorytecie. Jeden mniejszy, który jest w użyciu i jeden większy, który zostanie użyty w przypadku pierwszego napełnienia.

Również vm.swappiness może pomóc kontrolować, jak agresywnie następuje zamiana dysku.

Dragos
źródło
0

Jeśli wstawisz wartość 0 do vm.swappiness, niekoniecznie oznacza to, że system nie będzie zamieniał. Jest to parametr określający, jak agresywna byłaby tendencja kerne do zamiany, ale nie wyłącza zamiany.

Znowu zamiana nie jest zła, ale thrash jest. Spójrz na dane sysstat, które powinny dać całkiem niezły wskaźnik.

Soham Chakraborty
źródło