Co zrobić po uderzeniu w budzące strach 256 połączeń Max Limit Apache

9

Po podrapaniu się w głowie, próbując dowiedzieć się, dlaczego moja strona reaguje tak wolno, mimo że zasoby serwera są w porządku, w końcu sprawdziłem stan Apache i znalazłem:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Wygląda na to, że mój apache jest dosłownie maksymalny dzięki połączeniom. Każdy, kto próbuje odwiedzić moją stronę, zostaje umieszczony na „liście oczekujących”, dopóki Apache nie będzie znowu wolny.

Wygląda na to, że mam dwie opcje.

A) Podnieś maksymalny limit połączeń powyżej 256. Chociaż zgodnie z tym artykułem nie jest to takie proste:

Domyślnie parametr MaxClients ma ustalony sztywny limit 256. Można to jednak zmienić, kompilując Apache. Niektóre dystrybucje lub firmy hostingowe podnoszą ten limit do bardzo wysokiej wartości, na przykład 512 lub nawet 1024, aby poradzić sobie z dużymi obciążeniami.

B) Znajdź skrypty, które zajmują zbyt dużo czasu. Wydaje mi się to o wiele trudniejsze, ponieważ większość procesów apache po prostu pojawia się, a następnie znika. Poza tym moje skrypty PHP są całkiem dobrze zoptymalizowane ... i ponownie zasoby serwera są w porządku:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Którą opcję (jeśli któraś z nich) powinienem wybrać i jak to zrobić?

EDYTOWAĆ

Więcej informacji: Wersja serwera: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

Konfert HTTP: http://pastebin.com/yBeLt6mP

Próbka żądania Parital: http://pastebin.com/vzUVDMPR

Przełącz zawijanie tekstu, jeśli przedziały wklejania pokazują się dziwnie.

kmoney12
źródło
Artykuł, który zacytowałeś, ma około 6 lat. Zmiany oprogramowania. Zobacz odpowiedź Shane'a.
Chris S
1
@ChrisS Jeszcze bardziej nieaktualne - skompilowany limit był wersją 1.x (2.0 pojawiła się w 2002 r.), A artykuł nawet wyraźnie wskazuje na dokumenty 2.0.
Shane Madden

Odpowiedzi:

10

Ten artykuł jest niedokładny; MaxClientsmoże zostać podniesiony powyżej 256 podczas korzystania z prefork MPM (to jest to, co zakładam, że używasz obecnie na podstawie opisu problemu). Z dokumentacji :

W przypadku serwerów bez wątków (tj. Prefork) MaxClientsprzekłada się na maksymalną liczbę procesów potomnych, które zostaną uruchomione w celu obsługi żądań. Wartość domyślna to 256; aby go zwiększyć, musisz także podbić ServerLimit.

ServerLimitto ten, który ma ustalony limit, ale to już przeszłość, do której powinieneś dotrzeć bez narażania serwera na inne wąskie gardło. Dokumentacja :

Istnieje sztywny limit ServerLimit 20000wkompilowania w serwer (dla prefork MPM 200000). Ma to na celu uniknięcie nieprzyjemnych efektów spowodowanych literówkami.

Jeśli więc chcesz podnieść limit klienta do czegoś takiego jak 512, to:

MaxClients 512
ServerLimit 512

Powinieneś także sprawdzić, którego MPM używasz, ponieważ MPM inne niż prefork są lepsze do skalowania. Zobacz tutaj, aby uzyskać więcej informacji.

Shane Madden
źródło
Widzę uruchomione pliki core.c i worker.c httpd -l. Myślę, że to oznacza, że ​​prowadzę MPM pracownika?
kmoney12
@hellohellosharp Rzeczywiście - w tym przypadku, będziemy chcieli, aby dostosować swój potencjalnie MaxClients, ServerLimit, ThreadsPerChild, i ThreadLimit. Czy możesz podać bieżącą konfigurację procesu roboczego httpd.conf?
Shane Madden
Tak ... czy jest jakieś niebezpieczeństwo w publikowaniu tego publicznie? Mam nadzieję, że nie, oto: pastebin.com/yBeLt6mP
kmoney12
Nie, nie ma problemów z publikowaniem większości plików httpd.conf. Tylko upewnij się, że nie masz czegoś dziwnego, jak komentarze do haseł / nazw użytkowników / itp. Te czasem pełzają w sekcjach konfiguracji proxy i tym podobnych. Wiele osób lubi też edytować adresy IP i nazwy domen, aby nie przyciągać uwagi
Chris S
1
moduł stanu może wyświetlić te szczegóły.
ETL
-1

Sugeruję użycie odwrotnego proxy, coś takiego jak nginx lub lighttpd może obsłużyć o wiele więcej połączeń niż apache. W zależności od tego, jak twoje strony używają htaccess, możesz także całkowicie używać nginx / lighttpd z fcgi i rezygnować z apache.

Shoshomiga
źródło
4
Naprawdę?? Musi dodać dwie linie konfiguracji, httpd.confa twoje rozwiązanie polega na zerwaniu większości uruchomionego oprogramowania i wymianie go ?! Każde oprogramowanie ma swoje problemy, ale niewykształcone niewłaściwe użytkowanie powoduje gorsze problemy.
Chris S
Ostatecznie nginx może obsłużyć bardziej aktywne połączenia, to do OP decyduje, którego użyć, właśnie przedstawiłem moją sugestię.
Shoshomiga