Głównym parametrem dostrajania wykorzystania pamięci Apache będzie MaxClients
. Zbyt niska wartość i zabraknie dostępnych miejsc do obsługi żądań klientów. Za dużo, a zużyjesz całą pamięć RAM i zaczniesz używać przestrzeni wymiany, która zabije wydajność (może się to wydawać awarią serwera).
Jednym ze sposobów dostrajania MaxClients
jest obserwowanie zużycia pamięci przez system i dostrajanie ustawień w górę / w dół w razie potrzeby. Jeśli serwer zacznie się zamieniać, edytuj go. Jeśli serwer ma wolną pamięć, ustaw ją.
Możesz także oszacować maksymalną wartość, patrząc na użycie pamięci przez Apache. Uruchom top
i naciśnij, M
aby posortować procesy według pamięci. Powinieneś zobaczyć coś takiego:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Odejmij kolumny RES i SHR, aby uzyskać przybliżone użycie pamięci na instancję Apache. W tym przypadku jest to około 16 MB. Jeśli mam 4 GB pamięci RAM i chcę, aby 3 GB z niej było używane w Apache, moje ustawienie MaxClients będzie około:
MaxClients = 3000/16 = 188
Tak więc w tym przypadku mógłbym zacząć od wartości 150-200, ale obserwowałbym użycie pamięci i gdyby kiedykolwiek zaczęło się zbliżać do korzystania z zamiany, zmniejszyłbym MaxClients o 10-20%. Należy również pamiętać, że wartość 3 GB jest tylko przypadkowym przykładem. Na serwerach tylko z uruchomionym Apache mogę być w stanie użyć prawie wszystkich 4 GB. W innych przypadkach mogę chcieć tylko 1 lub 2 GB dla Apache, aby zapisać pozostałe dla innych aplikacji, systemu lub pamięci podręcznej.
Edycja: odpowiadanie na dodatkowe pytania
Na ogół nie ma magicznych wartości MaxClients ani innych parametrów konfiguracyjnych Apache, które spowodowałyby, że twój serwer nagle dwa razy szybciej. Wygląda na to, że niektóre serwery działają poprawnie, niezależnie od tego, czy MaxClients ma 10, czy 1000. Istnieją dwa główne przypadki, w których ustawienie MaxClients jest „złe”:
- Zbyt niska : gdy wartość MaxClients jest zbyt niska, dojdziesz do sytuacji, w której wszyscy klienci Apache są wykorzystywani, a nowe połączenia trafiają do kolejki, czekając na dostępność kolejnego klienta. Jeśli włączysz mod_status Apache, możesz zobaczyć w czasie rzeczywistym, ilu klientów jest zajętych w danym momencie. Ten stan jest stosunkowo łatwy do zdiagnozowania, ponieważ witryna stanie się wolna w czasie dużego ruchu, a wszyscy klienci będą w użyciu.
- Zbyt wysoka : gdy MaxClients jest zbyt wysoka, przejdziesz do przypadku wyczerpania całej pamięci RAM i zaczniesz używać wymiany. Gdy to nastąpi, wydajność Twojej witryny spadnie do zera (rozważ różnicę prędkości między pamięcią RAM a dyskiem). Ten stan może być znacznie trudniejszy do zaobserwowania i zdiagnozowania, ponieważ serwer będzie działał dobrze z wysokimi MaxClientami, dopóki nie wystąpi gwałtowny wzrost ruchu. Na przykład w witrynie, która otrzymuje kilka odwiedzin na godzinę, mogę ustawić MaxClients na 1000, znacznie więcej niż obsługiwana przez RAM, ale nigdy nie widziałem problemu, ponieważ Apache musiał używać tylko jednego lub dwóch klientów na raz. Wykryję problem tylko wtedy, gdy dostanę gwałtownego wzrostu ruchu, zwiększając liczbę klientów używanych jednocześnie, aż do wyczerpania pamięci RAM i potrzebnej przestrzeni wymiany.
Chociaż nie znam szczegółów twojego serwera, aplikacji ani ruchu, mogę zaproponować następujące wartości konfiguracji jako punkt wyjścia. Wypróbuj je, monitoruj obciążenie i użycie serwera oraz zmieniaj ustawienia w razie potrzeby.
- mod_status : Włącz to, abyś mógł zobaczyć użycie Apache. Aby uzyskać bardziej zaawansowane statystyki, zainstaluj aplikację monitorującą, taką jak Zabbix / Nagios, abyś mógł śledzić użycie serwera i wzorce ruchu.
- MaxClients : Ustaw na wartość 100-200. Zaczynam od niższej wartości, jeśli nie jestem pewien i monitoruję użycie pamięci / procesora / Apache. Będzie to główny parametr do poprawiania.
- MaxRequestsPerChild : Określa, kiedy klient / dziecko Apache zostanie zrestartowany. Nie ma złej wartości (chociaż bardzo małe wartości mogą być nieefektywne) i będzie to zależeć od treści, które udostępniasz. W przypadku treści dynamicznych duża wartość niezerowa (powiedzmy 1000) powstrzyma procesy httpd przed zbyt dużym powiększeniem.
- Inne parametry : Chociaż nie przeprowadziłem dokładnej analizy pozostałych parametrów, powinny one mieć stosunkowo niewielki wpływ, chyba że ustawisz je na bardzo niskie lub bardzo wysokie wartości. Korzystanie z ustawień domyślnych powinno być odpowiednie dla większości witryn. Zobacz dokumentację modułu Apache Prefork lub Worker , aby uzyskać pełny opis parametrów, który jest używany w każdym module (nie ma sensu próbować dostroić parametr, którego nie używasz).
- Benchmarking : Kiedy dostosowujesz parametry, zaleciłbym użycie narzędzia do testów porównawczych, takiego jak ab (ApacheBench) lub oblężenie, aby uzyskać liczbę ilościową na możliwościach twojego serwera. Poleganie wyłącznie na odczuciu lub gorzej, sprawdzanie, czy ulega awarii, czy nie, nie jest dobrą metodą dostrajania parametrów serwera WWW.