mirror of
https://github.com/apache/httpd.git
synced 2025-05-30 01:07:09 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@432360 13f79535-47bb-0310-9956-ffa450edef68
188 lines
9.2 KiB
XML
188 lines
9.2 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
|
|
<!-- English Revision: 280384:431460 (outdated) -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="worker.xml.meta">
|
|
<name>worker</name>
|
|
<description>Multi-Processing-Modul, das einen Hybrid-Webserver mit
|
|
Multi-Thread und Multi-Prozess-Unterstützung implementiert</description>
|
|
<status>MPM</status>
|
|
<sourcefile>worker.c</sourcefile>
|
|
<identifier>mpm_worker_module</identifier>
|
|
|
|
<summary>
|
|
<p>Dieses Multi-Processing-Modul (MPM) implementiert einen Hybrid-Server
|
|
mit Multi-Thread und Multi-Prozess-Unterstützung. Durch die Verwendung
|
|
von Threads für die Bedienung von Anfragen ist er in der Lage,
|
|
eine große Anzahl von Anfragen mit weniger Systemressourcen als
|
|
ein Prozess-basierter Server zu bedienen. Er behält jedoch viel von
|
|
der Stabilität eines Prozess-basierten Servers bei, indem er
|
|
mehrere Prozesse verfügbar hält, jeden mit etlichen Threads.</p>
|
|
|
|
<p>Die wichtigsten Direktiven zur Steuerung des MPMs sind <directive
|
|
module="mpm_common">ThreadsPerChild</directive>, welche die Anzahl
|
|
der Threads beeinflusst, die von jedem Kindprozess verwendet werden, und
|
|
<directive module="mpm_common">MaxClients</directive>, welche die
|
|
maximale Gesamtzahl an Threads regelt, die gestartet werden
|
|
können.</p>
|
|
</summary>
|
|
<seealso><a href="../bind.html">Bestimmen der vom Apache verwendeten Adressen
|
|
und Ports</a></seealso>
|
|
|
|
<section id="how-it-works"><title>Arbeitsweise</title>
|
|
<p>Ein einzelner Steuerprozess (der Elternprozess) ist für den
|
|
Start der Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
|
|
feste Anzahl von Server-Threads, wie durch die <directive
|
|
module="mpm_common">ThreadsPerChild</directive>-Direktive
|
|
angegeben, sowie einen "Listener-Thread", der auf Verbindungen wartet und
|
|
diese an einen Server-Thread zur Bearbeitung weiterreicht, sobald sie
|
|
eintreffen.</p>
|
|
|
|
<p>Der Apache versucht immer, einen Vorrat von <dfn>freien</dfn> oder
|
|
unbeschäftigten Threads zu verwalten, die zur Bedienung
|
|
hereinkommender Anfragen bereit stehen. Auf diese Weise brauchen
|
|
Clients nicht auf die Erstellung eines neuen Threads oder Prozesses
|
|
zu warten, bevor ihre Anfrage bedient werden kann. Die Anzahl der
|
|
Prozesse, die anfangs gestartet wird, wird mit der Direktive
|
|
<directive module="mpm_common">StartServers</directive> festgelegt.
|
|
Dann, während des Betriebes, berechnet der Apache die Gesamtzahl
|
|
der unbeschäftigten Threads und forkt oder beendet Prozesse, um diese
|
|
Anzahl innerhalb der durch <directive
|
|
module="mpm_common">MinSpareThreads</directive> und <directive
|
|
module="mpm_common">MaxSpareThreads</directive> angegebenen Grenzen
|
|
zu halten. Da dieser Prozess sehr selbstregulierend ist, ist es nur selten
|
|
notwendig, die Voreinstellung dieser Direktiven zu ändern. Die
|
|
maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
|
|
die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
|
|
Direktive <directive module="mpm_common">MaxClients</directive>
|
|
festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
|
|
<directive module="mpm_common">MaxClients</directive> dividiert durch
|
|
<directive module="mpm_common">ThreadsPerChild</directive>.</p>
|
|
|
|
<p>Zwei Direktiven legen harte Limits für die Anzahl der aktiven
|
|
Kindprozesse fest und können nur geändert werden, indem der Server
|
|
komplett gestoppt und dann wieder neu gestartet wird. <directive
|
|
module="mpm_common">ServerLimit</directive> stellt die obere Grenze für
|
|
die Anzahl der aktiven Kindprozesse dar und muss größer oder
|
|
gleich dem Quotienten aus <directive
|
|
module="mpm_common">MaxClients</directive> und <directive
|
|
module="mpm_common">ThreadsPerChild</directive> sein. <directive
|
|
module="mpm_common">ThreadLimit</directive> ist die obere Grenze für
|
|
die Anzahl der Server-Threads und muss größer oder gleich
|
|
<directive module="mpm_common">ThreadsPerChild</directive> sein. Sofern für
|
|
diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
|
|
allen anderen <module>worker</module>-Direktiven platziert werden.</p>
|
|
|
|
<p>Neben den normalen aktiven Kindprozessen gibt es möglicherweise noch
|
|
zusätzliche Kindprozesse, welche gerade beendet werden, wo allerdings
|
|
zumindest noch ein Server-Thread eine existierende Verbindung bearbeitet.
|
|
Obwohl die tatsächlich zu erwartende Anzahl deutlich kleiner ist,
|
|
können bis zu <directive module="mpm_common">MaxClients</directive>
|
|
solcher Prozesse auftreten. Dieses Verhalten können Sie vermeiden,
|
|
indem Sie die Terminierung einzelner Kindprozesse wie folgt abschalten:</p>
|
|
|
|
<ul>
|
|
<li>setzen Sie den Wert von <directive module="mpm_common"
|
|
>MaxRequestsPerChild</directive> auf Null</li>
|
|
|
|
<li>setzen Sie den Wert von <directive module="mpm_common"
|
|
>MaxSpareThreads</directive> auf den gleichen Wert wie <directive
|
|
module="mpm_common">MaxClients</directive></li>
|
|
</ul>
|
|
|
|
<p>Eine typische Konfiguration der Prozess-Thread-Steuerung für
|
|
das MPM <module>worker</module> könnte wie folgt aussehen:</p>
|
|
|
|
<example>
|
|
ServerLimit 16<br />
|
|
StartServers 2<br />
|
|
MaxClients 150<br />
|
|
MinSpareThreads 25<br />
|
|
MaxSpareThreads 75<br />
|
|
ThreadsPerChild 25
|
|
</example>
|
|
|
|
<p>Während der Elternprozess unter Unix normalerweise als
|
|
<code>root</code> gestartet wird, um sich an Port 80 binden zu kö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üssen in der Lage sein, alle Inhalte zu lesen, die sie ausliefern
|
|
sollen, sollten darüber hinaus jedoch so wenig wie möglich Rechte
|
|
besitzen. Zusä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ä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>
|