worker.xml.de revision cd4620da15c004edd01caaa4716fd9cfd818b4c7
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<?xml version="1.0"?>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<?xml-stylesheet type="text/xsl" href="/style/manual.de.xsl"?>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<!-- English revision: 1.11 -->
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>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Jeder Prozess besitzt eine feste Anzahl von Threads. Um die Last
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend zu bew&auml;ltigen, passt sich der Server an, indem er die
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Anzahl der Prozesse erh&ouml;ht oder verringert.</p>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend <p>Ein einzelner Steuerprozess ist f&uuml;r den Start der
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend feste Anzahl von Threads, wie durch die <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ThreadsPerChild</directive>-Direktive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend angegeben. Der einzelne Thread lauscht dann auf Verbindungen und
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend bedient sie, sobald sie 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>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend festgelegt, w&auml;hrend die maximale Anzahl Prozesse, die gestartet
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend werden kann, von der Direktive <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ServerLimit</directive> bestimmt wird. <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ServerLimit</directive> multipliziert mit <directive
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend module="mpm_common">ThreadsPerChild</directive> muss gr&ouml;&szlig;er
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend oder gleich <directive module="mpm_common">MaxClients</directive>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend sein.</p>
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>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend StartServers 2<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MaxClients 150<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MinSpareThreads 25<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend MaxSpareThreads 75<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend ThreadsPerChild 25<br />
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend ServerLimit 16
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>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend<directivesynopsis location="mpm_common"><name>User</name>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</directivesynopsis>
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend
b8670d4ea3a3efcd12c3e1eddf68ef6fabef49fend</modulesynopsis>