Ile SWAP dałby instalację CentOS na podwójnym czterordzeniowym XEON z 16 GB pamięci RAM, który będzie działał na stronie php z zapleczem mysql - średnie / duże obciążenie?
11
Nie więcej niż jeden lub dwa - chcesz trochę wymiany, na wszelki wypadek i ponieważ pomaga to działać trochę lepiej, ale jeśli kiedykolwiek dojdziesz do punktu, w którym mocno zamieniasz, maszyna idzie aby być bezużytecznym - w prawdziwej katastrofalnej sytuacji lepiej jest mieć mniejszą przestrzeń wymiany, ponieważ wtedy aktywujesz zabójcę OOM wcześniej niż później.
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
Przepraszam za bardzo długą odpowiedź. Od jakiegoś czasu chciałem umieścić te rzeczy w miejscu dostępnym!
TLDR; Teoretycznie odpowiedź brzmiałaby „prawdopodobnie nie mniej niż całkowita ilość pamięci rezydentnej, której wszystkie aplikacje chcą używać”
Spróbuję wyjaśnić, czy zostaniesz ze mną ...
Trochę o pamięci wirtualnej
Wydaje mi się, że w dzisiejszych czasach powszechne jest nieporozumienie na temat wartości wymiany i jej celu. Często uważa się, że swap jest rozumiany jako „bank rezerw” dla pamięci, gdy brakuje jej pamięci. Tak, jest to częściowo prawda, ale jądro nie chce używać twojej wymiany jako banku rezerw . Ponadto jądro nigdy nie chce wywoływać dysku, aby uzyskać dane, których szukasz!
W obszarze aplikacji jest wiele rzeczy, które jądro będzie przechowywać w pamięci.
Do celów zarządzania pamięcią przydział pamięci jest wspierany w takiej lub innej formie przez urządzenie wspomagające.
Pamięć oparta na plikach to pamięć pochodząca z pliku, która w typowym systemie operacyjnym stanowi zdecydowaną większość przydziału pamięci w systemie. Zawiera pliki, takie jak biblioteki współdzielone, które zostały załadowane, pliki odczytane z dysku i zapisane w pamięci podręcznej strony oraz pliki ukształtowane z dysku (w rzeczywistości jądro nie rozróżnia stron między plikami w pamięci podręcznej strony i plikami zmapowanymi jako zasadniczo to samo).
Wspaniałą rzeczą w tej pamięci z punktu widzenia jądra jest jej jednorazowość, to znaczy, że powinna istnieć możliwość zrzucenia tych stron, jeśli potrzebna jest pamięć na coś innego, i to właśnie robi pamięć podręczna stron, jeśli nagle pamięć jest wymagana.
Anonimowo wspierana pamięć to inna sprawa. Pamięć z tego regionu jest anonimowa, ponieważ na dysku nie ma pliku, który faktycznie zawiera te dane. Zwykle składa się ze stosu aplikacji, sterty, wszystkiego w tmpfs i danych mmapped, które są prywatne i zostały zmodyfikowane (ponieważ nie można zsynchronizować tych rzeczy z powrotem na dysk). Ponieważ w systemie plików po prostu nie ma prawidłowego pliku do zapisania tych stron, jeśli ulegną zmianie, anonimowo zabezpieczona pamięć jest wspierana przez nośnik wymiany.
Teraz jądro wie, że kiedy brakuje pamięci, o wiele tańsze jest porzucenie pamięci opartej na plikach anonimowo odwzorowanej pamięci, to znaczy, ponieważ anonimowe dane mają znacznie większą szansę na „zabrudzenie” niż dane zabezpieczone plikami, w rzeczywistości jądro ocenia pamięć anonimowo jako 80-krotnie bardziej wartościową niż pamięć zabezpieczona plikiem i tak właśnie robi modyfikator swapiness na Linuksie (zobacz ten post tutaj, jeśli chcesz wiedzieć, co dokładnie zmienia parametr swappiness).
Najgorszy scenariusz
Najgorszy scenariusz, w którym serwer wymyka się spod kontroli i OOMing opiera się na fakcie, że spędza zbyt dużo czasu na przetwarzaniu żądań We / Wy niż na honorowanie żądań alokacji pamięci. Istnieją dwa warunki, które mogą wywoływać te kryteria.
Pierwszy to powszechnie uważany problem. To znaczy, ponieważ tak wiele pamięci żyje w swapie, trzeba zamienić anonimową pamięć z pamięci RAM, umieścić ją z powrotem w swap, a następnie wziąć coś z swap i umieścić w prawdziwej pamięci RAM. Ta operacja jest bardzo kosztowna, spowalniając maszynę do punktu, w którym może stać się sytuacją nie do odzyskania (ponieważ w kolejce żądań stron jest więcej rzeczy niż to, co można obsłużyć z I / O).
Drugi jest mniej rozważany, ale równie ważny. Jeśli przeznaczysz prawie całą pamięć na rzeczywiste dane aplikacji - nie przetrwasz długo. Prawie każda aplikacja wymaga do odczytu plików z systemu plików, może to wynikać z tego, że niektóre instrukcje znajdują się we wspólnej bibliotece lub dlatego, że musisz odczytać plik /etc/resolv.conf w celu wywołania biblioteki lub w innym celu. Całkowicie prawdopodobne jest zatrzymanie systemu operacyjnego - a jednak posiadanie wystarczającej ilości pamięci, aby pasowało do wszystkich aplikacji, ale ponieważ w kolejce tak wielu żądań We / Wy nic nie ma szans na prawidłowe wykonanie.
Co jądro chce zrobić z twoją zamianą?
Jądro chce użyć twojej wymiany, aby pozbyć się stron marnujących pamięć, aby móc użyć tej pamięci do czegoś innego.
Zasadniczo, podczas normalnej pracy, jądro uwielbia agresywnie wypełniać pamięć podręczną stron danymi odczytanymi z dysku, co oznacza, że nie będzie czytać dysku dla tych samych danych. Jest to dobry projekt i może znacznie zmniejszyć liczbę operacji we / wy. Możliwe, że masz w pamięci aplikację, która śpi przez 3 dni, budzi się, wykonuje sporo pracy, a następnie śpi kolejne 3 dni.
Jądro chciałoby zrobić z tymi danymi, aby zamienić je na miejsce dla działania systemu plików, ponieważ masz znacznie większą szansę na częstsze korzystanie z tych stron niż ze stron używanych przez aplikację. Zamiana, w tym sensie może być transakcją 16kb na twoich nośnikach wymiany, której nie powinieneś czuć, ale w zamian uwolniłeś 16kb pamięci, którą można by wykorzystać do przechowywania danych o wartości czterech plików.
Do czego jądro nie chce używać swap
Jądro zdecydowanie nie chce używać twojej wymiany do przydzielania większej ilości anonimowej pamięci poprzez zamianę innej anonimowej pamięci, jest to sytuacja, o którą ludzie martwią się najbardziej i słusznie.
Należy jednak zauważyć, że jeśli przydzielono tak dużo pamięci, że jądro nie ma innego wyjścia, jak tylko to zrobić, jest to problem konfiguracyjny administratorów systemu, a nie samego jądra - po prostu stara się zrobić to najlepiej opcje, które dałeś!
Jeśli masz dużą liczbę swapów, czy zwiększasz szanse na ich wykorzystanie?
Nie! Jeśli masz 1G pamięci RAM i 4G wymiany, nie ma 80% szansy na zamianę danych! Jądro chce używać wymiany tylko wtedy, gdy stronom w pamięci można lepiej obsłużyć, robiąc coś innego!
Czy w ogóle nie warto używać wymiany?
Nigdy bym tego nie zrobił. Zamiana pozwala systemowi operacyjnemu pozbyć się pamięci, którą potrzebujesz, ale nigdy nie jest używana. Jeśli nie masz zamiany, po prostu połykasz pamięć, której nigdy nie odzyskasz, za co możesz zauważyć znaczną poprawę wydajności, pozwalając, powiedzmy, na bufor strony, aby ją miał.
Jaka jest najlepsza zamiana?
Teoretycznie dowiedz się, ile pamięci rezydentnej + 20% na zabezpieczenia, takie jak ponowne wywołania bibliotek, które muszą przydzielić pamięć ze sterty - a następnie ustaw swap na tę ilość. To (teoretycznie zresztą) pozwoliłoby systemowi operacyjnemu wymienić całą anonimową pamięć, gdyby musiał zrobić miejsce na coś bardziej użytecznego.
Jeśli dostanę okazję jądra do wymiany wszystkiego, co niebezpieczne, prawda?
Pamiętaj, że jądro nie chce zamieniać się tutaj, aby zrobić miejsce na bardziej anonimową alokację pamięci, będzie tylko wymieniać nieużywane strony, aby faworyzować coś innego, co lepiej wykorzysta przestrzeń.
Jeśli zamieniasz pamięć anonową tylko w celu alokacji z bardziej anonimowej pamięci, robisz coś źle i potrzebujesz więcej pamięci RAM lub zrestartujesz stos aplikacji.
Ile pamięci RAM potrzebujesz
Musisz oczywiście pozwolić na wystarczającą ilość pamięci RAM, aby uruchomić wszystkie aplikacje, ale prawdopodobnie powinieneś pozwolić dodatkowym 2G pamięci RAM na wypełnienie pamięci podręcznej - może więcej. Pamięć podręczna stron znacznie przyspiesza działanie komputera, a dyski działają dłużej. Jeśli zastanawiasz się nad uruchomieniem serwera WWW, dobrym pomysłem jest posiadanie jeszcze większej ilości pamięci podręcznej ze względu na ogromną ilość statycznych treści, które możesz odzyskać i ponownie użyć z pamięci podręcznej, które zostałyby dostarczone (jeśli przepustowość twojego serwera wynosi 5 Mb / s, naprawdę nie mimo wszystko chcesz pobierać zawartość 5 Mb / s, którą generujesz z dysku!).
Co zrobić, jeśli naprawdę nie ufasz linuxowi, aby poprawnie zamieniać
Jeśli naprawdę się martwisz, możesz przydzielić więcej pamięci niż masz:
Jaki jest najlepszy sposób na dostrojenie pamięci dla mojej aplikacji
Sprzedawca zaleca inną konfigurację.
Posłuchaj tego zamiast tego. Niektóre aplikacje są napisane w taki sposób, że celowo wywołują jądro, aby ich strony były aktywne we wszystkich innych. Szczerze mówiąc, jest to paskudna sztuczka, ale psuje zdolność jądra do płynnego zarządzania pamięcią, kiedy to się dzieje. Jeśli twój sprzedawca podaje ci szczegóły, prawdopodobnie należą do tej kategorii i słuchają tego, co mówią.
W podsumowaniu
Jądro zwykle dobrze wykonuje prawidłowe zarządzanie pamięcią wirtualną. Prawie zawsze jest tak, że twoja aplikacja przydziela więcej pamięci, niż możesz sobie wyobrazić, i to właśnie powoduje OOM.
Zamiana była używana jako „pamięć zapasowa”, ale nie jest już jej głównym celem, więc nie myśl o takim używaniu. Zamiast tego doceń, że twoje jądro prawdopodobnie najlepiej wie, do czego chce użyć twojej pamięci. Daj mu miejsce na podejmowanie tych decyzji, a zyskasz na ogólnej poprawie wydajności.
źródło
Z dokumentu „Serwer Oracle 10g na zaleceniach dotyczących wdrażania Red Hat® Enterprise Linux® 5”.
Tak więc dla 16 GB nie powinieneś mieć więcej niż 4 GB wymiany.
PS. Warto również zauważyć, że wywołane
oom
jest prawie zawsze lepsze niż proces wymiany bezużytecznego z wykorzystaniem całej przepustowości we / wy.źródło
Aktualne rekomendacje wymiany CentOS wykorzystują wzór:
Tak więc w przypadku 16G kwota zamiany powinna wynosić 18G.
Zobacz http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
źródło
Z tego, co pamiętam z dokumentacji systemu Linux: jeśli twój RAM jest większy niż 2 GB, to robisz swap = (ramSize + 2). Jeśli jest mniej, to zamień = (ramSize * 2)
źródło
Znalazłem dla Ciebie ten dokument, który powinien pomóc ci podjąć tę decyzję, oto: Co to jest Swap Space? , ale żadna z powyższych odpowiedzi nie jest poprawna
źródło