worker.xml.de revision d771eceb899b21658c95cd16e7f10080801f48a3
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<?xml version="1.0"?>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<?xml-stylesheet type="text/xsl" href="/style/manual.de.xsl"?>
d771eceb899b21658c95cd16e7f10080801f48a3nd<!-- English revision: 1.17 -->
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd<!--
6fbd2e53c97ea6976d93e0ac521adabc55e0fb73nd Copyright 2003-2004 The Apache Software Foundation
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd Licensed under the Apache License, Version 2.0 (the "License");
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd you may not use this file except in compliance with the License.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd You may obtain a copy of the License at
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd http://www.apache.org/licenses/LICENSE-2.0
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd Unless required by applicable law or agreed to in writing, software
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd distributed under the License is distributed on an "AS IS" BASIS,
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd See the License for the specific language governing permissions and
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd limitations under the License.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd-->
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<modulesynopsis metafile="worker.xml.meta">
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<name>worker</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<description>Multi-Processing-Modul, das einen Hybrid-Webserver mit
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Multi-Thread und Multi-Prozess-Unterst&uuml;tzung implementiert</description>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<status>MPM</status>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<sourcefile>worker.c</sourcefile>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<identifier>mpm_worker_module</identifier>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<summary>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend mit Multi-Thread und Multi-Prozess-Unterst&uuml;tzung. Durch die Verwendung
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend von Threads f&uuml;r die Bedienung von Anfragen ist er in der Lage,
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend eine gro&szlig;e Anzahl von Anfragen mit weniger Systemressourcen als
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend ein Prozess-basierter Server zu bedienen. Er beh&auml;lt jedoch viel von
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend der Stabilit&auml;t eines Prozess-basierten Servers bei, indem er
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend mehrere Prozesse verf&uuml;gbar h&auml;lt, jeden mit etlichen Threads.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ThreadsPerChild</directive>, welche die Anzahl
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <directive module="mpm_common">MaxClients</directive>, welche die
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend maximale Gesamtzahl an Threads regelt, die gestartet werden
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend k&ouml;nnen.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</summary>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<seealso><a href="/bind.html">Bestimmen der vom Apache verwendeten Adressen
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend und Ports</a></seealso>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<section id="how-it-works"><title>Arbeitsweise</title>
d771eceb899b21658c95cd16e7f10080801f48a3nd <p>Ein einzelner Steuerprozess (der Elternprozess) ist f&uuml;r den
d771eceb899b21658c95cd16e7f10080801f48a3nd Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
d771eceb899b21658c95cd16e7f10080801f48a3nd feste Anzahl von Server-Threads, wie durch die <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ThreadsPerChild</directive>-Direktive
d771eceb899b21658c95cd16e7f10080801f48a3nd angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
d771eceb899b21658c95cd16e7f10080801f48a3nd diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
d771eceb899b21658c95cd16e7f10080801f48a3nd eintreffen.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend unbesch&auml;ftigten Threads zu verwalten, die zur Bedienung
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Prozesse, die anfangs gestartet wird, wird mit der Direktive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <directive module="mpm_common">StartServers</directive> festgelegt.
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Dann, w&auml;hrend des Betriebes, berechnet der Apache die Gesamtzahl
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend der unbesch&auml;ftigten Threads und forkt oder beendet Prozesse, um diese
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Anzahl innerhalb der durch <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">MinSpareThreads</directive> und <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">MaxSpareThreads</directive> angegebenen Grenzen
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend notwendig, die Voreinstellung dieser Direktiven zu &auml;ndern. Die
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Direktive <directive module="mpm_common">MaxClients</directive>
d771eceb899b21658c95cd16e7f10080801f48a3nd festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
d771eceb899b21658c95cd16e7f10080801f48a3nd <directive module="mpm_common">MaxClients</directive> dividiert durch
d771eceb899b21658c95cd16e7f10080801f48a3nd <directive module="mpm_common">ThreadsPerChild</directive>.</p>
d771eceb899b21658c95cd16e7f10080801f48a3nd
d771eceb899b21658c95cd16e7f10080801f48a3nd <p>Zwei Direktiven legen harte Limits f&uuml;r die Anzahl der aktiven
d771eceb899b21658c95cd16e7f10080801f48a3nd Kindprozesse fest und k&ouml;nnen nur ge&auml;ndert werden, indem der Server
d771eceb899b21658c95cd16e7f10080801f48a3nd komplett gestoppt und dann wieder neu gestartet wird. <directive
d771eceb899b21658c95cd16e7f10080801f48a3nd module="mpm_common">ServerLimit</directive> stellt die obere Grenze f&uuml;r
d771eceb899b21658c95cd16e7f10080801f48a3nd die Anzahl der aktiven Kindprozesse dar und muss gr&ouml;&szlig;er oder
d771eceb899b21658c95cd16e7f10080801f48a3nd gleich dem Quotienten aus <directive
d771eceb899b21658c95cd16e7f10080801f48a3nd module="mpm_common">MaxClients</directive> und <directive
d771eceb899b21658c95cd16e7f10080801f48a3nd module="mpm_common">ThreadsPerChild</directive> sein. <directive
d771eceb899b21658c95cd16e7f10080801f48a3nd module="mpm_common">ThreadLimit</directive> ist die obere Grenze f&uuml;r
d771eceb899b21658c95cd16e7f10080801f48a3nd die Anzahl der Server-Threads und muss gr&ouml;&szlig;er oder gleich
d771eceb899b21658c95cd16e7f10080801f48a3nd <directive module="mpm_common">ThreadsPerChild</directive> sein. Sofern f&uuml;r
d771eceb899b21658c95cd16e7f10080801f48a3nd diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
d771eceb899b21658c95cd16e7f10080801f48a3nd allen anderen <module>worker</module>-Direktiven platziert werden.</p>
d771eceb899b21658c95cd16e7f10080801f48a3nd
d771eceb899b21658c95cd16e7f10080801f48a3nd <p>Neben den normalen aktiven Kindprozessen gibt es m&ouml;glicherweise noch
d771eceb899b21658c95cd16e7f10080801f48a3nd zus&auml;tzliche Kindprozesse, welche gerade beendet werden, wo allerdings
d771eceb899b21658c95cd16e7f10080801f48a3nd zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
d771eceb899b21658c95cd16e7f10080801f48a3nd Obwohl die tats&auml;chlich zu erwartende Anzahl deutlich kleiner ist,
d771eceb899b21658c95cd16e7f10080801f48a3nd k&ouml;nnen bis zu <directive module="mpm_common">MaxClients</directive>
d771eceb899b21658c95cd16e7f10080801f48a3nd solcher Prozesse auftreten. Dieses Verhalten k&ouml;nnen Sie vermeiden,
d771eceb899b21658c95cd16e7f10080801f48a3nd indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
d771eceb899b21658c95cd16e7f10080801f48a3nd
d771eceb899b21658c95cd16e7f10080801f48a3nd <ul>
d771eceb899b21658c95cd16e7f10080801f48a3nd <li>setzen Sie den Wert von <directive module="mpm_common"
d771eceb899b21658c95cd16e7f10080801f48a3nd >MaxRequestsPerChild</directive> auf Null</li>
d771eceb899b21658c95cd16e7f10080801f48a3nd
d771eceb899b21658c95cd16e7f10080801f48a3nd <li>setzen Sie den Wert von <directive module="mpm_common"
d771eceb899b21658c95cd16e7f10080801f48a3nd >MaxSpareThreads</directive> auf den gleichen Wert wie <directive
d771eceb899b21658c95cd16e7f10080801f48a3nd module="mpm_common">MaxClients</directive></li>
d771eceb899b21658c95cd16e7f10080801f48a3nd </ul>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Eine typische Konfiguration der Prozess-Thread-Steuerung f&uuml;r
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend das MPM <module>worker</module> k&ouml;nnte wie folgt aussehen:</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <example>
d771eceb899b21658c95cd16e7f10080801f48a3nd ServerLimit 16<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend StartServers 2<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MaxClients 150<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MinSpareThreads 25<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MaxSpareThreads 75<br />
d771eceb899b21658c95cd16e7f10080801f48a3nd ThreadsPerChild 25
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend </example>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>W&auml;hrend der Elternprozess unter Unix normalerweise als
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <code>root</code> gestartet wird, um sich an Port 80 binden zu k&ouml;nnen,
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend werden die Kindprozesse und Threads unter einem weniger privilegierten
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Benutzer gestartet. Die Direktiven <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">User</directive> und <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">Group</directive> werden dazu verwendet, die
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Privilegien der Apache-Kindprozesse festzulegen. Die Kindprozesse
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend m&uuml;ssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend sollen, sollten dar&uuml;ber hinaus jedoch so wenig wie m&ouml;glich Rechte
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend besitzen. Zus&auml;tzlich, solange nicht <a
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend href="/suexec.html">suexec</a> verwendet wird, legen diese
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Direktiven auch die Privilegien fest, die von CGI-Skripts
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend geerbt werden.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p><directive module="mpm_common">MaxRequestsPerChild</directive>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend bestimmt, wie h&auml;ufig der Server Prozesse erneuert, indem er alte
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend beendet und neue startet.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</section>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
cd4620da15c004edd01caaa4716fd9cfd818b4c7nd<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
cd4620da15c004edd01caaa4716fd9cfd818b4c7nd</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>Group</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>PidFile</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>Listen</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>LockFile</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>MaxClients</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>ServerLimit</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>StartServers</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
d771eceb899b21658c95cd16e7f10080801f48a3nd<directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
d771eceb899b21658c95cd16e7f10080801f48a3nd</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>User</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</modulesynopsis>