2016-04-28 6 views
6

Mam dość zajęty serwer: PHP (Wordpress) używając W3TotalCache APC, Varnish dla Apache i Cloudflare do obsługi całego ruchu. Ubuntu 14.04.4 LTSAH00161: serwer osiągnął ustawienie MaxRequestWorkers, rozważ podniesienie ustawienia MaxRequestWorkers

Tylko jedna strona ze średnią ilością około 60 000 kliknięć dziennie.

Otrzymuję tę wiadomość co jakiś czas, kilka razy dziennie. Nie ma nic wspólnego z chwilowymi skokami natężenia ruchu, dlatego porównaliśmy czasy z Google Analytics.

Thu Apr 28 14:14:42.938075 2016] [mpm_prefork:error] [pid 19137] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting 
[Thu Apr 28 15:43:25.594147 2016] [core:notice] [pid 19137] AH00051: child pid 19866 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594313 2016] [core:notice] [pid 19137] AH00051: child pid 20386 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594407 2016] [core:notice] [pid 19137] AH00051: child pid 19143 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594498 2016] [core:notice] [pid 19137] AH00051: child pid 19144 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594572 2016] [core:notice] [pid 19137] AH00051: child pid 20597 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594642 2016] [core:notice] [pid 19137] AH00051: child pid 20395 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594704 2016] [core:notice] [pid 19137] AH00051: child pid 20424 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594785 2016] [core:notice] [pid 19137] AH00051: child pid 20598 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594870 2016] [core:notice] [pid 19137] AH00051: child pid 19861 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
[Thu Apr 28 15:43:25.594957 2016] [core:notice] [pid 19137] AH00051: child pid 19782 exit signal Segmentation fault (11), possible coredump in /etc/apache2 
.... 
.... 

Więc mam podwyższone MaxRequestWorkers najpierw do 100, potem 500, teraz w 1024. Ale wciąż dzieje.

To jest mój apache2.conf w tej chwili. Kod:

<IfModule mpm_worker_module> 
StartServers 256 
MinSpareThreads 256 
MaxSpareThreads 256 
MaxClients 256 
ServerLimit 256 
ThreadLimit 256 
ThreadsPerChild 256 
MaxRequestWorkers 1024 
MaxConnectionsPerChild 0 
MaxRequestPerChild 1000 
</IfModule> 

Jest dużo wolnej pamięci RAM, a średnie obciążenie wynosi około 0,5, czasami w ciągu 1. Ale nigdy nie widziałem wyższe niż 2. Więc serwer wydaje się zdrowe, aby obsłużyć ruch.

top - 16:07:47 up 3 days, 18:18, 2 users, load average: 0.57, 0.46, 0.55 
Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 10.5 us, 2.0 sy, 0.0 ni, 87.4 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem: 8176816 total, 2372560 used, 5804256 free, 189684 buffers 
KiB Swap:  0 total,  0 used,  0 free. 1286692 cached Mem 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND                                    
21930 www-data 20 0 337212 83308 60072 S 24.9 1.0 0:52.89 apache2                                    
21945 www-data 20 0 327640 72684 58816 S 24.3 0.9 0:48.37 apache2                                    
1182 nobody 20 0 702868 442268 83496 S 0.7 5.4 42:41.32 varnishd 

Jakieś pomysły, dlaczego Apache przerywa?

// j

+0

zwiększyłem MaxRequestWorkers do 5000, serwer był stabilny przez ponad 24 godzin teraz. Najdłuższy od kilku tygodni bez konieczności ponownego uruchamiania Apache. –

+0

Ruch zwiększył się do około 2 milionów trafień dziennie i mamy te same problemy. StartServers 1024 MinSpareThreads 1024 MaxSpareThreads 1024 MaxClients 1024 ServerLimit 1024 ThreadLimit 1024 ThreadsPerChild 1024 MaxRequestWorkers 8192 MaxConnectionsPerChild 0 MaxRequestPerChild 4096 Czy jest coś, co można zrobić bez dodawania więcej serwery? –

+0

Stack Overflow to strona z pytaniami dotyczącymi programowania i programowania. To pytanie wydaje się być nie na temat, ponieważ nie chodzi o programowanie czy rozwój. Zobacz [Jakie tematy mogę tu zadać] (http://stackoverflow.com/help/on-topic) w Centrum pomocy. Być może lepszym rozwiązaniem będzie [Super użytkownik] (http://superuser.com/) lub [Unix i Linux Stack Exchange] (http://unix.stackexchange.com/). Zobacz także: [Gdzie mogę publikować pytania na temat Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Odpowiedz

6

Zasadniczo config ale overritten w: /etc/apache2/mods-available/mpm_prefork.conf

Włożyłem nowe ustawienie w tym pliku i wydaje Apache działa teraz poprawne.

Mam nadzieję, że to pomoże komuś innemu, nie umieszczaj swojej konfiguracji prosto w apache2.conf lub httpd.conf. Upewnij się, że zmieniasz wszystkie załadowane pliki konfiguracyjne.

+6

Cieszę się, że wydaje się, że zostałeś rozwiązany, ale kiedy mówisz "umieściłem nowe ustawienie w tym pliku ", do którego ustawienia się odwołujesz? Jaka była stara wartość i jaka była nowa wartość? – Danny

+3

Downvoting: ta odpowiedź nie jest przydatna dla nikogo innego - nie uwzględniasz wprowadzonych zmian ani nie przekazujesz instrukcji, co może zrobić osoba, która ma problem z jej rozwiązaniem. Zaktualizuj przydatne informacje/fragmenty config/par klucz-wartość, które zastąpiłeś/etc. –

+0

@MattRabe Downvoting za co? Dostarczona odpowiedź jest całkowicie zrozumiała, chyba że nie jesteś zaznajomiony z Apache lub ... Linux katalogi/pliki. –

0

Możesz sprawdzić swój dziennik dostępu do serwera WWW. Możesz być celem ataku xml-rpc na wypadek, gdyby log został zalany przez posty xml-rpc (np. "POST /xmlrpc.php HTTP/1.1" 200 403). Istnieje wiele sposobów, aby temu zapobiec, ale Wordpress jest na to podatny.

1

Zmodyfikowałeś niewłaściwy plik. W Twoim dzienniku pojawia się błąd "mpm_prefork". Musisz zmodyfikować plik mpm_prefork.conf zamiast mpm_worker.conf.

Możesz również użyć "apachectl -M", aby zobaczyć, jakiego modułu używasz. np. Moja apache2 korzysta mpm_event_module, więc trzeba zmodyfikować mpm_event.conf

$ apache2ctl -M 
Loaded Modules: 
core_module (static) 
so_module (static) 
watchdog_module (static) 
http_module (static) 
log_config_module (static) 
logio_module (static) 
version_module (static) 
unixd_module (static) 
access_compat_module (shared) 
alias_module (shared) 
auth_basic_module (shared) 
authn_core_module (shared) 
authn_file_module (shared) 
authz_core_module (shared) 
authz_host_module (shared) 
authz_user_module (shared) 
autoindex_module (shared) 
deflate_module (shared) 
dir_module (shared) 
env_module (shared) 
filter_module (shared) 
mime_module (shared) 
**mpm_event_module (shared)** 
negotiation_module (shared) 
setenvif_module (shared) 
status_module (shared) 
wsgi_module (shared) 
1

należy edytować mpm_prefork

<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 20 ServerLimit 2000 MaxRequestWorkers 1500 MaxConnectionsPerChild 10000 </IfModule>

Powiązane problemy