2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
4 <!-- English Revision: 1.19 -->
7 Copyright 2003-2004 The Apache Software Foundation
9 Licensed under the Apache License, Version 2.0 (the "License");
10 you may not use this file except in compliance with the License.
11 You may obtain a copy of the License at
13 http://www.apache.org/licenses/LICENSE-2.0
15 Unless required by applicable law or agreed to in writing, software
16 distributed under the License is distributed on an "AS IS" BASIS,
17 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 See the License for the specific language governing permissions and
19 limitations under the License.
22 <modulesynopsis metafile="worker.xml.meta">
24 <description>Multi-Processing-Modul, das einen Hybrid-Webserver mit
25 Multi-Thread und Multi-Prozess-Unterstützung implementiert</description>
27 <sourcefile>worker.c</sourcefile>
28 <identifier>mpm_worker_module</identifier>
31 <p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
32 mit Multi-Thread und Multi-Prozess-Unterstützung. Durch die Verwendung
33 von Threads für die Bedienung von Anfragen ist er in der Lage,
34 eine große Anzahl von Anfragen mit weniger Systemressourcen als
35 ein Prozess-basierter Server zu bedienen. Er behält jedoch viel von
36 der Stabilität eines Prozess-basierten Servers bei, indem er
37 mehrere Prozesse verfügbar hält, jeden mit etlichen Threads.</p>
39 <p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <directive
40 module="mpm_common">ThreadsPerChild</directive>, welche die Anzahl
41 der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
42 <directive module="mpm_common">MaxClients</directive>, welche die
43 maximale Gesamtzahl an Threads regelt, die gestartet werden
46 <seealso><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
47 und Ports</a></seealso>
49 <section id="how-it-works"><title>Arbeitsweise</title>
50 <p>Ein einzelner Steuerprozess (der Elternprozess) ist für den
51 Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
52 feste Anzahl von Server-Threads, wie durch die <directive
53 module="mpm_common">ThreadsPerChild</directive>-Direktive
54 angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
55 diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
58 <p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
59 unbeschäftigten Threads zu verwalten, die zur Bedienung
60 hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
61 Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
62 zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
63 Prozesse, die anfangs gestartet wird, wird mit der Direktive
64 <directive module="mpm_common">StartServers</directive> festgelegt.
65 Dann, während des Betriebes, berechnet der Apache die Gesamtzahl
66 der unbeschäftigten Threads und forkt oder beendet Prozesse, um diese
67 Anzahl innerhalb der durch <directive
68 module="mpm_common">MinSpareThreads</directive> und <directive
69 module="mpm_common">MaxSpareThreads</directive> angegebenen Grenzen
70 zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
71 notwendig, die Voreinstellung dieser Direktiven zu ändern. Die
72 maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
73 die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
74 Direktive <directive module="mpm_common">MaxClients</directive>
75 festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
76 <directive module="mpm_common">MaxClients</directive> dividiert durch
77 <directive module="mpm_common">ThreadsPerChild</directive>.</p>
79 <p>Zwei Direktiven legen harte Limits für die Anzahl der aktiven
80 Kindprozesse fest und können nur geändert werden, indem der Server
81 komplett gestoppt und dann wieder neu gestartet wird. <directive
82 module="mpm_common">ServerLimit</directive> stellt die obere Grenze für
83 die Anzahl der aktiven Kindprozesse dar und muss größer oder
84 gleich dem Quotienten aus <directive
85 module="mpm_common">MaxClients</directive> und <directive
86 module="mpm_common">ThreadsPerChild</directive> sein. <directive
87 module="mpm_common">ThreadLimit</directive> ist die obere Grenze für
88 die Anzahl der Server-Threads und muss größer oder gleich
89 <directive module="mpm_common">ThreadsPerChild</directive> sein. Sofern für
90 diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
91 allen anderen <module>worker</module>-Direktiven platziert werden.</p>
93 <p>Neben den normalen aktiven Kindprozessen gibt es möglicherweise noch
94 zusätzliche Kindprozesse, welche gerade beendet werden, wo allerdings
95 zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
96 Obwohl die tatsächlich zu erwartende Anzahl deutlich kleiner ist,
97 können bis zu <directive module="mpm_common">MaxClients</directive>
98 solcher Prozesse auftreten. Dieses Verhalten können Sie vermeiden,
99 indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
102 <li>setzen Sie den Wert von <directive module="mpm_common"
103 >MaxRequestsPerChild</directive> auf Null</li>
105 <li>setzen Sie den Wert von <directive module="mpm_common"
106 >MaxSpareThreads</directive> auf den gleichen Wert wie <directive
107 module="mpm_common">MaxClients</directive></li>
110 <p>Eine typische Konfiguration der Prozess-Thread-Steuerung für
111 das MPM <module>worker</module> könnte wie folgt aussehen:</p>
117 MinSpareThreads 25<br />
118 MaxSpareThreads 75<br />
122 <p>Während der Elternprozess unter Unix normalerweise als
123 <code>root</code> gestartet wird, um sich an Port 80 binden zu können,
124 werden die Kindprozesse und Threads unter einem weniger privilegierten
125 Benutzer gestartet. Die Direktiven <directive
126 module="mpm_common">User</directive> und <directive
127 module="mpm_common">Group</directive> werden dazu verwendet, die
128 Privilegien der Apache-Kindprozesse festzulegen. Die Kindprozesse
129 müssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
130 sollen, sollten darüber hinaus jedoch so wenig wie möglich Rechte
131 besitzen. Zusätzlich, solange nicht <a
132 href="../suexec.html">suexec</a> verwendet wird, legen diese
133 Direktiven auch die Privilegien fest, die von CGI-Skripts
136 <p><directive module="mpm_common">MaxRequestsPerChild</directive>
137 bestimmt, wie häufig der Server Prozesse erneuert, indem er alte
138 beendet und neue startet.</p>
141 <directivesynopsis location="mpm_common"><name>AcceptMutex</name>
143 <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
145 <directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
147 <directivesynopsis location="mpm_common"><name>Group</name>
149 <directivesynopsis location="mpm_common"><name>PidFile</name>
151 <directivesynopsis location="mpm_common"><name>Listen</name>
153 <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
155 <directivesynopsis location="mpm_common"><name>LockFile</name>
157 <directivesynopsis location="mpm_common"><name>MaxClients</name>
159 <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
161 <directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
163 <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
165 <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
167 <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
169 <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
171 <directivesynopsis location="mpm_common"><name>ServerLimit</name>
173 <directivesynopsis location="mpm_common"><name>StartServers</name>
175 <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
177 <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
179 <directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
181 <directivesynopsis location="mpm_common"><name>User</name>