Apache zużywa zbyt dużo pamięci serwera, co powoduje awarię. Mam 4 GB pamięci RAM na serwerze.
Próbuję dostroić ustawienia Apache, aby poprawić jego wydajność, ale jestem w tym całkiem nowy.
Starałem się postępować zgodnie z radą tego artykułu, ale nie jestem pewien, jak to obliczyć, i wydaje mi się, że to pogarsza.
Mój top brzmi:
11697 apache 15 0 322m 37m 4048 S 0.0 0.9 0:00.52 httpd
13602 apache 15 0 323m 37m 3944 S 0.0 0.9 0:00.50 httpd
11786 apache 15 0 322m 36m 4052 S 0.0 0.9 0:00.50 httpd
12525 apache 15 0 322m 36m 4040 S 0.0 0.9 0:00.63 httpd
11806 apache 15 0 322m 36m 3952 S 0.0 0.9 0:00.42 httpd
11731 apache 15 0 322m 36m 4036 S 0.0 0.9 0:00.46 httpd
11717 apache 16 0 322m 36m 3956 S 0.0 0.9 0:00.54 httpd
11659 apache 15 0 322m 36m 3980 S 0.0 0.9 0:00.49 httpd
Tak byłoby
MaxClients = 3000/ (322-37) = 10
Czy to prawda? Jakie powinny być również wartości dla innych parametrów, takich jak MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?
Czy ktoś mógłby mi pomóc?
Aktualizacja
Próbowałem tego, co zasugerowaliście. Działa, ale tylko przez chwilę. Po pewnym czasie od uruchomienia serwera zużycie pamięci stale rośnie i nigdy nie spada.
Mam na myśli, że po uruchomieniu serwera załóżmy, że jest 500 użytkowników online. Serwer zużywa X RAM. Dwie godziny później, przy tych samych 500 użytkownikach online, serwer zużyje 10X pamięci RAM.
Czy istnieje sposób, aby tego uniknąć, czy będę musiał od czasu do czasu obserwować serwer i ponownie go uruchamiać?
źródło
Odpowiedzi:
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: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:
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”:
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.
źródło