IBM WebSphere Application Server Advanced Edition

Handbuch zur Optimierung


Neuerungen bei der Leistungsoptimierung

Leistungsoptimierungsprogramm

Zwischenspeichern dynamischer Fragmente

Grundlagen der Optimierung

   Faktoren, die die Optimierung beeinflussen

   Symptomtabelle

   Arten der Optimierung

      Optimierung der Parameter

           Optimierungsparameter mit großen Auswirkungen auf die Leistung
           Parameter zur Vermeidung von Fehlern optimieren

    Systemwarteschlangen von WebSphere Application Server anpassen

       WebSphere-Warteschlangennetz

             Geschlossene Warteschlangen versus offene Warteschlangen
             Warteschlangeneinstellungen in WebSphere Application Server

       Einstellungen festlegen

             Warteschlangen außerhalb von WebSphere

             Durchsatzkurve zeichnen

             Warteschlangenanpassungen
             Warteschlangeneinstellungen für Zugriffsmuster anpassen

       Warteschlangen und Enterprise-Beans

       Warteschlangen und Cluster

   Secure Socket Layer optimieren

      Übersicht über Handshake und Massendatenverschlüsselung/-entschlüsselung

       Verbesserung der SSL-Leistung

   Prüfliste für die Leistung der Anwendungsassemblierung

    Java-Speicher optimieren

       Engpass durch Garbage Collection

       Die Garbage Collection als Messinstrument

       Die Überbelegung von Objekten erkennen

       Speicherlecks feststellen

       Java-Freispeicherparameter

    Anzahl der DB2-Verbindungen

    TCP-Parameter für Solaris

    Topologie des Workload Management

Einzelne Leistungsparameter

    Hardwarekapazität und -einstellungen

       Prozessorgeschwindigkeit

       Speicher

       Netz

    Einstellungen des Betriebssystems

      TCP/IP-Parameter unter Windows NT/2000

             TcpTimedWaitDelay unter Windows NT/2000
            Parameter MaxUserPort unter Windows NT/2000

       AIX (4.3.3)

             AIX-Dateideskriptoren (ulimit)

       Solaris

             Solaris-Dateideskriptoren (ulimit)
            tcp_close_wait_interval/tcp_time_wait_interval unter Solaris
             tcp_fin_wait_2_flush_interval unter Solaris
             Parameter tcp_keepalive_interval unter Solaris
             Weitere TCP-Parameter für Solaris
             Kernel-Parameter semsys:seminfo_semume unter Solaris
             Kernel-Parameter semsys:seminfo_semopm unter Solaris

       HP-UX 11

            Größe der virtuellen Seite für WebSphere Application Server JVM auf 64K setzen
             tcp_conn_request_max unter HP-UX 11
             Empfehlungen für Kernel-Parameter unter HP-UX 11

    Der Webserver

      Intervall zum erneuten Laden der Konfiguration des Webservers

       IBM HTTP Server - AIX und Solaris

             MaxClients
             MinSpareServers, MaxSpareServers und StartServers

       Netscape Enterprise Server - AIX und Solaris

             Aktive Threads

       Microsoft Internet Information Server - Windows NT/2000

             IIS-Berechtigungsmerkmale
             Anzahl der erwarteten Treffer pro Tag
             Parameter "ListenBackLog"

       IBM HTTP Server - Linux

             MaxRequestsPerChild

       IBM HTTP Server - Windows NT/2000

             ThreadsPerChild
             ListenBackLog

    Der WAS-Prozess

       Prozesspriorität des Anwendungsservers anpassen

       Webcontainer

             Maximale Anzahl der ThreadsMax-Verbindungen für Webcontainer
            Maximalanzahl der Keepalives für Transport
            Maximalanzahl der Anforderungen pro Keepalive für Webcontainertransport
             Cache für URL-Aufrufe
             Überschreitung des Grenzwerts bei Thread-Zuordnung zulassen

       EJB-Container

             Cache-Einstellungen
            CMP-Enterprise-Beans auf mehrere Enterprise-Bean-Module aufteilen

       Sicherheit

             Sicherheit inaktivieren, wenn sie nicht benötigt wird
             Zeitlimit des Sicherheits-Cache für die verwendete Umgebung optimieren
            Arten und Größen von Sicherheits-Caches (Systemparameter)
             SSL-Sitzungen richtig konfigurieren

       Object Request Broker (ORB)

            Wertübergabe versus Referenzübergabe (NoLocalCopies)
            com.ibm.CORBA.ServerSocketQueueDepth
             com.ibm.CORBA.MaxOpenConnections und Maximalgröße des Cache für ORB-Verbindungen
            Größe des Thread-Pools für Object Request Broker
             JNI ReaderManager und Reader-Threads verwenden

    Java Virtual Machines (JVMs)

       Modus -server unter Sun JDK 1.3 HotSpot

      Neue Pool-Größe für unterschiedliche Altersstufen (Generation) unter Sun JDK 1.3 HotSpot

      JIT-Compiler (Just In Time)

      Einstellungen des Freispeichers

       Klassen-Garbage-Collection

    Die Datenbank

       Datenbankposition

       Größe des Pools für WebSphere-Datenquellenverbindungen

      Größe des Cache für vorbereitete Anweisungen

       DB2

            TCP-Sockets für DB2 unter Linux verwenden
             DB2 MaxAppls
             DB2 MaxAgents
             DB2 buffpage
             DB2-Abfrageoptimierungsstufe
             DB2 reorgchk
            DB2 MinCommit

    Sitzungsverwaltung

   WebSphere Application Server Enterprise Extensions Message Listener

      Parameter "Maximum Sessions" (maximale Anzahl Sitzungen)

      Mehrere Anwendungsserver empfangen Anforderungen an derselben Warteschlange

Zusätzliche Referenzinformationen

Prozeduren von Leistungsanalyse-Tools

      Leistungsüberwachung unter Windows NT/2000 starten



Neuerungen bei der Leistungsoptimierung

Leistungsoptimierungsprogramm
Zwischenspeichern von dynamischen Fragmenten

Leistungsoptimierungsprogramm

Das Leistungsoptimierungsprogramm ist ein Tool, das im Lieferumfang von WebSphere Application Server Advanced Edition enthalten ist und die gängigsten Leistungseinstellungen für den Anwendungsserver umfasst. Mit diesem Tool können Sie die Einstellungen für Anwendungen, Servlets, Enterprise-Beans, Datenquellen und die erwartete Arbeitslast optimieren. Folgende Parameter können gesetzt werden:

Zum Aufrufen der JVM über die Administrationskonsole wählen Sie Konsole > Assistenten > Leistungsoptimierungsprogramm aus.

Weitere Informationen finden Sie im InfoCenter-Artikel 6.6.21.

Zwischenspeichern von dynamischen Fragmenten

Das Zwischenspeichern von dynamischen Fragmenten ist die Fähigkeit, die Ausgabe dynamischer Servlets und JSP-Dateien zwischenzuspeichern - eine Technologie, die die Anwendungsleistung erheblich verbessert. Dieser Zwischenspeicher arbeitet in der JVM eines Anwendungs-Servlets und fängt Aufrufe der service()-Methode eines Servlets ab. Dabei prüft er, ob er den Aufruf aus dem Zwischenspeicher beantworten kann, anstatt das Servlet erneut auszuführen. Da J2EE-Anwendungen hohe Lese-Schreib-Raten aufweisen und einen kleinen Grad an Latenzzeit in der Aktualität ihrer Daten tolerieren, kann das Zwischenspeichern von Fragmenten deutliche Verbesserungen bezüglich Antwortzeit, Durchsatz und Skalierbarkeit des Servers erzielen.

Nachdem ein Servlet ausgeführt wurde (und die Ausgabe generiert hat, die zwischengespeichert wird), wird ein Cache-Eintrag mit dieser Ausgabe generiert. Außerdem treten Nebeneffekte der Ausführung ein (d. h., andere Servlets oder JSP-Dateien werden aufgerufen), und es werden Metadaten zum Eintrag erzeugt, einschließlich Daten zu Zeitlimit und Eintragspriorität. Eindeutige Einträge werden durch eine ID-Zeichenfolge gekennzeichnet, die von dem Objekt HttpServletRequest für jeden Servlet-Aufruf generiert wird. Folglich wird ein Servlet entsprechend den Anforderungsparametern zwischengespeichert, die der URI für den Aufruf des Servlets oder der Sitzungsinformationen verwendet. Weil JSP-Dateien von WebSphere Application Server in Servlets kompiliert werden, sind JSPs und Servlets austauschbar (außer bei der Deklaration von Elementen innerhalb einer XML-Datei).

Festsetzung:

  1. Wählen Sie in der Administrationskonsole den Anwendungsserver aus, der optimiert werden soll.
  2. Klicken Sie auf Services > Webcontainerservice > Merkmale bearbeiten.
  3. Wählen Sie das Register Zwischenspeicherung von Servlets und wählen Sie das Markierungsfeld Zwischenspeicherung von Servlets aktivieren aus.
  4. Klicken Sie auf OK und speichern Sie die Änderungen.
  5. Starten Sie den Anwendungsserver erneut.

Weitere Informationen finden Sie im InfoCenter-Artikel 4.5 Zwischenspeichern dynamischer Fragmente.

Symptomtabelle

Die Symptomtabelle erlaubt Ihnen den direkten Einstieg in die Optimierung. Sie dient dazu, Ihnen eine schnellen Suche nach Symptomen zu ermöglichen und stellt zu jedem Symptom einen Link zu den zugehörigen Informationen bereit. Die Tabelle enthält folgende Arten von Informationen:

Symptom Zusätzliche Informationen
Durchsatz und Antwortzeit entsprechen nicht den Erwartungen. Prozessorgeschwindigkeit
AIX: Fehler bei der Speicherzuordnung
Solaris: Zu viele Dateien geöffnet
AIX-Dateideskriptoren (ulimit) oder Solaris-Dateideskriptoren (ulimit)
Solaris: Der Server wird während Spitzenbelastungszeiten blockiert, minutenlange Antwortzeiten, die Prozessorauslastung bleibt hoch, während sämtliche Aktivitäten in den Systemprozessen stattfinden, und netstat zeigt an, dass mehrere Sockets für Port 80 im Status CLOSE_WAIT oder FIN_WAIT_2 geöffnet sind. Solaris tcp_close_wait_interval/tcp_time_wait_interval und Solaris tcp_fin_wait_2_flush_interval
Windows NT/2000: Netstat zeigt an, dass zu viele Sockets im Status TIME_WAIT sind. Windows NT/2000 TcpTimedWaitDelay
HP-UX 11: Unerwünschter Durchsatz und die Priorität des Anwendungsservers wurde nicht angepasst. Betriebssystempriorität des WebSphere-Application-Server-Prozesses anpassen
Unter Belastung gelangen Client-Anforderungen nicht zum Webserver, weil ihr Zeitlimit abläuft oder weil sie zurückgewiesen werden. Für HP-UX 11 siehe HP-UX 11 tcp_conn_request_max
Für IIS Windows NT/2000 siehe Parameter ListenBackLog
Für IBM HTTP Server unter NT siehe ListenBackLog
Windows NT/2000: Die Leistung von WebSphere Application Server verringert sind, nachdem ein Anwendungsserver eines anderen Herstellers installiert wurde. Merkmale der IIS-Berechtigung
Die Metrik für den Grenzwert in Prozent im Resource Analyzer zeigt an, dass der Thread-Pool des Webcontainers zu klein ist. Maximale Anzahl der ThreadsMax-Verbindungen für Webcontainer
Netstat zeigt, dass zu viele Sockets im Status TIME_WAIT für Port 9080 geöffnet sind. Maximalanzahl der Keepalives für Webcontainertransport
Während der Auslagerung von Speicherseiten finden zu viele Ein-/Ausgabeoperationen auf der Platte statt. Einstellungen des Freispeichers
Die Metrik für Belegung in Prozent im Resource Analyzer zeigt für einen Pool für Datenquellenverbindungen an, dass die Poolgröße zu hoch ist. Größe des Pools für WebSphere-Datenquellenverbindungen
Die Metrik für den Cache für vorbereitete Anweisungen (Prepared Statement Cache) im Resource Analyzer zeigt an, dass die Größe des Cache für vorbereitete Anweisungen für die Datenquelle zu niedrig ist. Größe des Cache für vorbereitete Anweisungen
Beim Schreiben von DB2-Protokollsätzen finden zu viele Ein-/Ausgabeoperationen statt. DB2 MinCommit
Die Metrik für Grenzwert in Prozent im Resource Analyzer zeigt an, dass der Thread-Pool für Object Request Broker zu klein ist. Warteschlangen und Enterprise-Beans
Die JVMPI-Schnittstelle (Java Virtual Machine Profiler Interface) von Resource Analyzer zeigt eine Überbelegung der Objekte an, wenn für die Garbage Collection zu viel Zeit benötigt wird. Die Überbelegung von Objekten erkennen
Die Metrik für belegten Speicher im Resource Analyzer zeigt Speicherlecks an und Java zeigt die Ausnahmebedingung Out of Memory (Kein Speicher) an. Speicherlecks erkennen
Durchsatz, Antwortzeit und Skalierbarkeit entsprechen nicht den Erwartungen. Falls dies die Anwendung erlaubt, nutzen Sie das Zwischenspeichern dynamischer Fragmente.

Grundlagen der Optimierung

Mit Hilfe der Optimierungsprozeduren können Sie für WebSphere Application Server eine Vielzahl von Leistungsverbesserungen erzielen. Dieses Handbuch zur Optimierung zeigt Ihnen, wie die Optimierung funktioniert, indem es allgemeine Empfehlungen gibt und spezielle Optimierungsmethoden beschreibt. Außerdem enthält es Hinweise und Tipps zu den verschiedenen Faktoren und Variablen, die zur Leistungsoptimierung beitragen können.

Verwenden Sie die Beispiele und Informationen im Handbuch zur Optimierung, um mehr über die Optimierung zu erfahren. Die Optimierung ist ein fortlaufender Lernprozess. Ihre Ergebnisse können von den Ergebnissen in diesem Handbuch abweichen.

Faktoren, die die Optimierung beeinflussen

Nachfolgend sind alle Komponenten aufgeführt, die die Leistung des WebSphere Application Server beeinflussen können: Jede dieser Komponenten verfügt über eigene Optimierungsoptionen mit unterschiedlicher Bedeutung und Wirkung. Die oben genannten Komponenten werden detailliert im Abschnitt Einzelne Leistungsparameter in dieser Dokumentation erläutert.

Zu Ihrer Unterstützung werden in diesem Handbuch Prozeduren zum Festlegen von Parametern in anderen Produkten beschrieben. Weil diese Produkte Änderungen unterliegen können, sollten Sie diese Prozeduren lediglich als Empfehlungen betrachten.

Arten der Optimierung

Es gibt zwei Arten der Optimierung: die Anwendungsoptimierung und die Parameteroptimierung.

Obwohl die Anwendungsoptimierung manchmal die größten Optimierungsverbesserungen erzielt, konzentriert sich dieses Handbuch auf die einzelnen Leistungsparameter und ihr Zusammenwirken.

Das White Paper WebSphere Application Server Development Best Practices for Performance and Scalability behandelt die Anwendungsoptimierung und beschreibt die am besten geeigneten Entwicklungsmethoden für Webanwendungen, die Servlets, JSP-Dateien (Java Server Pages) und JDBC (Java Database Connectivity) enthalten, und die am besten geeigneten Entwicklungsmethoden für Unternehmensanwendungen, die Enterprise-Bean-Komponenten enthalten.

Optimierung der Parameter

Die Optimierung der Parameter umfasst das Ändern der Einstellungen von WebSphere Application Server zum Zweck der Leistungsoptimierung. Die in diesem Handbuch empfohlenen Werte sind allgemeine Richtlinien. Die optimalen Einstellungen für Ihre Umgebung können davon erheblich abweichen. Außerdem sollten Sie bedenken, dass nach dem Beseitigen eines Engpasses ein anderer Engpass auftreten kann, der damit nicht zusammenhängt. In diesem Fall werden Sie erst dann eine Leistungsverbesserung feststellen, wenn Sie beide Engpässe beseitigt haben.

Dieser Abschnitt beschreibt zwei Arten von Optimierungsparameter:
Optimierungsparameter mit großen Auswirkungen auf die Leistung
Diese Parameter erzielen hohe Leistungsverbesserungen. Sie bilden eine Teilgruppe aller Parameter und haben hohe Auswirkungen auf die Leistung. Da sie von den Anwendungen abhängig sind, können die geeigneten Parametereinstellungen für Anwendung und Umgebung verschieden sein.

Die folgende Tabelle listet verschiedene Optimierungsparameter mit hoher Leistungsverbesserung auf:

Prüfliste für die Leistung der Anwendungsassemblierung
Systemwarteschlangen von WebSphere Application Server anpassen
Wertübergabe versus Referenzübergabe (NoLocalCopies)
TCP-Parameter unter Solaris anpassen
Java-Speicher optimieren
MaxRequestsPerChild anpassen: unter Linux mit IBM HTTP Server
Größe des Pools für Datenquellenverbindungen in WebSphere Application Server anpassen
Größe des Cache für vorbereitete Anweisungen anpassen
Intervall zum erneuten Laden der Konfiguration des Webservers
Größe des Cache für vorbereitete Anweisungen anpassen
Cache mit permanenter Sitzung verwenden
Parameter zur Vermeidung von Fehlern optimieren

Die folgenden Parameter helfen Ihnen dabei, funktionale Fehler zu vermeiden:

Parameter ListenBackLog: anwendbar bei Verwendung von Windows NT/2000 mit IIS unter hoher Client-Auslastung
Transporttyp: Verwenden Sie INET-Sockets unter Solaris (Standardeinstellung für WebSphere Application Server).
Anzahl von DB2-Verbindungen: wenn Sie mehr Verbindungen herstellen, als DB2 standardmäßig festlegt
Überschreitung des Grenzwerts bei Thread-Zuordnung zulassen wurde ausgewählt und das System ist überlastet, weil zu viele Threads zugeordnet wurden.
TCP-Sockets für DB2 unter Linux verwenden: für lokale Datenbanken
Größe des Pools für WebSphere-Datenquellenverbindungen: Achten Sie darauf, dass genügend Verbindungen vorhanden sind, damit die zusätzlichen Verbindungen aufgebaut werden können, die zur Transaktionsverarbeitung mit Entity-EJBs erforderlich sind, und damit ein gegenseitiges Sperren vermieden wird.

Warteschlangen in WebSphere Application Server anpassen

WebSphere Application Server verfügt über mehrere Komponenten, die in Wechselbeziehung zueinander stehen und harmonisch optimiert werden müssen, um die speziellen Anforderungen Ihrer End-to-End-e-business-Anwendung zu unterstützen. Diese Anpassungen erlauben es Ihrem System, einen maximalen Durchsatz zu erzielen, während gleichzeitig die Stabilität des Systems erhalten bleibt.

Warteschlangennetz

WebSphere Application Server baut ein Warteschlangennetz auf. Dies ist ein Netz von untereinander verbundenen Warteschlangen, die die verschiedenen Komponenten der Anwendungs-Serving-Plattform darstellen. Diese Warteschlangen umfassen Netz, Webserver, Webcontainer, EJB-Container, Datenquelle und eventuell einen Verbindungsmanager zu einem Back-End-System des Benutzers. Jede dieser Ressourcen stellt eine Warteschlange mit Anforderungen dar, die darauf warten, die Ressource zu nutzen.

Die WebSphere-Warteschlangen sind lastabhängige Ressourcen. Die durchschnittliche Servicezeit für eine Anforderung ist abhängig von der Anzahl gleichzeitig vorhandener Clients.

Geschlossene Warteschlangen versus offene Warteschlangen

Die meisten Warteschlangen, aus denen das Warteschlangennetz besteht, sind geschlossene Warteschlangen. Im Gegensatz zu einer offenen Warteschlange beschränkt eine geschlossene Warteschlange die maximale Anzahl der Anforderungen in der Warteschlange.

Eine geschlossene Warteschlange ermöglicht die exakte Steuerung der Systemressourcen. Beispielsweise wird mit der Einstellung "Maximalanzahl der Verbindungen" des Webcontainers die Größe der Warteschlange des Webcontainers gesteuert. Wenn das durchschnittliche Servlet in einem Webcontainer während jeder Anforderung 10 MB an Objekten erstellt, begrenzt der Wert 100 für "Maximalanzahl der Verbindungen" den Speicher, der vom Webcontainer verwendet werden darf, auf 1 GB.

In einer geschlossenen Warteschlange kann eine Anforderung einen der folgenden Status haben: aktiv oder wartend. Eine aktive Anforderung führt entweder eine Arbeit aus oder wartet auf die Antwort einer untergeordneten Warteschlange. Beispiel: Eine aktive Anforderung im Webserver führt entweder eine Arbeit aus (z. B. statisches HTML abrufen) oder wartet darauf, dass eine Anforderung im Webcontainer beendet wird. Im Status "Warten" wartet die Anforderung darauf, aktiv zu werden. Die Anforderung bleibt so lange im Status "Warten", bis eine der aktiven Anforderungen die Warteschlange verlässt.

Alle von WebSphere Application Server unterstützten Webserver sind geschlossene Warteschlangen genauso wie die Datenquellen unter WebSphere Application Server. Webcontainer können als offene oder geschlossene Warteschlangen konfiguriert werden. In der Regel sollten sie geschlossen sein. EJB-Container sind offene Warteschlangen. Wenn keine Threads im Pool zur Verfügung stehen, wird für die Dauer der Anforderung ein neuer Thread erstellt.

Wenn Enterprise-Beans durch Servlets aufgerufen werden, begrenzt der Webcontainer die Gesamtzahl der gleichzeitig aktiven Anforderungen für einen EJB-Container, da der Webcontainer selbst begrenzt ist. Dies gilt nur für den Fall, dass Enterprise-Beans von dem Ausführungs-Thread des Servlets aufrufen werden. Sie können jedoch ungehindert eigene Threads erstellen und zahllose Anforderungen an den EJB-Container senden. Dies ist einer Gründe, warum Servlets keine eigenen Arbeits-Threads erstellen sollten.

Warteschlangeneinstellungen in WebSphere Application Server

Nachfolgend sind die verschiedenen Warteschlangeneinstellungen aufgeführt:

Die Einstellungen festlegen

Der folgende Abschnitt erläutert eine Methode zur Konfiguration der Warteschlangen unter WebSphere Application Server. Sie können die dynamischen Elemente des Systems und folglich die Optimierungsparameter ändern, indem Sie Ressourcen verschieben (z. B. indem Sie den Datenbankserver auf eine andere Maschine verschieben) oder indem Sie sie durch leistungsstärkere Ressourcen ersetzen, z. B. durch schnellere CPUs mit höherer Speicherkapazität. Auf diese Weise können Sie die Optimierungsparameter für eine spezifische Konfiguration der Produktionsumgebung anpassen.

Warteschlangen außerhalb von WebSphere

Die erste Regel der Optimierung erfordert, dass die Anzahl der Anforderungen in den Warteschlangen von WebSphere Application Server auf ein Mindestmaß reduziert wird. Es ist im allgemeinen besser, dass Anforderungen im Netz (vor dem Webserver) und nicht im WebSphere Application Server warten. In dieser Konfiguration werden nur Anforderungen im Warteschlangennetz akzeptiert, die zur Verarbeitung bereit sind. Um diese Konfiguration festzulegen, müssen die Warteschlangen, die am Anfang des Verarbeitungsprozesses stehen (d. h., die dem Client am nächsten sind) etwas größer sein, und die Warteschlangen, die im Verarbeitungsprozess folgen (d. h. weiter vom Client entfernt sind) müssen fortlaufend kleiner werden.

Die Warteschlangen in diesem Warteschlangennetz werden umso kleiner, je weiter sie vom Ausgangspunkt des Verarbeitungsprozesses entfernt sind. Wenn 200 Clients den Webserver erreichen, bleiben 125 Anforderungen im Warteschlangennetz, da der Webserver nur 75 Client-Anforderungen gleichzeitig verarbeiten kann. Wenn die 75 Anforderungen vom Webserver an den Webcontainer übergeben werden, bleiben 25 in der Warteschlange des Webservers, und die verbleibenden 50 werden vom Webcontainer verarbeitet. Dieser Vorgang wird durch die Datenquelle fortgesetzt, bis 25 Benutzer das Ziel, d. h. den Datenbankserver, erreichen. Da an jedem Punkt im vorausgehenden Prozessverlauf Arbeit für eine Komponente ansteht, muss keine Komponente in diesem System auf Arbeit warten. Der Großteil der Anforderungen wartet im Netz, außerhalb von WebSphere Application Server. Da keine Komponente überlastet wird, führt dies zu einer größeren Stabilität. Routing-Software wie der Network Dispatcher von IBM kann wartende Benutzer an anderer Server in einem Cluster von WebSphere Application Server leiten.

Eine Durchsatzkurve zeichnen

Führen Sie unter Verwendung eines Testbeispiels, das repräsentativ für Ihre Produktionsanwendung ist (das z. B. alle wichtigen Codepfade ausführt) oder unter Verwendung der Produktionsanwendung selbst eine Reihe von Tests durch, um die maximale Leistung der Systemkomponenten (den sogenannten Sättigungspunkt) zu bestimmen. Sie sollten diese Tests erst ausführen, nachdem die meisten Engpässe aus der Anwendung entfernt wurden. Ziel dieser Tests ist es, die CPUs zu fast 100 % auszulasten.

Starten Sie den Ausgangstest mit großen Warteschlangen. Dadurch ist ein maximaler gemeinsamer Zugriff im System möglich. Starten Sie z. B. den ersten Test mit einer Warteschlangengröße von 100 an jedem Server im Warteschlangennetz: Webserver, Webcontainer und Datenquelle.

Starten Sie als Nächstes eine Reihe von Tests zum Zeichnen einer Durchsatzkurve, wobei Sie die gleichzeitig angemeldeten Benutzer nach jedem Test erhöhen. Führen Sie z. B. jeden Versuch mit 1 Benutzer, 2 Benutzern, 5, 10, 25, 50, 100, 150 und 200 Benutzern durch. Zeichnen Sie nach jeder Ausführung den Durchsatz (Anforderungen pro Sekunde) und die Antwortzeiten (Sekunden pro Anforderung) auf.

Die Kurve aus Ihrem Ausgangstest sollte der folgenden typischen Durchsatzkurve ähneln:

Der Durchsatz von WebSphere Application Server ist eine Funktion der Anzahl gleichzeitig stattfindender Anforderungen in einem Gesamtsystem. Bereich A mit der niedrigen Belastung zeigt, dass sich der Durchsatz bei zunehmender Zahl gleichzeitig angemeldeter Benutzer nahezu linear mit der Anzahl der Anforderungen erhöht. Dies spiegelt die Tatsache wider, dass bei gleichzeitigen Anforderungen bei niedriger Belastung nur eine geringe Überlastung in den Systemwarteschlangen von WebSphere Application Server auftritt. Ab einem bestimmten Punkt entsteht eine Überlastung, und der Durchsatz erhöht sich immer langsamer, bis er einen Sättigungspunkt erreicht, der den maximalen Durchsatzwert darstellt und durch einen Engpass im WebSphere-Application-Server-System bestimmt wird. Die beste Art von Engpass liegt vor, wenn die CPUs der WebSphere-Application-Server-Maschinen überlastet sind. Dies ist deshalb erstrebenswert, weil ein CPU-Engpass durch Hinzufügen von zusätzlichen oder leistungsstärkeren CPUs beseitigt werden kann.

Im Bereich der hohen Belastung, Bereich B, bleibt der Durchsatz bei wachsender Belastung durch gleichzeitige Client-Anforderungen relativ konstant. Allerdings erhöht sich die Antwortzeit proportional zur Benutzerlast. Wenn die Benutzerlast folglich im Bereich der hohen Belastung verdoppelt wird, verdoppelt sich auch die Antwortzeit. An einem bestimmten Punkt, dargestellt durch Bereich C, den Umkehrbereich, wird eine der Systemkomponenten erschöpft. Ab diesem Punkt nimmt der Durchsatz ab. Beispielsweise könnte das System den Umkehrbereich erreichen, wenn die Netzverbindungen am Webserver die Grenzwerte des Netzadapters erreichen oder wenn die Grenzwerte des Betriebssystems für Dateikennungen überschritten werden.

Wird der Sättigungspunkt erreicht, weil die CPUs des Systems zu fast 100 % belegt sind, fahren Sie mit dem nächsten Schritt fort. Wird die CPU nicht zu 100 % belegt, liegt wahrscheinlich ein Engpass vor, der durch die Anwendung verstärkt wird. Beispielsweise könnte die Anwendung eine übermäßig hohe Anzahl von Java-Objekten erstellen, die Engpässe bei der Garbage Collection in Java verursachen.

Engpässe bei der Anwendung können auf zwei Arten beseitigt werden: durch Beseitigen des Engpasses oder durch Klonen des Engpasses. Die beste Methode ist das Beseitigen des Engpasses. Untersuchen Sie die Gesamtauslastung der Objekte mit Hilfe eines Java-basierten Anwendungs-Profiler. Dazu können Profiler wie z. B. Performance Trace Data Visualizer (PTDV), JProbe und Jinsight verwendet werden.

Warteschlangenanpassungen

Die Anzahl gleichzeitig angemeldeter Benutzer am Durchsatzsättigungspunkt entspricht der maximalen Anzahl gleichzeitiger Anforderungen an die Anwendung. Beispiel: Wenn der Sättigungspunkt der Anwendung für WebSphere Application Server bei 50 Benutzern lag, ergeben möglicherweise 48 Benutzer die beste Kombination aus Durchsatz und Antwortzeit. Dieser Wert wird "Max Application Concurrency" (maximale Anzahl gleichzeitiger Anwendungszugriffe) bezeichnet. Dieser Wert sollte als Grundlage für die Anpassung der Systemwarteschlangen von WebSphere Application Server dienen. Denken Sie daran, dass es sinnvoll ist, wenn die meisten Benutzer im Netz warten. Verringern Sie daher die Größen der Warteschlangen, je weiter entfernt sie vom Client liegen. Beispiel: Bei einem Wert für maximale Anzahl gleichzeitiger Anwendungszugriffe (Max Application Concurrency) von 48 sollten die Systemwarteschlangen auf folgende Anfangswerte gesetzt werden: Webserver 75, Webcontainer 50, Datenquelle 45. Führen Sie mehrere zusätzliche Tests durch, bei denen Sie diese Werte leicht erhöhen oder verringern, um die besten Einstellungen zu ermitteln.

Mit Hilfe des Resource Analyzer kann die Anzahl der gleichzeitig angemeldeten Benutzer durch die Metrik "Anzahl der gleichzeitig aktiven Threads" für den Thread-Pool der Servlet-Maschine bestimmt werden.

In Leistungstests konnte der Durchsatz um 10 - 15 % erhöht werden, wenn die Maximalanzahl der Keepalives für Webcontainertransport auf die Maximalanzahl der Webcontainer-Threads gesetzt wurde.

Warteschlangeneinstellungen für Zugriffsmuster anpassen

In vielen Fällen wird nur ein Bruchteil der Anforderungen in einer Warteschlange an die nächste untergeordnete Warteschlange übergeben. In einer Site mit vielen statischen Seiten werden viele Anforderungen vom Webserver beantwortet und daher nicht an den Webcontainer übergeben. In solchen Fällen kann die Warteschlange des Webservers erheblich größer sein als die des Webcontainers. Im vorherigen Abschnitt wurde die Warteschlange des Webservers auf 75 und nicht auf einen Wert näher an der maximalen Anzahl gleichzeitiger Anwendungszugriffe (Max Application Concurrency) gesetzt. Ähnliche Anpassungen müssen vorgenommen werden, wenn unterschiedliche Komponenten unterschiedliche Ausführungszeiten haben.

Beispiel: In einer Anwendung, die 90 % ihrer Zeit in einem komplexen Servlet verbringt und nur 10 % ihrer Zeit für eine kurze JDBC-Abfrage verbraucht, verwenden durchschnittlich 10 % der Servlets Datenbankverbindungen, so dass die Warteschlange für Datenbankverbindungen bedeutend kleiner sein kann als die Warteschlange des Webcontainers. Umgekehrt sollten die Warteschlangenwerte für den Webcontainer und die Datenquelle erhöht werden, wenn ein Großteil der Ausführungszeit eines Servlets für die Erstellung komplexer Datenbankabfragen verwendet wird. Überwachen Sie stets die Auslastung von CPU und Speicher für den WebSphere Application Server und die Datenbankserver, um sicherzustellen, dass weder CPU noch Speicher erschöpft werden.

Warteschlangen und Enterprise-Beans

Methodenaufrufe von Enterprise-Beans werden nur dann in eine Warteschlange gestellt, wenn der Client, der die Methode aufruft, ein ferner Client ist, d. h., wenn der EJB-Client auf einer anderen Java Virtual Machine läuft (anderer Adressraum) als die Enterprise-Bean. Umgekehrt läuft die EJB-Methode auf demselben Ausführungs-Thread wie der EJB-Client (ohne Speichern in einer Warteschlange), wenn der EJB-Client (entweder ein Servlet oder eine andere Enterprise-Bean) auf derselben JVM installiert ist.

Ferne Enterprise-Beans kommunizieren unter Verwendung des Protokolls RMI/IIOP. Methodenaufrufe, die über RMI/IIOP eingeleitet werden, werden von einem ORB auf der Serverseite verarbeitet. Der Thread-Pool fungiert als Warteschlange für ankommende Anforderungen. Wenn jedoch eine ferne Methodenanforderung erfolgt und im Thread-Pool keine Threads mehr zur Verfügung stehen, wird ein neuer Thread erstellt. Dieser Thread wird gelöscht, nachdem die Methodenanforderung beendet wurde. Wenn daher der ORB zur Verarbeitung ferner Methodenanforderungen verwendet wird, ist der EJB-Container auf Grund seiner unbegrenzten Verwendung von Threads eine offene Warteschlange. Die nachfolgende Abbildung zeigt die Warteschlangenoptionen von Enterprise-Beans.

Bei der Konfiguration des Thread-Pools ist es wichtig, die Aufrufmuster des EJB-Clients zu verstehen. Wenn ein Servlet eine geringe Anzahl von Aufrufen für ferne Enterprise-Beans tätigt und jeder Methodenaufruf relativ schnell erfolgt, sollte die Anzahl der Threads im ORB-Thread-Pool auf einen Wert gesetzt werden, der kleiner ist als der Wert für die Thread-Pool-Größe des Webcontainers.

Resource Analyzer zeigt eine Metrik mit der Bezeichnung "Grenzwert in Prozent" an, die die Zeitperiode festlegt, während der alle konfigurierten Threads verwendet werden. Ist dieser Wert fortlaufend eine zweistellige Zahl, dann könnte der ORB ein Engpass sein und die Anzahl der Threads sollte erhöht werden.

Der Grad, in dem der Wert des ORB-Thread-Pools erhöht werden muss, ist eine Funktion der Anzahl gleichzeitig laufender Servlets (d. h. Clients), die Enterprise-Beans aufrufen, und der Dauer jedes Methodenaufrufs. Wenn die Methodenaufrufe länger sind, sollte die Größe des ORB-Thread-Pools auf die Größe des Webcontainers gesetzt werden, weil sich ferne Methodenaufrufe nur geringfügig überschneiden. Wenn das Servlet nur kurze oder schnelle ORB-Aufrufe an den ORB ausführt, kann der ORB-Thread-Pool klein sein. Ein ORB-Thread kann von mehreren Servlets verwendet werden. In diesem Fall kann der ORB-Thread-Pool klein sein, vielleicht nur halb so groß wie der Thread-Pool des Webcontainers. Wenn die Anwendung viel Zeit im ORB verbringt, sollten sich die Größen von Webcontainer und ORB besser entsprechen.

Warteschlangen und Cluster

Die Möglichkeiten des Klonens von Anwendungsservern kann bei der Konfiguration hochskalierbarer Produktionsumgebungen sehr wertvoll sein. Dies gilt besonders für den Fall, dass in der Anwendung Engpässe auftreten, die die vollständige CPU-Auslastung von SMP-Servern (SMP = Symmetric Multiprocessing) verhindert. Wenn Sie Systemwarteschlangen von WebSphere Application Server in Cluster-Konfigurationen anpassen, denken Sie daran, dass beim Hinzufügen eines Servers zu einem Cluster der untergeordnete Server die doppelte Last empfängt.

Zwei Webcontainer-Klone befinden sich zwischen einem Webserver und einer Datenquelle. Es wird davon ausgegangen, dass der Webserver, die Servlet-Maschinen und die Datenquelle (aber nicht die Datenbank) alle auf einem einzigen SMP-Server laufen. Unter diesen Voraussetzungen müssen folgende Überlegungen hinsichtlich der Warteschlangen angestellt werden:

Secure Socket Layer optimieren

SSL (Secure Socket Layer) muss folgende zwei Arten von SSL-Leistungen erbringen:

Übersicht über Handshake und Massendatenverschlüsselung/-entschlüsselung

Wenn eine SSL-Verbindung hergestellt wird, findet ein SSL-Handshake statt. Nachdem die Verbindung aufgebaut wurde, führt SSL für jede Lese-/Schreiboperation eine Massendatenverschlüsselung/-entschlüsselung (bulk encryption/decryption) durch. Die Leistungsverminderung durch einen SSL-Handshake ist viel höher als die durch die Massendatenverschlüsselung/-entschlüsselung.

Verbesserung der SSL-Leistung

Zur Verbesserung der SSL-Leistung muss die Anzahl der einzelnen SSL-Verbindungen und -Handshakes verringert werden.

Wird die Anzahl der Verbindungen verringert, erhöht sich die Leistung der geschützten Datenübertragungen über SSL-Verbindungen sowie die Leistung der nicht geschützten Datenübertragungen über einfache TCP-Verbindungen. Eine Möglichkeit, SSL-Verbindungen zu verringern, besteht in der Verwendung eines Browsers mit Unterstützung von HTTP 1.1. Die Verringerung von SSL-Verbindungen ist nicht möglich, wenn einige Benutzer keinen Upgrade auf HTTP 1.1 durchführen können.

Häufiger wird die Anzahl der Verbindungen (TCP und SSL) zwischen zwei WebSphere-Application-Server-Komponenten verringert. Mit Hilfe der folgenden Richtlinien können Sie sicherstellen, dass der HTTP-Transport des Anwendungsservers so konfiguriert ist, dass das Webserver-Plug-In nicht wiederholt neue Verbindungen zum Anwendungsserver öffnen muss.

Größe des Cache für vorbereitete Anweisungen

Weitere JDBC-Parameter
Neben der Größe des Cache für vorbereitete Anweisungen können Sie auch weitere spezielle Merkmale für JDBC-Treiber einstellen. Mit Oracle können Sie z. B. die Anzahl der Zeilen erhöhen, die beim Anzeigen der Ergebnisse mit der folgenden Anweisung abgerufen werden sollen:
name="defaultRowPrefetch", value="25"
Geben Sie diese benutzerdefinierten Merkmale im Register Allgemein für die Datenbank ein.

DB2

DB2 verfügt über viele Parameter, die zur Optimierung der Datenbankleistung konfiguriert werden können. Ausführliche Informationen zur Optimierung von DB2 finden Sie in der Dokumentation "DB2 UDB Administration Guide: Performance".
TCP-Sockets für DB2 unter Linux verwenden
DB2 MaxAppls
DB2 MaxAgents
DB2 buffpage
DB2-Abfrageoptimierungsstufe
DB2 reorgchk
DB2 MinCommit

Sitzungsverwaltung

Zusätzliche Informationen zum Festlegen von Parametern für die Sitzungsverwaltung finden Sie im InfoCenter-Artikel 4.4.1.1Programmierungsmodell und Umgebung für Sitzungen.

WebSphere Application Server Enterprise Extensions Message Listener

WebSphere Application Server Enterprise Extensions bietet Unterstützung für Extended Messaging Support. Dieser Abschnitt enthält Empfehlungen zur Optimierung der JMS-Listener-Funktion, die Teil von Extended Messaging Support ist.

Parameter "Maximum Sessions" (maximale Anzahl Sitzungen)

Mehrere Anwendungsserver empfangen Anforderungen an derselben Warteschlange

Zusätzliche Referenzinformationen

Prozeduren von Leistungsanalyse-Tools

Systemmonitor unter Windows NT/2000 starten

Führen Sie folgende Schritte aus:
Wählen Sie im Menü Start die Optionen Programme > Verwaltung > Systemmonitor aus.