Ogranicz użycie pamięci Apache 2

9

Używam serwera hobby ze starożytnego Blue & White G3 / 300 z systemem Debian PPC Squeeze 2.6.30. Wydajność jest w porządku przez chwilę po ponownym uruchomieniu, ale w końcu staje się coraz bardziej zablokowana. W tej chwili ma 76 dni nieprzerwanego działania, a głównym winowajcą wydaje się być użycie pamięci przez ponad 10 procesów Apache2.

Myślę, że muszę obniżyć wartości dla StartServers, MinSpareServersi / lub MaxSpareServers, ale nie jestem pewien, który z nich dostosować, a dla każdego z nich są trzy sekcje, w zależności od używanego modułu mpm.

Jak powiedzieć, którą z poniższych sekcji muszę zmienić i jakie są niektóre rozsądne wartości, biorąc pod uwagę, że pudełko ma 448 MB pamięci fizycznej (dziwna historia uaktualnień dla każdej z 64, 128 i 256 pamięci)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

W moim apache2.conf nie ma żadnych innych instancji StartServers, ale żaden z tych modułów mpm nie pojawia się w mods-availablelub mods-enabled. Pomysły?

Dzięki!

UltraNurd
źródło
Przyjąłem założenie, że w twoim pudełku zaczyna brakować pamięci (a twoja kiepska wydajność wynika z dużej wymiany). Jeśli nie zamieniasz, poproszę cię o więcej szczegółów :-)
voretaq7

Odpowiedzi:

6

400 MB to dziś niewiele na serwer sieciowy - warto rozważyć wymianę skrzynki :)

To powiedziawszy, jeśli twoje użycie pamięci jest balonowe, prawdopodobnie masz gdzieś wyciek pamięci - aby szybko przetestować teraz rozmiar procesów httpd, zatrzymaj / uruchom Apache i sprawdź, czy są one znacznie mniejsze. Jeśli będą je obserwować przez kilka dni i zobacz, czy rosną.

Jeśli jest to wyciek pamięci, prawdziwym rozwiązaniem jest znalezienie i naprawienie wycieku pamięci, ale ponieważ zwykle jest to ból w tyłku, możesz również dostosować się MaxRequestsPerChilddo czegoś innego niż 0 (nieograniczony). Zabije to pracowników Apache, gdy obsłużą określoną liczbę żądań (zmuszając ich do zrezygnowania z wycieku pamięci podczas procesu.

Zacznij od większych wartości (w przybliżeniu w tysiącach) i przejdź do setek. Jeśli otrzymasz mniej niż 100 żądań na dziecko, wyciek pamięci jest wystarczająco duży, aby uzasadnić faktyczne naprawienie go, ponieważ wydajność związana z ciągłym zabijaniem i ponownym spawnowaniem pracowników apache będzie znacząca.


Re: które mpm dostosować, odpowiedź jest prawie na pewno prefork.
Możesz uruchomić httpd -Vi poszukać Server MPM:linii, która na pewno Ci powie.

voretaq7
źródło
1
-V podało mi informacje o preforkach, których potrzebowałem (chociaż w moim przypadku jest to apache2 -V). Dzięki!
UltraNurd
Wygląda na to, że załatwił sprawę. Myślę, że problem polegał na tym, że kończyło mi się pamięć fizyczna i zamieniałem się, ponieważ działało zbyt wiele serwerów potomnych (każdy pobierał około 80 MB). I tak, wiem, serwer jest stary. Ale ledwo obsługuje wszelkie żądania: oD.
UltraNurd
1
Jeśli nie obsługujesz wielu żądań, możesz także skrócić liczbę serwerów Start i Zapasowych, jak wspomniałeś w swoim pierwotnym poście (w systemach programistycznych ustawiłem je na wartości od 2 do 5, aby zmniejszyć zużycie pamięci RAM)
voretaq7
W końcu zrzuciłem minimalne i maksymalne części zamienne do 3 i 6 z 5 i 10, i wydaje się, że pozostawia to wystarczającą ilość pamięci RAM, aby zapobiec zamianie. Dzięki!
UltraNurd
1

Aby ograniczyć wykorzystanie pamięci przez proces apache, będziesz chciał dostosować MaxClients.

Ogólna zasada jest następująca: (Maks. Pożądana pamięć) / (Wykorzystanie pamięci przez 1 proces Apache) = # Maksymalna liczba klientów

Na koniec musisz również dostosować swoją wartość do MaxSpareServers <= Maksymalna liczba klientów .

Wykorzystanie pamięci przez jeden proces jest silnie zależne od modułów, które załadowałeś (php itd.), Więc możesz chcieć ustawić Max Clients nieco niżej.


źródło