Frage

Wir sind derzeit Apache 2.2.3 und Tomcat 5 (Embedded in JBoss 4.2.2) mit mod_proxy_jk als Anschluss.

Kann jemand etwas Licht auf die die richtige Art und Weise vergossen zu berechnen / konfigurieren, dass die Werte unter (wie auch alles andere, was relevant sein können). Sowohl Apache und Tomcat auf separaten Maschinen ausgeführt werden und haben reichlich RAM (4 GB pro Stück).

Relevante server.xml Teile:

<Connector port="8009"
           address="${jboss.bind.address}"
           protocol="AJP/1.3"
           emptySessionPath="true"
           enableLookups="false"
           redirectPort="8443"
           maxThreads="320"
           connectionTimeout="45000"
    />

Relevante httpd.conf Teile:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>
War es hilfreich?

Lösung

Sie sollten die Arbeitsbelastung berücksichtigen die Server bekommen könnten.

Der wichtigste Faktor könnte die Anzahl der gleichzeitig verbundenen Clients zu Spitzenzeiten sein. Probieren Sie es aus und stimmen Sie Ihre Einstellungen in einer Art und Weise zu bestimmen, wo:

  • gibt es genügend Verarbeitungsthreads sowohl Apache und Tomcat, dass sie brauchen keine neuen Threads zu erstellen, wenn der Server stark ausgelastet ist
  • gibt es nicht viel mehr Verarbeitungsthreads in den Servern als nötig, da sie Ressourcen verschwenden würde.

Mit dieser Art von Einrichtung Sie den internen Wartungsaufwand des Servers minimieren, dass ein große Hilfe sein könnte, vor allem, wenn Ihre Ladung sporadisch ist.

Zum Beispiel eine Anwendung überlegen, wo Sie ~ 300 neue Anfragen haben / Sekunde. Jede Anforderung erfordert im Durchschnitt 2,5 Sekunden zu dienen. Es bedeutet, dass Sie zu einem bestimmten Zeitpunkt ~ 750 Anfragen, die gleichzeitig behandelt werden müssen. In dieser Situation möchten Sie wahrscheinlich zu stimmen Ihre Server, so dass sie ~ 750 Verarbeitungs-Threads beim Start haben und man könnte so etwas wie ~ 1000 Verarbeitungsthreads maximal zu handhaben extrem hohen Belastungen.

hinzufügen möchten

Auch für genau überlegen, was benötigen Sie einen Thread für. Im vorherigen Beispiel jede Anforderung unabhängig von den anderen war, gab es keine Session-Tracking verwendet. In einem „Web-ish“ Szenario könnten Sie Benutzer auf Ihre Website angemeldet, und in Abhängigkeit von der Software verwendet, Apache und / oder Tomcat könnten den gleichen Thread verwenden, müssen die Anforderungen zu bedienen, die in einer Sitzung kommen. In diesem Fall könnten Sie mehr Threads benötigen. Doch als ich Tomcat zumindest wissen, werden Sie nicht wirklich brauchen, dies zu prüfen, wie es mit Thread-Pools intern sowieso funktioniert.

Andere Tipps

MaxClients

Dies ist die grundlegende Kappe paralleler Client-Verbindungen der Apache auf einmal behandeln soll.

Mit prefork, nur eine Anforderung kann pro Prozess behandelt werden. Deshalb ist die gesamte Apache verarbeiten kann höchstens Anfragen $ MaxClients in der Zeit dauert es eine Single Anfrage zu bearbeiten. Natürlich kann dieses Ideal maximal nur erreicht werden, wenn die Anwendung von weniger als 1 / $ MaxClients Ressourcen pro Anfrage benötigt.

Wenn zum Beispiel der Anwendung eines zweiten CPU-Zeit in Anspruch nimmt eine einzige Anfrage zu beantworten, MaxClients auf vier Einstellung wird der Durchsatz vier Anfragen pro Sekunde begrenzen: Jede Anforderung verwendet eine Apache-Verbindung und Apache werden nur vier handhaben zu einem Zeitpunkt. Aber wenn der Server nur zwei CPUs hat, nicht einmal kann dies erreicht werden, denn jede Wand Uhr an zweiter Stelle nur zwei CPU-Sekunden, aber die Anfragen würden vier CPU-Sekunden benötigen.

MinSpareServers

Dieses Fordert Apache, wie viele Leerlauf Prozesse hängen sollte. Je größer diese Zahl, desto mehr platzen Last Apache benötigen, bevor schlucken kann zusätzliche Prozesse, um zu laichen, was teuer ist und somit verlangsamt die aktuelle Anforderung hinzu.

Die richtige Einstellung hängt davon ab, Ihre Arbeitsbelastung. Wenn Sie Seiten mit vielen Unteranfragen (Bilder, iFrames, Javascript, CSS), dann eine Seite schlagen könnten viele weitere Prozesse für eine kurze Zeit aufbrauchen.

MaxSpareServers

zu viele nicht verwendete Apache-Prozesse Mit rumhängen nur Speicher verschwendet, so dass Apache die MaxSpareServers Nummer verwendet, die Menge an Ersatzprozesse zu begrenzen es für Ausbrüche von Anfragen in Reserve hält.

MaxRequestsPerChild

Dies begrenzt die Anzahl der Anfragen, ein einzelner Prozess während seiner gesamten Lebensdauer behandelt. Wenn Sie sind sehr besorgt über die Stabilität sind, sollten Sie eine tatsächliche Grenze hier setzen, um kontinuierlich die Apache-Prozesse zu recyceln, um Ressourcenlecks Beeinflussung des Systems zu verhindern.

Startserver

Dies ist nur die Menge der Prozesse Apache startet standardmäßig. Setzen Sie dies auf die übliche Menge von Apache Prozesse laufen Aufwärmzeit des Systems zu reduzieren. Auch wenn Sie diese Einstellung ignorieren, wird Apache die Verwendung Min- / MaxSpareServers Werte, neue Prozesse zu erzeugen, wie erforderlich.

Weitere Informationen

Siehe auch die Dokumentation für Apache-Multi-Processing-Module .

Die Standardeinstellungen sind in der Regel anständige Ausgangspunkte, um zu sehen, was Ihre Anwendungen gehen zu müssen, wirklich. Ich weiß nicht, wie viel Verkehr Sie erwarten, zu raten, so an den MaxThreads, MaxClients und maxservers ist ein bisschen schwierig. Ich kann Ihnen sagen, dass die meisten Kunden I mit (Arbeit für einen Linux-Web-Host, die vor allem mit den Kunden der Ausführung von Java-Anwendungen in Tomcat hat) beschäftigen schon seit geraumer Zeit die Standardeinstellung verwenden, ohne zu vielen Verbesserungen notwendig.

Wenn Sie nicht viel Verkehr erwarten, dann werden diese Einstellungen als „zu hoch“ eigentlich sollte man nicht zu viel bewirken entweder. Apache geht nicht Ressourcen für die gesamten 256 potenziellen Kunden zuzuordnen, wenn es notwendig wird. Das gleiche gilt auch für Tomcat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top