
Ich habe vor kurzem mein MPM von Perfork zu Event verschoben (und auch mod_php (php7.0) zu php-fpm (proxy_fgi)). Ich habe meine maximale gleichzeitige Verbindungslast auf etwa 300 geschätzt. Daher habe ich die folgende Konfiguration in mpm_event.conf vorgenommen
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 35
MaxRequestWorkers 350
MaxConnectionsPerChild 0
Jetzt sehe ich ein seltsames Verhalten, wenn ich den Apache2-Prozess und die Gesamtzahl der Threads mit ps beobachte
Normalerweise habe ich insgesamt etwa 12-13 Apache2-Prozesse ( ps aux | grep apache2 | wc -l
). Wenn man einen als übergeordneten Prozess betrachtet, sind es also etwa 10-11 untergeordnete Prozesse. Wenn ich mir außerdem die Gesamtzahl der Threads von Apache2 ansehe, mit
ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
Ich beobachte seit langem 408-Threads. Meine Fragen sind also:
- Wie ist es möglich, dass die Gesamtzahl der Threads über MaxRequestWorkers (350) hinaus ansteigt?
- Wie ist es möglich, dass die Gesamtzahl der Kindprozesse über StartServers (5) hinaus ansteigt?
- Was ist die Begründung für 408? (12*34?) und stößt mein Datenverkehr an ein Limit?
Danke im Vorraus für deine Hilfe
Antwort1
Ich beobachte ein ähnliches Verhalten. Mit dem Standardwert MaxRequestWorkers 150 erreiche ich bis zu 301 Threads – also 1 übergeordneter Thread und 2* MaxRequestWorkers-Threads.
Ich habe dies getestet, indem ich MaxRequestWorkers auf 40 gesetzt habe, und habe 81 erreicht.
Kann jemand dieses Apache-Verhalten bestätigen?
PS: Ich verwende Apache2 als Prefork, d. h. ThreadLimit und ThreadsPerChild werden meiner Meinung nach nicht verwendet.