Jak dostroić Apache na serwerze Ubuntu 14.04

18

Obecnie na moim Apache 2 (a dokładniej Apache 2.4.7) na Ubuntu 14.04 mam następujące ustawienie:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

Serwer to serwer Amazon o pojemności 8 GB (RAM), który nie robi nic więcej, jak załadować trzy stronicowy formularz rejestracji w niektórych kampaniach reklamowych Google.

Znalazłem w Internecie skrypt o nazwie apachetuneit.sh , ale potem Apache zgłosił ten błąd:

[Wt 21 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: serwer osiągnął ustawienie MaxRequestWorkers, rozważ podniesienie ustawienia MaxRequestWorkers

Jak ocenić, jak ustawić te ustawienia?

Pytam tylko o to, jak dostroić Apache 2.4 i nic więcej. Dlatego to pytanie jest inne niż to pytanie .

ServerChecker
źródło
@JennyD Ten artykuł jest zbyt obszerny, aby sprostać tej konkretnej potrzebie.
ServerChecker
Sposób oceniania tych konkretnych ustawień polega na przeprowadzaniu testów ładowania.
Jenny D.
@JennyD To nawet łatwiejsze. Wystarczy użyć skryptu ap.sh pod regularnym obciążeniem wiele razy w ciągu dnia i średniej, wykonać obliczenia matematyczne na poniższym łączu cloudinservice i ustawić MaxRequestWorkers na tę wartość. Następnie obserwuj dzienniki Apache pod kątem problemów z MaxRequestWorkers i albo zwiększ, dodaj więcej pamięci RAM, dodaj CloudFlare lub dodaj inny węzeł sieci. Nie ma potrzeby wykonywania bardzo intensywnych testów obciążenia.
ServerChecker
Możesz napisać odpowiedź zawierającą informacje o tym skrypcie i odpowiednie informacje z linków, które umieściłeś we własnej odpowiedzi, na pytanie, które wskazałem jako możliwy duplikat.
Jenny D.

Odpowiedzi:

45
  1. Rozpoznaj, że Ubuntu 14.04 używa Apache 2 z PHP działającym przez moduł mpm_prefork , którego plik edytowalny znajduje się w /etc/apache2/mods-enabled/mpm_prefork.conf. Należy również pamiętać , że począwszy od Apache 2.4 nazwa MaxClients jest teraz zmieniana na MaxRequestWorkers , dlatego wszelka dokumentacja dotycząca MaxClients musi zostać przełączona na MaxRequestWorkers.

  2. Zatrzymaj tymczasowo usługę internetową Apache za pomocą następującego polecenia:

    usługa sudo apache2 stop
  1. Poczekaj 5 sekund, a następnie uruchom następujące polecenie, aby dowiedzieć się, ile wolnej pamięci wirtualnej masz na serwerze:
    Sudo za darmo -ht

Przeczytaj wiersz Mem: i spójrz na wolną kolumnę. Rozważ to jako ilość pamięci RAM, którą możesz przeznaczyć na Apache, chociaż zwykle lubię odejmować 2 GB na mocniejszym serwerze (jak w> 4 GB) lub 1 GB na lżejszym serwerze. Tak więc, jeśli wolna kolumna mówi, że mam 13 GB wolnego miejsca, zalecam podanie Apache 11 GB. To jest punkt odniesienia. Jeśli od czasu do czasu napotkamy jakiś problem z bazą danych w dziennikach (jak np. 3 razy w dziennikach w ciągu 3 dni), który potrzebuje więcej pamięci, możemy uznać, że mieliśmy tylko 10 GB zamiast 11 GB (w tym przypadku ). Jeśli w dziennikach Apache napotkamy, że serwer potrzebuje więcej MaxRequestWorkers, to jest to osobny problem, który omówię poniżej.

  1. Uruchom serwer WWW Apache.
    usługa sudo apache2 start
  1. Otwórz jak 10 kart przeglądarki, połącz się z niektórymi dłuższymi lub wolniej ładującymi się stronami ze swojej witryny i odśwież od 3 do 4 razy na każdej karcie.

  2. Po wykonaniu tej czynności szybko uruchom następujące polecenie:

    sudo ps -ylC apache2 | awk '{x + = 8 $; y + = 1} END {print "Zużycie pamięci Apache (MB):" x / 1024; print „Średnia wielkość procesu (MB):” x / ((y-1) * 1024)} ”

Uruchom go 5 razy szybko.

Spójrz na wartość Średniej wielkości procesu i średnią tę wartość spośród 5 razy, które uruchomiłeś.

Teraz wykonaj następującą matematykę i koniecznie przekonwertuj GB na MB, aby wszystkie liczby były w MB. Tak więc, pomnóż razy 1024 lub podziel przez 1024, w zależności od tego, którą drogę musisz iść.

MaxRequestWorkers = Poziom podstawowy Wolny (z miejscem na bufor) / Śr. Wielkość procesu

Na przykład miałem serwer 14 GB, ale kiedy Apache został zatrzymany, serwer pokazał, że używa 1 GB pamięci RAM w stanie bezczynności. Następnie zapewniam kolejny 1 GB w dodatkowej przestrzeni buforowej dla systemu operacyjnego na wypadek, gdyby tego potrzebował. To znaczy, że miałbym linię podstawową wolną od 12 GB. Teraz muszę przekonwertować go z GB na MB, więc mnożę 12 x 1024 i otrzymuję 12288. 12288 MB to moja podstawowa wolna wartość. W moim przypadku zobaczyłem, że średni rozmiar procesu wynosił 21 MB. Biorę więc 12288/21 i otrzymuję około 585. Teraz powszechne jest, że sysops zaokrągla tę wartość w dół, więc mam 580.

  1. Zmodyfikuj plik /etc/apache2/mods-enabled/mpm_prefork.conf i rozważ ustawienie następujących wartości domyślnych, zastępując XXX obliczeniem MaxRequestWorkers:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Pamiętaj, że parametr ServerLimit może nie być tam widoczny. Dodaj to. Domyślnie ten parametr to 256, jeśli nie występuje, ale musi mieć tę samą wartość co MaxRequestWorkers, w przeciwnym razie wystąpi błąd.

  1. Innym krytycznym czynnikiem w konfiguracji Apache jest plik /etc/apache2/apache2.conf ze zmienną Timeout i jest mierzony w sekundach. To jest czas, przez jaki można wysłać lub odebrać z serwera, zanim upłynie limit czasu. Należy również pamiętać o przesyłaniu lub pobieraniu pliku, na przykład jeśli masz witrynę internetową, na której ludzie mogą na przykład przesyłać lub pobierać pliki CSV lub inne duże pliki. Trzeba też pamiętać o zajętym serwerze bazy danych oraz o tym, że może minąć trochę czasu, zanim strony przekroczą limit czasu. Im mniejsza jest ta zmienna Timeout, tym bardziej dostępny jest serwer WWW do odbierania nowych połączeń. Pamiętaj jednak, że ustawienie zbyt niskiej wartości może spowodować spustoszenie w zmiennych sesji PHP, choć nie w przypadku plików cookie opartych na sesji przeglądarki. Na przykład wartość 300 (5 minut) może być odpowiednia dla serwera WWW, który opiera się na zmiennych sesji PHP dla przepływu pracy aplikacji WWW zamiast plików cookie sesji przeglądarki. Wartość 45 może być dobra dla serwera WWW, który obsługuje tylko statyczne strony docelowe reklamy, ale byłaby straszna dla serwera, który musi bardzo często używać zmiennych sesji PHP. Tak więc edytuj parametr Limit czasu w tym pliku do potrzebnej ilości. Może to wymagać przetestowania wszystkich stron internetowych, aby sprawdzić, czy wartość jest zbyt niska. Prawdopodobnie dobrym pomysłem jest jednak, aby nie ustawiać go wyżej niż 300, chyba że pojawią się problemy z przesyłaniem dużych plików lub pobierania dużych plików. ale byłoby to okropne dla serwera, który musi bardzo często używać zmiennych sesji PHP. Tak więc edytuj parametr Limit czasu w tym pliku do potrzebnej ilości. Może to wymagać przetestowania wszystkich stron internetowych, aby sprawdzić, czy wartość jest zbyt niska. Prawdopodobnie dobrym pomysłem jest jednak, aby nie ustawiać go wyżej niż 300, chyba że pojawią się problemy z przesyłaniem dużych plików lub pobierania dużych plików. ale byłoby to okropne dla serwera, który musi bardzo często używać zmiennych sesji PHP. Tak więc edytuj parametr Limit czasu w tym pliku do potrzebnej ilości. Może to wymagać przetestowania wszystkich stron internetowych, aby sprawdzić, czy wartość jest zbyt niska. Prawdopodobnie dobrym pomysłem jest jednak, aby nie ustawiać go wyżej niż 300, chyba że pojawią się problemy z przesyłaniem dużych plików lub pobierania dużych plików.

  2. Teraz uruchom ponownie usługę internetową Apache. Jeśli zrobiłeś coś złego, Apache najprawdopodobniej poinformuje cię o tym, gdy uruchomisz go ponownie, i możesz to naprawić.

    usługa sudo apache2 restart
  1. Teraz powtórz 10-kartową sztuczkę przeglądarki, którą zrobiłeś wcześniej, i sprawdź, czy napotkasz błędy konfiguracji Apache w dzienniku błędów serwera WWW Apache:
    sudo tail -f /var/log/apache2/error.log

... naciśnij CTRL + C, aby wyjść z tego, jeśli chcesz.

Poszukaj skargi dotyczącej potrzeby MaxRequestWorkers (a ostatnio odkąd zrestartowałeś serwer WWW). Jeśli zauważysz, że nawet przy optymalnym ustawieniu MaxRequestWorkers, prawdopodobnie potrzebujesz więcej siły ognia dla swoich witryn lub aplikacji internetowych. Rozważ te opcje:

  • Korzystanie z sieci CDN do pobierania dużych plików, obrazów i skryptów.
  • Korzystanie z usługi buforowania, takiej jak CloudFlare lub inne.
  • Ponawianie strategii witryny lub aplikacji sieci Web w celu użycia wielu serwerów sieciowych działających jako jedna „aplikacja internetowa” za modułem równoważenia obciążenia.
  • Dodanie większej ilości pamięci RAM do serwera, a tym samym ponowne wykonanie tych obliczeń.

  1. Teraz, gdy serwer Apache jest dostrojony, jest to rodzaj dostrojenia bazowego. Będziesz musiał to sprawdzić w ciągu 2-3 tygodni i poszukać problemów MaxRequestWorker w dziennikach błędów Apache. Na tej podstawie możesz podjąć decyzję o optymalizacji (patrz krok 10). Możesz także zainstalować Munin z apt na Ubuntu i spojrzeć na wydajność Apache w czasie i wykreślić pomysł rozwoju, zanim zdecydujesz, że musisz zrobić cokolwiek z ilością ruchu obsługiwanego przez serwer WWW.
ServerChecker
źródło
„Chociaż linki te mogą odpowiedzieć na pytanie, lepiej jest dołączyć tutaj podstawowe części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko link mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie ”
Jenny D,
@JennyD Dobra uwaga! Zrobię to.
ServerChecker
@Moderator Potrzebuję pomocy w formatowaniu tej odpowiedzi. Krok 7 miał być zgodny z wcięciami. Krok 11 nie powinien być wcięty. Polecenia kodu rozpoczynające się od sudomuszą być wyświetlane jako kod, a nie jako zwykły tekst. Postępowałem zgodnie z dokumentacją na temat formatowania, ale nadal mam problemy.
ServerChecker
1
Zrobiłem, co mogłem - Markdown naprawdę nie robi zbyt dobrze mieszanych list i kodu, ale myślę, że i tak udało mi się go trochę poprawić.
Jenny D
dla początkujących centos jak ja: ps -lyU apache zamiast ps -ylC apache2
user1928596
3

To, na co możesz zwiększyć MaxRequestWorkers, zależy od tego, ile pamięci RAM zajmuje każdy proces httpd / apache. Jeśli każdy z nich zajmie 50 MB (tylko wybranie losowej liczby), to każde 20 żądań pracowników, których używasz jednocześnie (tj. Równoczesne połączenia), zajmie 1 GB. W tym przykładzie możesz mieć maksymalnie 8 GB * 20 = 160 MaxRequestWorkers. Jednak nie możesz zużyć całej pamięci RAM na apache, musisz zarezerwować trochę na inne rzeczy tam uruchomione. Również pozostawienie wolnej pamięci RAM może być pomocne dla wydajności, ponieważ system operacyjny użyje jej do buforowania rzeczy i przyspieszenia wydajności (chociaż może być lepiej nie kończyć połączeń w porównaniu do serwera bardzo szybkiego, ponieważ witryna będzie się wyświetlać wolno, podczas gdy przeglądarki użytkowników czekają na dostęp do połączenia, jeśli wszystkie się zużyją).

g491
źródło
Jaki jest dobry sposób na profilowanie tego? Jakie polecenia mogę wpisać, aby zobaczyć, ile pamięci RAM zużywa każdy proces apache? Potrzebujemy również miejsca w pamięci RAM dla MySQL (strona WordPress) i normalnych procesów systemowych.
ServerChecker
Sprawdź, ile procesów jest uruchomionych, i uruchom freepolecenie, aby uzyskać linię bazową pamięci. Następnie zwiększ liczbę uruchomionych procesów, zwiększając MinSpareServers, ponownie uruchamiając apache, uruchamiając freeponownie i wykonując obliczenia matematyczne. Sprawdź więcejofless.co.uk/apache-memory-usage po więcej szczegółów i wyjaśnień.
g491
Teraz dowiedziałem się, że można to zrobić bardzo szybko. Jest to przedstawione w linku cloudinservice.com w mojej odpowiedzi poniżej. Komenda to ap.sh, którą ktoś wymyślił. Dowiedziałem się również, że nazwa MaxClients została teraz przemianowana na MaxRequestWorkers w Apache 2.4+.
ServerChecker