Zapytanie dotyczące strojenia Apache

1

Próbuję dostroić parametry w apache dla witryny o dużym ruchu. Moje specyfikacje są

Ram : 12 GB RAM
CPU : 16 core

Aktualne parametry

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MinSpareServers 5
MaxSpareServers 10
ServerLimit 2500
MaxClients 2500
MaxRequestsPerChild 10000
KeepAlive Off
KeepAliveTimeout 5
MaxKeepAliveRequests 100

Jakie są zalecane wartości tych parametrów zgodnie ze specyfikacjami mojego serwera?

Unnikrishnan
źródło
Dlaczego masz tam zduplikowane ustawienia?
Jonas Schäfer

Odpowiedzi:

1

Na tej stronie znajduje się świetny samouczek „obliczania” ustawień. (Samouczek również poniżej, w przypadku gdy strona przejdzie w tryb offline)

Przed dostosowaniem dyrektyw musisz zrozumieć, w jaki sposób działają dyrektywy. Pozwól mi wyjaśnić prostym językiem angielskim. Serwer uruchomi 2 procesy potomne określone w dyrektywie StartServers. Każdy proces uruchomi 20 wątków, które są określone przez dyrektywę ThreadsPerChild, więc oznacza to, że 2 proces może obsłużyć tylko 40 jednoczesnych połączeń / klientów (tj. 20 × 2 = 40). Co jeśli więcej zgłoszeń się pojawi.

Teraz, jeśli przyjdzie więcej współbieżnych użytkowników, rozpocznie się kolejny proces potomny, który może obsłużyć kolejnych 20 użytkowników. Ale ile procesów potomnych można uruchomić, jest kontrolowane przez parametr ServerLimit, co oznacza, że ​​w powyższej konfiguracji mogę mieć w sumie 10 procesów potomnych, przy czym każdy proces potomny może obsłużyć 20 wątków, łącznie 10 × 20 = 200 równoczesnych użytkowników .

Ale jest problem, liczba zdefiniowana w MaxClients wynosi tutaj 100, co oznacza, że ​​po 5 procesach potomnych nie rozpocznie się żaden dodatkowy proces, ponieważ zdefiniowaliśmy górną granicę MaxClients. Oznacza to również, że jeśli ustawię MaxClients na 500, po 10 procesach potomnych i 200 połączeniach nie rozpocznie się żaden dodatkowy proces i nie będziemy mogli obsłużyć więcej niż 200 jednoczesnych klientów, nawet jeśli zwiększymy parametr MaxClient. W takim przypadku musimy również zwiększyć ServerLimit do 500/20, tj. MaxClients / ThreadsPerChild = 25

Dobra, teraz znasz dyrektywy i jak one działają, problem polega na tym, jak obliczyć dyrektywy. Przejdźmy do obliczania wartości dyrektyw.

Za pomocą tego skryptu powłoki można określić średnią ilość pamięci zużywanej przez jeden proces Apache. Oprócz tego pokaże całkowitą ilość pamięci zajętej przez wszystkie procesy Apache. Po prostu rozpakuj i uruchom za pomocą polecenia sh. Dokładne wyniki zostaną wyświetlone, gdy serwer jest obciążony.

Wyjście

Wykorzystanie pamięci Apache (MB): 57,586 Średnia wielkość procesora (MB): 10,2

Apache Memory Usage (MB): 57.586
Average Proccess Size (MB): 10.2   

jeśli średnio załóżmy, że jeden proces Apache zużywa 50 MB pamięci RAM, a serwer ma pamięć RAM o pojemności 2048 MB, a chcesz pozostawić 512 MB na pozostałe procesy, to:

MaxClients = (2048MB – 512MB)/10MB = 153.6 ~ 153
Christian Wörz
źródło