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