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 .
ubuntu
apache-2.4
ubuntu-14.04
performance-tuning
mpm-prefork
ServerChecker
źródło
źródło
Odpowiedzi:
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.
Zatrzymaj tymczasowo usługę internetową Apache za pomocą następującego polecenia:
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.
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.
Po wykonaniu tej czynności szybko uruchom następujące polecenie:
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.
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.
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.
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ć.
... 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:
źródło
sudo
muszą być wyświetlane jako kod, a nie jako zwykły tekst. Postępowałem zgodnie z dokumentacją na temat formatowania, ale nadal mam problemy.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ą).
źródło
free
polecenie, aby uzyskać linię bazową pamięci. Następnie zwiększ liczbę uruchomionych procesów, zwiększając MinSpareServers, ponownie uruchamiając apache, uruchamiającfree
ponownie i wykonując obliczenia matematyczne. Sprawdź więcejofless.co.uk/apache-memory-usage po więcej szczegółów i wyjaśnień.