Apache 2.2 mpm_worker: mehr Threads oder mehr Prozesse?

17

Wenn Sie Worker MPM in Apache verwenden, können Sie mit der Anzahl der untergeordneten Prozesse und der Anzahl der Server-Threads pro untergeordnetem Prozess experimentieren.

Was sind die Vor- und Nachteile von jedem? Unter welchen Umständen würden Sie den einen oder anderen erhöhen?

sh-beta
quelle

Antworten:

25

Bisher waren dies meine wichtigsten Überlegungen bei der Bestimmung von Threads vs Prozessen:

  1. Threads belegen viel weniger residenten Speicher als Prozesse. Ja, bei dynamisch verknüpften Bibliotheken wird viel Speicher zwischen dem Apache Control-Prozess und seinen untergeordneten Prozessen geteilt. Jeder neue Prozess muss jedoch alle von Ihnen aktivierten Module instanziieren.

    Dies lässt sich leicht testen, indem Sie die Speichernutzung jedes Prozesses vergleichen, bei dem Sie beispielsweise entweder 5 Prozesse und 1 Thread oder 5 Prozesse und 25 Threads haben. In meinem Fall benötigt jeder untergeordnete Prozess ungefähr 7 MB, unabhängig von der Anzahl der Threads.

    + Für Themen

  2. Das Einleiten eines neuen Prozesses dauert in Bezug auf Zeit und CPU-Zyklen länger als das Einleiten eines Threads. Dies kann getestet werden, indem die durchschnittliche Anzahl der über 'ab' gelieferten Seiten überprüft wird.

    + Für Themen

  3. Alle Prozess-Threads hängen vom Prozess ab. Das größte Problem hierbei ist, dass, wenn etwas mit dem Prozess passiert, alle mit ihm verknüpften Threads davon betroffen sind. Wenn Sie mit einem einzelnen Prozess mit einer Reihe von Threads arbeiten, werden die Threads nach dem Tod des Prozesses ebenfalls ausgeführt. Mehr Prozesse würden daher eine bessere Trennung und somit eine größere Fehlertoleranz bewirken, wenn Sie so wollen.

    + Für Prozesse

  4. In Bezug auf (3) wird der Speicher von Modulen wie PHP vom Prozess geladen und von allen Threads gemeinsam genutzt. Dies bedeutet, dass, wenn Sie php mit memory_limit auf 100Mbs mit 25 Threads darunter eingestellt haben, jeder Thread bei maximaler Auslastung technisch in der Lage wäre, jeweils maximal 4MB zuzuweisen (natürlich wird dies nicht so passieren, manche werden es schwer haben, manche werden es tun) verhungern).

Letztendlich hängt es also wirklich von Ihrem Anwendungsfall ab. Allerdings sollten Sie die Anzahl der verwendeten Threads maximieren, um die Speichernutzung zu verringern und die Reaktionsfähigkeit zu erhöhen. Sie müssen dies jedoch mit einer angemessenen Anzahl von Prozessen ausgleichen, um eine bessere Fehlertoleranz zu erzielen.

Natürlich bin ich hier kein Experte, da ich mich erst in letzter Zeit damit befassen musste, also freue ich mich darauf, welche anderen Antworten hier auftauchen könnten!

jonathanserafini
quelle
1
+1 für einige gute allgemeine Informationen. Ich würde jedoch gerne mehr Tiefe / konkrete Details sehen, wenn dies möglich ist.
sh-beta