Warum die Gesamt-Threadanzahl von Apache2 höher ist als MaxRequestWorkers

Warum die Gesamt-Threadanzahl von Apache2 höher ist als MaxRequestWorkers

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.

verwandte Informationen