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.
źródło
Odpowiedzi:
Ten artykuł jest niedokładny;
MaxClients
moż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 :ServerLimit
to 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 :Jeśli więc chcesz podnieść limit klienta do czegoś takiego jak 512, to:
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.
źródło
httpd -l
. Myślę, że to oznacza, że prowadzę MPM pracownika?MaxClients
,ServerLimit
,ThreadsPerChild
, iThreadLimit
. Czy możesz podać bieżącą konfigurację procesu roboczegohttpd.conf
?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.
źródło
httpd.conf
a 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.