<code>libtool</code> und <code>autoconf</code>, um eine Umgebung zu
schaffen, die der vieler anderer Open Source Projekte ähnlich
sieht.</p>
+
+ <p>Wenn Sie von einer Unterversion auf die nächste aktualisieren (z.B. von
+ 2.0.50 auf 2.0.51), springen Sie bitte zum Abschnitt <a href="#upgrading">Upgrade</a>.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Überblick für die Ungeduldigen</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#requirements">Anforderungen</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#install">Installieren</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#customize">Anpassen</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#test">Testen</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#upgrading">Upgrade</a></li>
</ul><h3>Siehe auch</h3><ul class="seealso"><li><a href="invoking.html">Apache starten</a></li><li><a href="stopping.html">Beenden und Neustarten</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="overview" id="overview">Überblick für die Ungeduldigen</a></h2>
<table>
+
<tr>
<td><a href="#download">Download</a></td>
- <td><code>$ lynx
- http://www.apache.org/dist/httpd/httpd-2_1_<em>NN</em>.tar.gz</code>
+ <td><code>$ lynx http://httpd.apache.org/download.cgi</code>
</td>
</tr>
<dd>Suchverzeichnisse für Header-Dateien
("<code>-I<em>Verzeichnis</em></code>").</dd>
- <dt><code>TARGET=...</code> [Default: <code>apache</code>]</dt>
+ <dt><code>TARGET=...</code> [Default: <code>httpd</code>]</dt>
<dd>Name der lauffähigen Datei, die erstellt wird.</dd>
Ausführen von:</p>
<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl stop</code></p></div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="upgrading" id="upgrading">Upgrade</a></h2>
+
+ <p>Der erste Schritt beim Aktualisieren besteht darin, die
+ Versionsankündigung sowie die <code>CHANGES</code>-Datei in der
+ Quelltextdistribution zu lesen, um Änderungen zu finden, die Ihr
+ System möglicherweise betreffen. Wenn Sie einen größeren
+ Versionssprung durchführen (z.B. vom 1.3 auf 2.0 oder von 2.0 auf
+ 2.2), wird es wahrscheinlich auch größere Unterschiede in der
+ Kompilier- und Laufzeitkonfiguration geben, die manuelle Nacharbeiten
+ erfordern. Außerdem müssen alle Module aktualisiert
+ werden, um den Änderungen der Modul-API gerecht zu werden.</p>
+
+ <p>Die Aktualisierung einer Unterversion auf eine andere (z.B. von 2.0.55
+ auf 2.0.57) ist einfacher. <code>make install</code> überschreibt
+ keine der bereits existierenden Dokumente, Log- und Konfigurationsdateien.
+ Ausserdem bemühen sich die Entwickler, inkompatible Änderungen
+ der <code>configure</code>-Optionen, der Laufzeitkonfiguration sowie der
+ Modul-API zu vermeiden. In den meisten Fällen sollten Sie in der
+ Lage sein, den gleichen <code>configure</code>-Befehl, die gleiche
+ Konfiguration und die gleichen Module wieder zu verwenden. (Das gilt erst
+ seit Version 2.0.41 -- frühere Versionen enthielten noch inkompatible
+ Änderungen).</p>
+
+ <p>Wenn Sie den Quellcode von Ihrer letzten Installation aufgehoben haben,
+ ist ein Upgrade sogar noch einfacher. Die Datei <code>config.nice</code> im
+ Wurzelverzeichnis des alten Quelltextbaums enthält den genauen
+ <code>configure</code>-Befehl, der verwendet wurde, um den Quellcode
+ zu konfigurieren. Um jetzt von einer Version auf die nächste zu
+ aktualisieren, kopieren Sie einfach die <code>config.nice</code> in das
+ Verzeichnis der neuen Version, passen sie bei Bedarf an, und
+ führen Sie sie aus:</p>
+
+ <div class="example"><p><code>
+ $ ./config.nice<br />
+ $ make<br />
+ $ make install<br />
+ $ <var>PREFIX</var>/bin/apachectl stop<br />
+ $ <var>PREFIX</var>/bin/apachectl start<br />
+ </code></p></div>
+
+ <div class="warning">Sie sollten jede neue Version immer in Ihrer Umgebung
+ testen, bevor Sie sie produktiv schalten. Beispielsweise können Sie
+ die neue Version neben der alten installieren, indem Sie ein anderes
+ <code>--prefix</code> und einen anderen Port wählen (durch Anpassen der
+ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>-Direktive). So
+ können Sie auf eventuelle Inkompatibilitäten testen, bevor Sie
+ endgültig die neue Version verwenden.</div>
</div></div>
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="./de/install.html" title="Deutsch"> de </a> |
<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li>
<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li>
<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
+<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadstacksize">ThreadStackSize</a></li>
<li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li>
</ul>
<h3>Themen</h3>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="how-it-works" id="how-it-works">Arbeitsweise</a></h2>
- <p>Jeder Prozess besitzt eine feste Anzahl von Threads. Um die Last
- zu bewältigen, passt sich der Server an, indem er die
- Anzahl der Prozesse erhöht oder verringert.</p>
-
- <p>Ein einzelner Steuerprozess ist für den Start der
- Kindprozesse verantwortlich. Jeder Kindprozess erstellt eine
- feste Anzahl von Threads, wie durch die <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>-Direktive
- angegeben. Der einzelne Thread lauscht dann auf Verbindungen und
- bedient sie, sobald sie eintreffen.</p>
+ <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 <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>-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
maximale Anzahl Clients, die gleichzeitig bedient werden kann (d.h.
die maximale Gesamtzahl der Threads in allen Prozessen), wird mit der
Direktive <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- festgelegt, während die maximale Anzahl Prozesse, die gestartet
- werden kann, von der Direktive <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> bestimmt wird. <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> multipliziert mit <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> muss größer
- oder gleich <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
- sein.</p>
+ festgelegt. Die maximale Anzahl der aktiven Kindprozesse ergibt sich aus
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> dividiert durch
+ <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>.</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. <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> stellt die obere Grenze für
+ die Anzahl der aktiven Kindprozesse dar und muss größer oder
+ gleich dem Quotienten aus <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> und <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> sein. <code class="directive"><a href="../mod/mpm_common.html#threadlimit">ThreadLimit</a></code> ist die obere Grenze für
+ die Anzahl der Server-Threads und muss größer oder gleich
+ <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> sein. Sofern für
+ diese Direktiven keine Voreinstellungen verwendet werden, sollten sie vor
+ allen anderen <code class="module"><a href="../mod/worker.html">worker</a></code>-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 <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
+ 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 <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code> auf Null</li>
+
+ <li>setzen Sie den Wert von <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code> auf den gleichen Wert wie <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code></li>
+ </ul>
<p>Eine typische Konfiguration der Prozess-Thread-Steuerung für
das MPM <code class="module"><a href="../mod/worker.html">worker</a></code> könnte wie folgt aussehen:</p>
<div class="example"><p><code>
+ ServerLimit 16<br />
StartServers 2<br />
MaxClients 150<br />
MinSpareThreads 25<br />
MaxSpareThreads 75<br />
- ThreadsPerChild 25<br />
- ServerLimit 16
+ ThreadsPerChild 25
</code></p></div>
<p>Während der Elternprozess unter Unix normalerweise als