optymalizacja szybkości witryny [Colobridge WIKI]

  1. Zadanie:
  2. Rozwiązanie:
  3. Zwolnienie systemu
  4. Apache mpm
  5. Prefork MPM
  6. NGINX i Lighttpd
  7. LOGROTATE
  8. Wzmacniacze internetowe
  9. Referencje:

Zastosowanie: Linux

Szukaj słów:

Zadanie:

Przy ograniczonych zasobach uzyskaj maksymalną wydajność (dostępność) witryny i wyeliminuj przyczynę błędu „Nie można przydzielić pamięci”

Rozwiązanie:

Czasami niemożliwe jest wejście do konsoli serwera w komunikacie dziennika systemowego

Nie można przydzielić pamięci: fork: Nie można rozwidlić nowego procesu

Sprawdź ostatnią kolumnę w wynikach polecenia:

cat / proc / user_beancounters

Jeśli wartość nie jest równa „0”, limit zostanie przekroczony. Najprawdopodobniej będzie to łańcuch „privvmpages”

Jeśli masz fizyczny serwer lub używasz wirtualizacji KVM (XEN), wtedy, gdy brakuje pamięci, procesy zaczynają być wypychane do wolnej pamięci wymiany, co spowalnia procesy, żądania klientów stają się w kolejce, a więc obciążenie zmniejsza się samo. Obecność pamięci wymiany zmniejsza potrzebę optymalizacji serwera, chociaż nie eliminuje tego. Ale to nie działa na wirtualizację OpenVZ z jądrem 2.6.18- * Świeższe jądro 2.6.32 obsługuje pseudo swap (vswap), ale wciąż nie jest wystarczająco stabilne. Próbowaliśmy go użyć, ale liczba awarii była zbyt duża i wróciliśmy do używania wersji stabilnej 2.6.18.

W OpenVZ pamięć wymiany jest również używana, gdy brakuje pamięci, ale działa na poziomie maszyny głównej (węzeł sprzętowy), gdy brakuje miejsca na kontenery.

Intensywne wykorzystanie pamięci wymiany dla maszyny głównej OpenVZ to tryb awaryjny, który nigdy nie powinien być dozwolony. Równocześnie spowalnia się pracę kontenerów, aby nie można było ich użyć.

Problem jest wykrywany przez komunikaty w dzienniku systemowym ze słowami Brak pamięci lub Nie można przydzielić pamięci

Czasami brak pamięci uniemożliwia wejście do konsoli serwera, nie ma na to wolnej pamięci.

Uruchom komendę vzubc i pobierz dane wyjściowe w następujący sposób:

vzubc

BEANS FOR UID 309 limit zasobów max mileld limit limit failme kmemsize 11.60 mb 311.37 mb 1200.00 mb 1320.00 mb 0 lockedpages 38.01 mb 40.08 mb 49.15 mb 49.15 mb 0 przywileje 573.53 mb 3395.43 mb 3072,00 mb 3379,20 mb 463849

Jeśli twój serwer nie ma skryptu vzubc, możesz użyć polecenia:

cat / proc / user_beancounters

Ta metoda jest mniej wygodna, ponieważ informacje będą mieszanką widoków z liczby stron pamięci i bajtów.

Istnieje kilka rozwiązań tego problemu. W każdym razie będziemy musieli ograniczyć zużycie pamięci serwera WWW i innych procesów.

Zwolnienie systemu

Zacznij od wyłączenia niepotrzebnych usług.

Dość często można zobaczyć bezczynnego demona ftp. Trochę konsumuje, ale czasami jest atakowany, a potem bardzo chętnie zjada pamięć. I zdecyduj, dlaczego potrzebujesz go w stanie aktywnym, możesz go włączyć w razie potrzeby, możesz użyć sftp.

Wyłącz niepotrzebne moduły Apache. Tylko upewnij się, że ich nie potrzebujesz. Co najmniej konieczne jest sprawdzenie wydajności po zmianie parametrów i ponownym uruchomieniu usługi.

Skrypty do zbierania statystyk, takie jak Webalizer lub AWstats, są użytecznymi narzędziami, ale czy naprawdę ich potrzebujesz? Są w stanie znacznie spowolnić serwer, jeśli dzienniki są duże.

Apache mpm

Serwer WWW musi jednocześnie przetwarzać dużą liczbę połączeń i żądań, co tworzy oddzielne strumienie poleceń i inne niezbędne elementy.

Serwer Apache2 ma wielowątkowość zaimplementowaną za pomocą wtyczkowych modułów wielowątkowych - MPM. Istnieją dwa główne modele modułów MPM - pracownik MPM i prefork MPM .

Możesz określić, którego modułu używa Twój serwer za pomocą polecenia httpd -V lub apache2 -V (w zależności od systemu operacyjnego).

Ale możesz to zrobić bez tego czeku.

W przeważającej mierze używany jest prefork MPM.

Pracownik MPM przy starcie tworzy kilka procesów potomnych, po kilka wątków w każdym (ile to znaczy „kilka” jest określone w pliku konfiguracyjnym Apache.

Zaletą tego modułu jest mniejsze zużycie pamięci w porównaniu z modułem Prefork. Ten moduł jest zalecany do wysoko obciążonych serwerów internetowych i prawie nigdy nie jest używany na serwerach wirtualnych.

Prefork MPM podczas uruchamiania tworzy pewną liczbę procesów potomnych, ale w przeciwieństwie do Worker, każdy proces przetwarza tylko jedno połączenie. Prędkość obu modułów jest proporcjonalna, Prefork zużywa więcej pamięci, ale jest bardziej stabilny, mniej krytyczny dla błędów aplikacji internetowych, nie podatny na wycieki pamięci.

Prefork MPM zaleca się używać tam, gdzie debugowanie aplikacji wielowątkowych nie jest implementowane na odpowiednim poziomie. Debugowanie aplikacji wielowątkowych jest bardzo skomplikowanym i kosztownym zadaniem.

Prefork MPM

Możesz rozwiązać problem, ustawiając granice serwera WWW na liczbę połączeń. Ograniczy to liczbę uruchomionych kopii procesów (widelców).

Na przykład twoja konfiguracja (/etc/httpd/conf/httpd.conf) pozwala na otwarcie do 1024 połączeń w tym samym czasie.

<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 1024 MaxClients 1024 MaxRequestsPerChild 4000 </ IfModule>

Każde połączenie wymaga osobnego procesu serwera WWW. Każdy proces httpd zwykle wymaga 20-50 MB, a masz tylko 3072 MB i wolne 2700 GB, dlatego ustawiłem limit 100.

Nie oznacza to, że twój serwer będzie w stanie obsłużyć mniej klientów. W przypadku braku pamięci klient otrzymuje przerwane połączenie i niedostępność serwera, a po wyzwoleniu MaxClients klient po prostu czeka przez kilka sekund, gdy pojawi się wolny proces httpd.

Dzięki tej opcji nie tracisz klientów.

W rzeczywistości wartość tę należy starannie dobrać empirycznie, obserwując licznik wysokości i ilość wolnej pamięci.

Moja opcja konfiguracji:

<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 2000 </ IfModule>

Zmniejszyłem wartość MaxRequestsPerChild, zapobiegnie to wzrostowi wielkości procesu w pamięci. Ten parametr określa, po ilu żądaniach proces zostanie zrestartowany, co ma na celu wyeliminowanie wycieków pamięci.

Ale zbyt częste ponowne uruchamianie wymaga również zasobów.

Tutaj musimy szukać kompromisowej metody wyboru.

I będziesz musiał oglądać wynik po każdej zmianie.

Możesz użyć testów obciążenia, takich jak testy porównawcze apache, ale nie są w stanie naśladować prawdziwej pracy Twojej witryny.

NGINX i Lighttpd

Radykalną metodą zwalczania zużycia pamięci jest użycie lekkich serwerów NGINX lub Lighttpd.

Mogą być używane na dwa sposoby:

  1. Generalnie wyklucz apache2

  2. Użyj jako pośredniego proxy http, aby uzyskać dostęp do apache.

Pierwsza opcja jest używana, gdy nie potrzebujesz specjalnych możliwości określonych możliwości modułów Apache. Na przykład analogowy mod_secure dla tych serwerów nie istnieje. Przykład wdrożenia pierwszej metody można znaleźć pod linkiem na dole tego artykułu.

Jeśli nie możesz obejść się bez apache, używana jest druga opcja. Żądania klienta akceptują NGINX i przekierowują je do demona apache w celu przetworzenia. Pomimo dodatkowej usługi ta opcja oszczędza pamięć, ponieważ liczba połączeń z apache jest ograniczona do jednego NGINX, a NGINX nie produkuje własnych kopii.

Należy zauważyć, że druga metoda nie zawsze daje oczekiwany efekt, ale warto spróbować.

LOGROTATE

Rozmiar procesu serwera WWW może zależeć od rozmiaru dziennika systemowego. Czasami magazyn rośnie do kilkudziesięciu gigabajtów. Proces, próbując zarejestrować zdarzenie, otwiera ten plik, co może wymagać dużych zasobów systemowych.

Sprawdź, jak skonfigurowano demona logrotate, czy skutecznie przetwarza pliki dziennika i przetwarza je w ogóle?

Czy potrzebujesz dzienników serwera WWW? Czy można łatwiej wyłączyć?

Wzmacniacze internetowe

Skorzystaj z usługi wyszukiwania, aby znaleźć specjalistyczne usługi, aby przyspieszyć dostęp do Twojej witryny. Istnieje wystarczająco dużo organizacji specjalizujących się w optymalizacji stron internetowych i ochronie ich przed przeciążeniem.

Użyj Usługi CDN (dostarczanie sieci (dystrybucja))

Podam kilka przykładów.

Referencje:

Aktualność: 2011/11/03 09:39

Skrypty do zbierania statystyk, takie jak Webalizer lub AWstats, są użytecznymi narzędziami, ale czy naprawdę ich potrzebujesz?
Sprawdź, jak skonfigurowano demona logrotate, czy skutecznie przetwarza pliki dziennika i przetwarza je w ogóle?
Czy potrzebujesz dzienników serwera WWW?
Czy można łatwiej wyłączyć?