5 wskazówek, aby zwiększyć wydajność serwera WWW Apache

5 wskazówek, aby zwiększyć wydajność serwera WWW Apache

Według ostatniego raportu Netcraft (znana firma internetowa, która świadczy między innymi statystyki użytkowania przeglądarki internetowej), Apache nadal jest najczęściej używanym serwerem WWW wśród witryn i komputerów internetowych.

5 wskazówek, aby zwiększyć wydajność serwera WWW Apache

Dodatkowo, Apache ciągle doświadcza największego wzrostu wśród najlepszych serwerów internetowych, a następnie Nginx I IIS. Tak więc, jeśli jesteś administratorem systemu odpowiedzialnym za zarządzanie instalacjami Apache, musisz wiedzieć, jak upewnić się, że Twój serwer WWW działa najlepiej po jego pojemności, zgodnie z potrzebami (lub klienta).

W tym artykule omówimy kilka wskazówek, które pomogą Ci upewnić się, że Apache będzie działał sprawnie i będzie mógł obsłużyć liczbę żądań, których oczekujesz od zdalnych klientów.

Pamiętaj jednak, że Apache nie został zaprojektowany w celu ustalenia rekordów porównawczych - ale mimo to nadal jest w stanie zapewnić wysoką wydajność w prawie każdym przypadku użytkowania, o którym możesz pomyśleć.

Wskazówka nr 1: Zawsze aktualizuj Apache do najnowszej wersji

Oczywiste jest, że zainstalowanie najnowszej wersji Apache jest prawdopodobnie jedną z pierwszych rzeczy, które musisz wziąć pod uwagę. Na dzień 19 listopada 2015 r. Najnowsza wersja Apache dostępna w Centos 7 Repozytoria to 2.4.6, podczas gdy w Debian Jest 2.4.10.

Może jednak istnieć niedawna poprawa lub poprawka błędu, która została dodana do nowo wydanej stabilnej wersji, która jest następnie udostępniona do pobrania i instalacji ze źródła. Podano tutaj również instrukcje kompilacji i instalacji - pamiętaj, że jeśli wybierzesz tę metodę aktualizacji, możesz zapasować aktualne pliki / witryny / witryny / wirtualne hosty jako środek ostrożności.

W każdym razie możesz sprawdzić aktualnie zainstalowaną wersję w następujący sposób:

# httpd -v [na systemach opartych na Redhat/Centos] # Apache2 -V [na systemach opartych na debian/ubuntu] 
Sprawdź wersję Apache

Zasadniczo trzymaj się metody aktualizacji dostarczonej przez menedżera pakietu wybranego dystrybucji (Aktualizacja yum httpd Lub Umiejętność bezpieczna podwyżka apache2, odpowiednio dla centos lub debiana), chyba że nie ma innego sposobu. Możesz przeczytać najnowsze uwagi w sekcji dokumentacji Apache na stronie internetowej projektu serwera Apache HTTP.

Wskazówka nr 2: Jeśli używasz jądra starszego niż 2.4, rozważ aktualizację teraz

Dlaczego? Wersje jądra 2.4 a powyżej ma domyślnie włączenie połączenia systemowego Sendfile Chernel. To z kolei ułatwia wysokowydajne transfery plików sieciowych (które są pożądane w kontekście komunikacji serwera WWW) i umożliwia Apache szybciej dostarczanie treści statycznych i przy niższym wykorzystaniu procesora poprzez wykonywanie jednoczesnego odczytu i wysyłania operacji.

Możesz wyświetlić aktualnie zainstalowane jądro z:

# Uname -r 

i porównaj to z najnowszym stabilnym jądrem w WWW.jądro.org (4.3 W momencie pisania).

Sprawdź wersję jądra Linux

Chociaż jest to proces, który nie jest przeznaczony dla początkujących, aktualizacja jądra jest interesującym ćwiczeniem, aby dowiedzieć się więcej o wewnętrznych elementach Linuksa.

Wskazówka nr 3: Wybierz moduł multimprocessing (MPM), który najlepiej działa w Twojej sprawie

W praktyce, MPMS Rozszerz modułową funkcjonalność Apache, umożliwiając zdecydowanie, jak skonfigurować serwer WWW do wiązania z portów sieciowych na komputerze, akceptować żądania od klientów i korzystać z procesów dla dzieci (i wątków, alternatywnie) do obsługi takich żądań.

Począwszy od wersji 2.4, Apache oferuje do wyboru trzy różne MPM, w zależności od twoich potrzeb:

  1. Prefork MPM korzysta z wielu procesów dziecięcych bez gwintowania. Każdy proces obsługuje jedno połączenie bez tworzenia oddzielnych wątków dla każdego. Nie wchodząc w zbyt wiele szczegółów, możemy powiedzieć, że będziesz chciał użyć tego MPM tylko podczas debugowania aplikacji, która używa, lub jeśli Twoja aplikacja musi sobie poradzić, moduły beztrzymające, takie jak mod_php.
  2. pracownik MPM używa kilku wątków na procesy dziecka, w których każde wątek obsługuje jedno połączenie na raz. Jest to dobry wybór dla serwerów o wysokim ruchu, ponieważ umożliwia obsługę bardziej równoczesnych połączeń z mniejszym pamięcią RAM niż w poprzednim przypadku.
  3. Wreszcie wydarzenie MPM jest domyślnym MPM w większości instalacji Apache dla wersji 2.4 i powyżej. Jest podobny do pracownika MPM, ponieważ tworzy również wiele wątków na proces dziecięcy, ale z przewagą: powoduje Utrzymać przy życiu Lub bezczynny Połączenia (choć pozostają w tym stanie), które należy obsługiwać przez pojedynczy wątek, uwalniając w ten sposób pamięć, którą można przydzielić do innych wątków. Ten MPM nie nadaje się do użytku z modułami beztrzymania, takimi jak mod_php, za co taki zamiennik PHP-FPM Zamiast tego należy użyć.

Aby sprawdzić MPM Używany przez instalację Apache, możesz zrobić:

# httpd -v 

Poniższy obraz pokazuje, że ten konkretny serwer WWW używa Prefork MPM.

Sprawdź Apache MPM

Aby to zmienić, musisz edytować:

#/etc/httpd/conf.moduły.D/00 mpm.Conf [na systemach opartych na Redhat/Centos] #/etc/apache2/mods-dostępny/.załaduj [na systemy oparte na Debian/Ubuntu] 

Gdzie może być mpm_event, MPM_Worker, Lub mpm_prefork.

i odkształcenie linii, która ładuje pożądany moduł, taka:

Moduły modułów loadmodule mpm_event_module/mod_mpm_event.Więc 

Notatka: Aby wydarzenie MPM działało w Debian, być może będziesz musiał zainstalować libapache2-mod-fastcgi Pakiet z repozytoriów bez wolnych.

Dodatkowo dla centrów będziesz potrzebować PHP-FPM (wraz z FCGI I mod_fcgid) podczas gdy w Debian się nazywa PHP5-FPM (wraz z Apache2-MPM-Event).

Wreszcie, ponownie uruchom ponownie serwer WWW i nowo zainstalowany PHP-FPM (Lub PHP5-FPM) praca:

Na Redhat/Centos

# Systemctl restart httpd php-fpm && Systemctl Włącz HTTPD PHP-FPM 

Na Debian/Ubuntu

# Systemctl restartuj apache2 php5-fpm && Systemctl Włącz apache2 php5-fpm 

Chociaż możesz ustawić Apache na użycie określonego MPM, konfiguracja ta może być zastąpiona na podstawie hosta na ten sam sposób, co wskazano wcześniej.

Po prostu upuść odpowiednie znaczniki do pliku konfiguracyjnego dla każdego wirtualnego hosta i jesteś gotowy do pracy - ale upewnij się, że używasz jednego i tylko jednego MPM na Vhost.

Na koniec pamiętaj, że niezależnie od wybranej dystrybucji, PHP-FPM opiera się na wdrażaniu Fastcgi, To jest powód, dla którego wcześniej zaleciłem dodatkowe instalacje pakietów.

Aby uzyskać więcej informacji i przykładów na PHP-FPM i jak może wraz z wydarzeniem MPM zwiększyć wydajność Apache, należy zapoznać się z oficjalną dokumentacją.

To właśnie widzę po zmianie domyślnego MPM z prefork na zdarzenie w tym samym polu pokazanym na poprzednim obrazie:

Wybierz moduł Apache MPM

W Centos 7, musisz upewnić się, że http I https Usługi są włączone za pośrednictwem zapory, a interfejs sieciowy są prawidłowo dodawane do strefy domyślnej.

Na przykład:

# firewall-cmd --zone = wewnętrzne --add-interface = tun6to4 # firewall-cmd --zone = wewnętrzne --add-interface = tun6to4 --PerMent # firewall-cmd-set-default-st-st-st-st-st-stre -Cmd --add-service = http # firewall-cmd --add-service = https # firewall-cmd --add-service = http --Permanent # firewalll-cmd --add-service = https --Permanent # firewallll -CMD - -RELOOD 

Powodem, dla którego to wychowuję, jest to, że ostatnio doświadczyłem problemu, w którym domyślne ustawienia konfiguracji zapory w chmurze zapobiegały VPS PHP-FPM i Apache z przetwarzania plików PHP.

Jako test podstawowy (jestem pewien, że możesz wymyślić bardziej skomplikowane lub stresujące), utworzę plik PHP, który sprawdza istnienie innego pliku o nazwie test.php W tym samym katalogu dwóch serwerów Centos 7 o tych samych charakterystykach i obciążeniu, ale z różnym MPM. Jeden z nich użyje zdarzenia, a drugi użyje prefork:

Porównaj zdarzenie Apache i moduł prefork

To jest kod PHP, który zapisałem w pliku o nazwie CheckiffileExists.php:

 

Następnie uruchomimy narzędzie Benchmark Apache (AB) z 200 Jednoczesne prośby do 2000 Prośby są wypełnione:

# ab -k -c 100 -n 2000 Localhost/CheckiffileExists.php 

Uruchommy test i porównajmy wyniki. Zwróć uwagę na statystyki wydajności:

Testowanie ładowania wydajności Apache

Jak widać, wydajność serwera z zdarzeniem jest bardzo lepsza od jego Prefork odpowiednik w każdym aspekcie tego testu.

Wskazówka #4: Mądrze przydzielić pamięć RAM na Apache

Być może najważniejszym elementem sprzętu, który należy wziąć pod uwagę Baran przydzielone dla każdego procesu Apache. Chociaż nie możesz tego bezpośrednio kontrolować, możesz ograniczyć liczbę procesów dziecka przez MaxRequestworkers dyrektywa (wcześniej znana jako MaxClients w Apache 2.2), co spowoduje ograniczenia użycia pamięci RAM przez Apache. Ponownie możesz ustawić tę wartość na hosta lub na podstawie wirtualnej hosta.

Aby to zrobić, należy zwrócić uwagę na średnią ilość pamięci RAM używanej przez Apache, a następnie pomnóż ją przez liczbę MaxRequestworkers, I to jest ilość pamięci, która zostanie przydzielona dla procesów Apache. Jedną rzeczą, której nigdy nie chcesz, aby Twój serwer WWW to zacząć używać swap, ponieważ znacznie zmniejszy jego wydajność. Dlatego zawsze powinieneś zachować korzystanie z pamięci RAM przez Apache w granicach, na które możesz sobie pozwolić, i nigdy nie polegać na zamianach.

Na przykład następujący blok ograniczy liczbę jednoczesnych klientów do 30. Jeśli więcej klientów uderzy w gospodarza, mogą doświadczyć opóźnienia lub chwilowej awarii, którą można łatwo rozwiązać, odświeżając przeglądarkę. Chociaż można to uznać za niepożądane, jest to zdrowsze dla serwera i na dłuższą metę, najlepsze dla Twojej witryny.

Możesz umieścić ten blok w środku /etc/httpd/conf/httpd.conf Lub /etc/apache2/apache2.conf, w zależności od tego, czy używasz centu, czy debiana.

Należy pamiętać, że ta sama zasada dotyczy wszystkich MPMS - Używam tutaj wydarzenia, aby kontynuować koncepcję opisaną w poprzedniej wskazówki:

 Startervers 3 minSparethreads 25 MaxSparethreads 75 ThreadLimit 64 ThreadSperchild 25 MaxRequestworkers 30 MaxConnectionSperChild 1000  

W każdym razie zaleca się odwołanie się do Apache 2.4 dokumenty, aby zobaczyć, które dyrektywy są dozwolone dla wybranego MPM.

Wskazówka #5: Poznaj swoje aplikacje

Z reguły nie powinieneś ładować żadnych modułów Apache, które nie są ściśle potrzebne do pracy. Będzie to wymagało co najmniej ogólnej wiedzy na temat aplikacji działających na serwerze, szczególnie jeśli jesteś administratorem systemu i istnieje inny zespół odpowiedzialny za rozwój.

Możesz wymienić aktualnie załadowane moduły z:

# httpd -m [na systemach opartych na Redhat/Centos] # apache2ctl -m [na systemach opartych na debian/ubuntu] 

Aby rozładować / wyłączyć moduły Centos, Będziesz musiał skomentować linię, która zaczyna się od Module load (albo w głównym pliku konfiguracyjnym, albo w pomocy pomocniczej /etc/httpd/conf.moduły.D.

Z drugiej strony, Debian zapewnia narzędzie o nazwie A2dismod Aby wyłączyć moduły i jest używane w następujący sposób:

# A2dismod module_name 

Aby to włączyć:

# A2enMod module_name 

W obu przypadkach pamiętaj o ponownym uruchomie.

Streszczenie

W tym artykule sprawdziliśmy 5 wskazówek To pomoże dostroić serwer WWW Apache i zwiększyć jego wydajność. Ponadto powinieneś pamiętać, że optymalizacja i wydajność bez zabezpieczeń jest bezcelowa, więc możesz odwołać się do instalacji mod_pagespeed, aby poprawić wydajność WebServer i artykuł hartowania Apache w Tecmint.com też.

Ponieważ nie możemy odpowiednio omówić wszystkich aspektów tego tematu w tym artykule, być może pomyślisz o innych pomysłach, które chciałbyś podzielić się z resztą społeczności. Jeśli tak, daj nam znać, używając poniższego formularza komentarza.