Optimieren von WebSphere Application Server V7 und V8 für die Leistung IBM WebSphere Application Server ist ein robuster Anwendungsserver der Enterprise-Klasse, der eine Reihe von Komponenten, Ressourcen und Services bereitstellt, die Entwickler in ihren Anwendungen nutzen können. Jede Anwendung hat einen einzigartigen Satz von Anforderungen und verwendet oft eine Application Server-Ressourcen auf ganz unterschiedliche Weise. Um eine hohe Flexibilität und Unterstützung für diese vielfältigen Anwendungen zu bieten, bietet WebSphere Application Server eine umfangreiche Liste von Abstimmknöpfen und Parametern, die Sie zur Verbesserung der Anwendungsleistung nutzen können. Die Standardwerte für die am häufigsten verwendeten Abstimmparameter im Anwendungsserver werden so eingestellt, dass eine ausrei - chende Leistung für die unterschiedlichsten Anwendungen gewährleistet ist. Da jedoch keine zwei Anwendungen gleich sind oder der Anwendungsserver auf die gleiche Weise verwendet wird, gibt es keine Garantie, dass jeder einzelne Satz von Abstimmparametern für jede Anwendung perfekt geeignet ist. Diese Realität zeigt, wie wichtig es für Sie ist, fokussierte Performance-Tests und Tuning gegen Ihre Anwendungen durchzuführen. Dieser Artikel beschreibt einige der am häufigsten verwendeten Parameter in WebSphere Application Server V7 und V8 (und früheren Versionen) und die Methoden verwendet, um sie zu stimmen. Im Gegensatz zu vielen dokumentierten Tuning-Empfehlungen, verwendet dieser Artikel die Apache DayTrader Performance Benchmark-Beispiel-Anwendung als Fallstudie, um den Kontext der Diskussion. Mit der Anwendung DayTrader werden Sie in der Lage sein, die verwendeten Key-Server-Komponenten eindeutig zu identifizieren, eine fokussierte Abstimmung in diesen Bereichen durchzuführen und den mit jeder Tuning-Änderung verbundenen Nutzen zu erleben. Die Informationen in diesem Artikel gelten für beide WebSphere Application Server-Versionen 7 und 8, außer wo angegeben. Bevor Sie fortfahren, sind einige zusätzliche Dinge im Auge zu behalten, wenn Sie Ihren Anwendungsserver auf Leistung abstimmen: Eine höhere Leistung kann oft dazu führen, dass ein bestimmtes Feature oder eine bestimmte Funktion in der Anwendung oder dem Anwendungsserver geopfert wird. Der Kompromiss zwischen Leistung und Merkmal muss sorgfältig abgewogen werden, wenn Leistungsänderungsänderungen bewertet werden. Mehrere Faktoren, die über den Anwendungsserver hinausgehen, können sich auf die Leistung auswirken, einschließlich Hardware - und Betriebssystemkonfiguration, andere auf dem System ausgeführte Prozesse, Leistung von Back-End-Datenbankressourcen, Netzwerklatenz und so weiter. Sie müssen diese Faktoren bei der Durchführung eigener Leistungsbewertungen berücksichtigen. Die hier beschriebenen Leistungsverbesserungen sind spezifisch für die DayTrader-Anwendung, den Workload-Mix und den hier beschriebenen Hardware - und Software-Stack. Alle Leistungsgewinne für Ihre Anwendung, die sich aus den Tuning-Änderungen in diesem Artikel werden sicherlich variieren und sollte mit Ihren eigenen Leistungstests ausgewertet werden. Die DayTrader-Applikation Von der Idee bis zur Fertigung in Minuten Lassen Sie sich nicht von der Integration verzögern. Konsequent liefern qualitativ hochwertige Software schneller mit DevOps Services für IBM Bluemix eine End-to-End-Lösung mit den Dienstleistungen, die Sie benötigen, um Ihre innovativen Ideen schnell zu liefern. Die Apache DayTrader Performance-Benchmark-Beispielanwendung simuliert eine einfache Aktienhandelsanwendung, die Benutzer loginlogout ermöglicht, ihr Portfolio ansieht, Aktienkurse einsehen, Aktienaktien kaufen und verkaufen sowie Kontoinformationen verwalten kann. DayTrader ist nicht nur eine hervorragende Anwendung für Funktionstests, sondern bietet auch einen Standard-Workload zur Charakterisierung und Messung von Applikationsserver - und Komponentenebene. DayTrader (und die Trade-Performance-Benchmark-Beispielanwendung von IBM, auf der DayTrader ursprünglich basierte) wurde nicht geschrieben, um optimale Leistung zu bieten. Vielmehr sollen die Anwendungen relative Leistungsvergleiche zwischen Anwendungsserver-Releases und alternativen Implementierungsstilen und - mustern durchführen. DayTrader basiert auf einem Kernsatz von Java8482 Enterprise Edition (Java EE) - Technologien, die Java-Servlets und JavaServer8482-Seiten (JSPs) für die Präsentationsschicht und Java-Datenbankkonnektivität (JDBC), Java Message Service (JMS), Enterprise JavaBeans8482 (EJBs) umfassen ) Und Message-Driven Beans (MDBs) für die Back-End-Geschäftslogik und Persistenzschicht. Abbildung 1 zeigt eine hochrangige Übersicht über die Anwendungsarchitektur. Abbildung 1. Anwendungsübersicht von DayTrader Damit Sie ein paar gemeinsame Java EE-Persistenz - und Transaktionsmanagementmuster auswerten können, bietet DayTrader drei verschiedene Implementierungen der Business Services an. Diese Implementierungen (oder Laufzeitmodi) sind in Tabelle 1 dargestellt. Tabelle 1. DayTrader-Implementierungen Die Thread-Pool-Einstellungen können in der Administrationskonsole geändert werden, indem Sie zu Server gt Application Servers gt servername gt Thread Pool navigieren. Sie können auch die Leistungsberater verwenden, um Empfehlungen zu Threadpoolgrößen und anderen Einstellungen abzurufen. Der IBM Tivoli 174 Performance Viewer ist ein in der Verwaltungskonsole eingebettetes Tool, mit dem Sie die PMI-Daten (Performance Monitoring Infrastructure) anzeigen können, die mit fast jeder Serverkomponente verknüpft sind. Der Betrachter berät Sie bei der Optimierung von Systemen für optimale Leistung und empfiehlt Alternativen zu ineffizienten Einstellungen. Informationen zum Aktivieren und Anzeigen von PMI-Daten mit dem Tivoli Performance Viewer finden Sie im WebSphere Application Server-Informationszentrum. Abbildung 9 zeigt die PMI-Daten für den Web-Container-Threadpool, während die DayTrader-Anwendung hochgefahren und unter stationärer Spitzenlast ausgeführt wurde. Die Poolgröße (orange) ist die durchschnittliche Anzahl von Threads im Pool, und die aktive Anzahl (rot) ist die Anzahl der gleichzeitig aktiven Threads. Diese Grafik zeigt, dass die Standardeinstellung von 50 maximalen Web-Container-Threads in diesem Fall gut funktioniert, da nicht alle 50 Threads zugewiesen wurden und die durchschnittliche gleichzeitige Workload etwa 18 Threads verwendet. Da die Standard-Threadpool-Größenanpassung ausreichend war, wurden keine Änderungen an der Threadpool-Größenbestimmung vorgenommen. Abbildung 9. PMI-Daten für Web-Container-Thread-Pool Vor WebSphere Application Server V6.x bestand eine Eins-zu-Eins-Zuordnung zwischen der Anzahl gleichzeitiger Clientverbindungen und den Threads im Webcontainer-Threadpool. Mit anderen Worten, wenn 40 Clients auf eine Anwendung zugreifen, wurden 40 Threads benötigt, um die Anforderungen zu warten. In WebSphere Application Server V6.0 und 6.1 wurden Native IO (NIO) und Asynchronous IO (AIO) eingeführt, die die Möglichkeit bieten, Tausende von Clientverbindungen unter Verwendung einer relativ kleinen Anzahl von Threads zu skalieren. Dies erklärt, warum in 9 durchschnittlich 18 Threads verwendet wurden, um 50 gleichzeitige Clientverbindungen von dem HTTP-Lasttreiber zu bedienen. Basierend auf diesen Informationen konnte die Größe des Thread-Pools verringert werden, um den Overhead zu reduzieren, der mit der Verwaltung eines größeren als benötigten Thread-Pools verbunden ist. Dies würde jedoch die Fähigkeit des Servers, auf Lastspitzen zu reagieren, in denen eine große Anzahl von Threads tatsächlich benötigt wurden, verringern. Bei der Bestimmung der Fadenpoolgrößen sollte sorgfältig geprüft werden, einschließlich der voraussichtlichen durchschnittlichen und maximalen Arbeitsbelastung. C. Größe des Verbindungspools Jedes Mal, wenn eine Anwendung versucht, auf einen Back-End-Speicher (z. B. eine Datenbank) zuzugreifen, benötigt sie Ressourcen, um eine Verbindung zu diesem Datenspeicher zu erstellen, zu pflegen und freizugeben. Mit dem Anwendungsserver können Sie einen Pool von Back-End-Verbindungen aufbauen, die Anwendungen auf einem Anwendungsserver freigeben können. Das Verbindungspooling verteilt den Verbindungsoverhead auf mehrere Benutzeranforderungen, wodurch die Anwendungsressourcen für zukünftige Anforderungen geschützt werden. Die wichtigen abstimmbaren Optionen, die mit Verbindungspools verknüpft sind, sind in Tabelle 4 gezeigt. Tabelle 4. Optionen für den Verbindungspoolsanschluß Die minimale Anzahl physischer Verbindungen, die beibehalten werden sollen. Wenn die Größe des Verbindungspools auf oder unter der minimalen Verbindungspoolgröße liegt, wird ein nicht verwendeter Timeout-Thread physische Verbindungen nicht verwerfen. Der Pool erstellt jedoch nur Verbindungen, um sicherzustellen, dass die minimale Verbindungspoolgröße beibehalten wird. Die maximale Anzahl physischer Verbindungen, die in diesem Pool erstellt werden können. Dies sind die physikalischen Verbindungen zum Backend-Datenspeicher. Wenn diese Nummer erreicht ist, werden keine neuen physischen Verbindungen erstellt. Anfrager müssen warten, bis eine physikalische Verbindung, die derzeit verwendet wird, an den Pool zurückgegeben wird oder bis eine ConnectionWaitTimeoutException ausgelöst wird, basierend auf der Verbindungszeitlimit-Einstellung. Das Festlegen eines hohen maximalen Verbindungswertes kann zu einer Last von Verbindungsanforderungen führen, die Ihre Back-End-Ressource überfordert. Thread inactivity timeout Gibt die Inaktivität (in Millisekunden) an, die verstreichen soll, bevor ein Thread zurückgefordert wird. Ein Wert von 0 bedeutet nicht zu warten, und ein negativer Wert (kleiner als 0) bedeutet, für immer zu warten. Das Ziel des Abstimmens des Verbindungspools besteht darin, sicherzustellen, dass jeder Thread, der eine Verbindung zur Datenbank benötigt, einen hat und dass Anforderungen nicht in Warteschlange gestellt werden, um auf die Datenbank zuzugreifen. Für die DayTrader-Anwendung führt jede Aufgabe eine Abfrage mit der Datenbank durch. Da jeder Thread eine Aufgabe ausführt, benötigt jeder gleichzeitige Thread eine Datenbankverbindung. In der Regel kommen alle Anfragen über HTTP und werden auf einem Web-Container-Thread ausgeführt. Daher sollte die maximale Verbindungspoolgröße mindestens so groß sein wie die maximale Größe des Webcontainer-Thread-Pools. Seien Sie sich bewusst, aber dies ist nicht eine bewährte Praxis für alle Szenarien. Die Verwendung eines Verbindungspools, der größer oder größer als der Webcontainer-Threadpool ist, stellt sicher, dass keine Threads auf eine Verbindung warten und die maximale Leistung für einen einzelnen Server bereitstellen. Für eine Umgebung mit zahlreichen Anwendungsservern, die alle mit derselben Back-End-Datenbank verbunden sind, sollte jedoch sorgfältig auf die Größe des Verbindungspools geachtet werden. Wenn z. B. zehn Applikationsserver alle auf eine Datenbank mit 50 Verbindungen im Verbindungspool zugreifen, können bis zu 500 Verbindungen zu einem Zeitpunkt auf der Datenbank angefordert werden. Diese Art von Last kann problemlos Probleme in der Datenbank verursachen. Ein besserer Ansatz hierbei ist die Verwendung der Trichtermethode, bei der die Anzahl der Web-Container-Threads größer ist als die Anzahl der Verbindungen im Verbindungspool. Dadurch wird sichergestellt, dass nicht alle aktiven Threads unter extremer Last zu einem einzigen Zeitpunkt eine Verbindung zur Datenbank erhalten. Dies führt zu längeren Reaktionszeiten, wird aber die Umgebung wesentlich stabiler machen. Insgesamt ist die allgemeine Best Practice zu bestimmen, welche Thread-Pools Service-Tasks, die eine DataSource-Verbindung erfordern und die Pools entsprechend zu dimensionieren. In diesem Fall wurde die maximale Verbindungspoolgröße auf die Summe der maximalen Größe der Standard - und Web-Container-Thread-Pools (70) festgelegt, da wir auf die Erzielung der besten Leistung für einen einzelnen Server fokussiert sind. Die Einstellungen für den Verbindungspool können in der Administrationskonsole geändert werden, indem Sie zu Ressourcen gt JDBC gt Datenquellen gt datasource gt Eigenschaften des Verbindungspools navigieren. Beachten Sie, dass alle Anwendungen möglicherweise nicht so gut verhalten werden wie DayTrader aus einer Verbindungsverwaltung Perspektive und daher möglicherweise mehr als eine Verbindung pro Thread verwenden. Abbildung 10 zeigt die PMI-Daten für den Verbindungspool, während die DayTrader-Anwendung unter stationärer Spitzenlast mit den standardmäßigen Verbindungspoolgrößen von 1 Minimum10 Maximum ausgeführt wurde. FreePoolSize (orange) ist die Anzahl der freien Verbindungen im Pool und UseTime (grün) ist die durchschnittliche Zeit (in ms), die eine Verbindung verwendet. Diese Grafik zeigt, dass alle 10 Verbindungen immer im Einsatz waren. Zusätzlich zu den Charted-Metriken zeigt die Tabelle auch einige andere wichtige Metriken an: WaitingThreadCount zeigt 33 Threads, die auf eine Verbindung zur Datenbank mit einer durchschnittlichen WaitTime von 8,25 ms warten und der Pool insgesamt 100 besetzt ist, wie die PercentUsed-Metrik zeigt. Abbildung 10. PMI-Metriken vor dem Abstimmen des Verbindungspools Abbildung 11 zeigt das gleiche Diagramm nach Abstimmung des Verbindungspools auf eine Größe von maximal 10 Minimum. Dies zeigt, dass viele freie Verbindungen vorhanden waren und keine Threads auf eine Verbindung warteten, was viel schnellere Reaktionszeiten erzeugt. Abbildung 11. PMI-Metriken nach dem Einstellen des Verbindungspools Abbildung 12: Leistungsvorteil gestimmter Verbindungspoolgrößen Für weitere Informationen: d. Datenquellen-Anweisungs-Cachegröße Die Datenquellen-Anweisungscachegröße gibt die Anzahl der vorbereiteten JDBC-Anweisungen an, die pro Verbindung zwischengespeichert werden können. Die WebSphere Application Server-Datenquelle optimiert die Verarbeitung von vorbereiteten Anweisungen und aufrufbaren Anweisungen, indem sie jene Anweisungen zwischenspeichert, die nicht in einer aktiven Verbindung verwendet werden. Wenn Ihre Anwendung viele Anweisungen wie DayTrader nutzt, kann durch Erhöhen dieses Parameters die Anwendungsleistung verbessert werden. Die Anweisungs-Cachegröße kann durch Navigieren zu Ressourcen gt JDBC gt Datenquellen gt datasource gt WebSphere Application Server-Datenquelleneigenschaften konfiguriert werden. Die Cache-Größe der Datenquellen-Anweisung kann mit verschiedenen Methoden angepasst werden. Eine Technik besteht darin, den Anwendungscode (oder eine aus der Datenbank oder dem Datenbanktreiber gesammelte SQL-Ablaufverfolgung) für alle eindeutig vorbereiteten Anweisungen zu überprüfen und sicherzustellen, dass die Cachegröße größer als dieser Wert ist. Die andere Möglichkeit besteht darin, die Cachegröße iterativ zu erhöhen und die Anwendung unter Peak-Steady-State-Last auszuführen, bis die PMI-Metriken keine Cache-Abwürfe mehr melden. Abbildung 13 zeigt das gleiche PMI-Diagramm des Verbindungspools, diesmal mit der Cache-Größe der Datenquellenaussage von der Standardgröße (die 10 ist) auf 60. Die Metrik PrepStmtCacheDiscardCount (rot) ist die Anzahl der Anweisungen, die verworfen werden, weil die Cache ist voll. Zurückblickend auf das Diagramm in Fig. 11 war vor der Abstimmung der Datenquellen-Anweisungs-Cache-Größe die Anzahl der verworfenen Anweisungen über 1,7 Millionen. Das Diagramm in Fig. 13 zeigt, daß nach der Abstimmung der Cache-Größe keine Aussageabwürfe vorhanden sind. Abbildung 13. PMI-Metriken nach dem Abstimmen der Datenquellen-Anweisungs-Cachegröße Abbildung 14. Leistungsverbrauch der Cachegröße für die Datenquellenaussage Weitere Informationen: ORB-Übergabe durch Referenz Die Objekt-Request-Broker - (ORB) - Passage durch Referenzoption legt fest, ob beim Übertragen von Parameterobjekten, die an einer EJB-Anforderung beteiligt sind, die Übergabe per Referenz oder die Übergabe durch Wert-Semantik verwendet werden soll. Diese Option finden Sie in der Administrationskonsole, indem Sie zu Server gt Application Servers gt servername gt Object Request Broker (ORB) navigieren. Standardmäßig ist diese Option deaktiviert und eine Kopie jedes Parameterobjekts wird erstellt und an die aufgerufene EJB-Methode übergeben. Das ist wesentlich teurer als eine einfache Referenz auf das vorhandene Parameterobjekt zu übergeben. Zusammenfassend behandelt der ORB-Durchlauf durch Referenzoption die aufgerufene EJB-Methode grundsätzlich als lokaler Aufruf (auch für EJBs mit entfernten Schnittstellen) und vermeidet die erforderliche Objektkopie. Wenn keine entfernten Schnittstellen erforderlich sind, ist eine einfachere Alternative, die keine Abstimmung erfordert, die Verwendung von EJBs mit lokalen Schnittstellen. Durch die Verwendung von lokalen statt Remote-Schnittstellen, verlieren Sie die Vorteile, die häufig mit Remote-Schnittstellen, Standorttransparenz in verteilten Umgebungen und Workload-Management-Funktionen verbunden sind. Die ORB-Pass-by-Referenzoption bietet nur einen Vorteil, wenn sich der EJB-Client (dh das Servlet) und das aufgerufene EJB-Modul innerhalb des gleichen Classloaders befinden. Diese Anforderung bedeutet, dass sowohl das EJB-Client - als auch das EJB-Modul in derselben EAR-Datei bereitgestellt und auf derselben Anwendungsserverinstanz ausgeführt werden müssen. Wenn die EJB-Client - und EJB-Module verschiedenen Anwendungsserverinstanzen zugeordnet werden (die oft als split-tier bezeichnet werden), müssen die EJB-Module remote mit Pass-by-Value-Semantik aufgerufen werden. Da die DayTrader-Anwendung sowohl WEB - als auch EJB-Module im selben EAR enthält und beide auf derselben Anwendungsserverinstanz bereitgestellt werden, kann die ORB-Übergabe durch Referenzoption verwendet werden, um eine Leistungsverstärkung zu realisieren. Wie aus den in Abb. 15 gezeigten Messungen hervorgeht, ist diese Option für DayTrader äußerst vorteilhaft, wenn alle Anforderungen der Servlets an die zustandslosen Session-Beans über eine Remote-Schnittstelle weitergegeben werden - außer im Direkt-Modus, bei dem der EJB-Container anstelle von übergangen wird Direkte JDBC und manuelle Transaktionen. Abbildung 15: Leistungsvorteil der ORB-Vorlage durch Referenz Für weitere Informationen: Erweiterte Abstimmung In diesem Abschnitt diskutiert: a. Servlet-Caching von WebSphere-Anwendungsservern DynaCache bietet einen allgemeinen In-Memory-Cachingdienst für Objekte und Seitenfragmente, die vom Server generiert werden. Die Schnittstellen DistributedMap und DistributedObjectCache können in einer Anwendung zum Zwischenspeichern und Freigeben von Java-Objekten verwendet werden, indem Referenzen auf diese Objekte im Cache zur späteren Verwendung gespeichert werden. Das Servlet-Caching hingegen ermöglicht es, dass Servlet - und JSP-Antwortfragmente von einem anpassbaren Satz von Caching-Regeln gespeichert und verwaltet werden. In der Anwendung DayTrader wird eine Marktübersicht für jeden Zugriff einer Benutzerhomepage angezeigt. Diese Zusammenfassung enthält eine Liste der Top 5 Gewinne und Verluste Aktien, sowie den aktuellen Aktienindex und Handelsvolumen. Diese Aktivität erfordert die Ausführung von mehreren Datenbank-Lookups und damit erheblich verzögert das Laden der Benutzer-Homepage. Mit dem Servlet-Caching kann die marketSummary. jsp zwischengespeichert werden, wodurch diese teuren Datenbankabfragen praktisch eliminiert werden, um die Antwortzeit für die Benutzerhomepage zu verbessern. Das Aktualisierungsintervall für das zwischengespeicherte Objekt kann konfiguriert werden und wird in dem in Listing 1 gezeigten Beispiel auf 60 Sekunden festgelegt. Dynacache kann auch zum Zwischenspeichern von anderen servletJSP-Fragmenten und Daten innerhalb von DayTrader verwendet werden. Dieses Beispiel demonstriert die Verbesserung, die Sie durch Caching erreichen können, um komplexe Serveroperationen zu vermeiden. Das Servlet-Caching kann in der Administrationskonsole aktiviert werden, indem Sie zu den Servern gt Applikationsserver gt servername gt Web-Container-Einstellungen gt Web-Container navigieren. Der URI-Pfad zum Servlet oder JSP, der zwischengespeichert werden soll, muss in einer Datei cachespec. xml definiert sein, die sich im Web-Modul WEB-INF-Verzeichnis befindet. Für die marketSummary. jsp in DayTrader sieht die cachespec. xml ähnlich aus wie Listing 1. Listing 1. cachespec. xml Abbildung 16. Leistungsvorteil von Servlet-Caching Weitere Informationen: b. HTTP-Transporthändige Verbindungen Persistente Verbindungen legen fest, dass eine ausgehende HTTP-Antwort eine persistente (keep-alive) - Verbindung anstelle einer Verbindung verwenden soll, die nach einem Request - oder Antwortaustausch auftritt. In vielen Fällen kann eine Leistungssteigerung erzielt werden, indem die maximale Anzahl an persistenten Anforderungen erhöht wird, die auf einer einzigen HTTP-Verbindung zulässig sind. SSL-Verbindungen können einen signifikanten Leistungsgewinn sehen, indem sie unbegrenzte anhaltende Anforderungen pro Verbindung ermöglichen, da SSL-Verbindungen den teuren Overhead des Austausches von Schlüsseln und Verhandlungsprotokollen zum Abschluss des SSL-Handshake-Prozesses verursachen. Das Maximieren der Anzahl von Anforderungen, die pro Verbindung verarbeitet werden können, minimiert die Auswirkungen dieses Overheads. Außerdem können Anwendungen mit hohem Durchsatz mit schnellen Reaktionszeiten eine Leistungsverstärkung realisieren, indem die Verbindungen offen gehalten werden, anstatt die Verbindung bei jeder Anforderung aufzubauen und zu schließen. Wenn diese Eigenschaft auf 0 (Null) gesetzt wird, bleibt die Verbindung geöffnet, solange der Anwendungsserver ausgeführt wird. Wenn die Sicherheit ein Problem darstellt, sollte diese Einstellung jedoch sorgfältig geprüft werden, da dieser Parameter helfen kann, Denial-of-Service-Angriffe zu verhindern, wenn ein Client versucht, eine Keep-Alive-Verbindung festzuhalten. Die persistenten Verbindungseinstellungen für HTTP-Transporte können in der Verwaltungskonsole festgelegt werden, indem Sie zu den Servern gt-Anwendungsservern gt servername gt Ports navigieren. Klicken Sie dort auf die zugehörigen Transporte für den Port, der den HTTP-Transportkanaleinstellungen zugeordnet ist, die Sie ändern möchten. Während des DayTrader-Tests wurden die maximalen dauerhaften Anforderungen pro Verbindungswert von 100 (die Standardeinstellung) auf unbegrenzt geändert. Die Diagramme in Abbildung 17 zeigen die Durchsatzergebnisse des Zugriffs auf ein einfaches Hello World-Servlet über Standard-HTTP (Nicht-SSL) und HTTPS (SSL), sowohl vor als auch nach dem Freischalten von unbegrenzten persistenten Anforderungen pro Verbindung. Abbildung 17. Leistungsvorteil von unbegrenzten anhaltenden Anforderungen pro Verbindung Weitere Informationen: c. Unterstützung großer Seiten Mehrere Plattformen bieten die Möglichkeit, einen großen zusammenhängenden Abschnitt des Speichers mit Speicherseiten zu erstellen, die größer als die Standardspeicher-Seitengröße sind. Abhängig von der Plattform können große Speicherseitengrößen von 4 MB (Windows) bis 16 MB (AIX) gegenüber der Standardseitengröße von 4 KB reichen. Viele Anwendungen (einschließlich Java-basierte Anwendungen) profitieren häufig von großen Seiten aufgrund einer Reduzierung des CPU-Overheads, die mit der Verwaltung kleinerer Anzahl großer Seiten verbunden ist. Um große Speicherseiten zu verwenden, müssen Sie sie zunächst im Betriebssystem definieren und aktivieren. Jede Plattform hat unterschiedliche Systemanforderungen, die konfiguriert werden müssen, bevor große Seitenunterstützung aktiviert werden kann. Das WebSphere Application Server-Informationszentrum dokumentiert jeden dieser Schritte per Plattform: Nach dem Konfigurieren innerhalb des Betriebssystems kann die Unterstützung für große Seiten innerhalb der JVM aktiviert werden, indem - Xlp in den allgemeinen JVM-Argumenteinstellungen in der Administrationskonsole unter Servers gt Application Server gt festgelegt wird Servername gt Prozessdefinition gt Java Virtual Machine. Seien Sie sich bewusst, dass, wenn große Seiten aktiviert sind, das Betriebssystem einen großen kontinuierlichen Teil des Speichers für die Nutzung durch die JVM beiseite legen wird. Wenn die verbleibende Speichermenge nicht ausreicht, um die anderen Anwendungen, die ausgeführt werden, zu behandeln, könnte Paging (Austauschen von Seiten im Speicher für Seiten auf der Festplatte) auftreten, was die Systemleistung erheblich verringert. Abbildung 18. Leistungsvorteil großer Seiten Für weitere Informationen: d. Deaktivieren nicht benötigter Dienste Deaktivieren nicht verwendete Dienste, die eine Anwendung nicht benötigt, können die Leistung verbessern. Ein solches Beispiel ist PMI. Es ist wichtig zu beachten, dass PMI aktiviert sein muss, um die zuvor in diesem Artikel dokumentierten Metriken einzusehen und um Ratschläge von den Leistungsberatern zu erhalten. Während das Deaktivieren von PMI die Fähigkeit, diese Informationen zu sehen, entfernt, bietet es auch einen kleinen Leistungsgewinn. PMI kann auf individueller Applikationsserverbasis in der Administrationskonsole deaktiviert werden, indem Sie zu Monitoring and Tuning gt Performance Monitoring Infrastructure (PMI) navigieren. Abbildung 19. Leistungsvorteil beim Deaktivieren von PMI Für weitere Informationen: e. Webserver-Standort Web-Server wie IBM HTTP Server werden häufig vor WebSphere Application Server-Bereitstellungen verwendet, um statische Inhalte zu behandeln oder Workload-Management-Funktionen (WLM) bereitzustellen. In Versionen von WebSphere Application Server vor V6 wurden auch Webserver benötigt, um Tausende von eingehenden Clientverbindungen effektiv zu verarbeiten, da die Client-Verbindungen und Web-Container-Threads eineindeutig zugeordnet sind (siehe oben). In WebSphere Application Server V6 und höher ist dies bei der Einführung von NIO und AIO nicht mehr erforderlich. Für Umgebungen, die Webserver verwenden, sollten die Webserverinstanzen auf dedizierten Systemen getrennt von den WebSphere Application Server-Instanzen platziert werden. Wenn ein Webserver auf einem System mit einer WebSphere Application Server-Instanz zusammengefasst wird, werden sie effektiv wertvolle Prozessorressourcen freigeben, wodurch der Gesamtdurchsatz für die Konfiguration reduziert wird. Ein DayTrader-Test wurde durchgeführt, wobei IBM HTTP Server lokal auf demselben Computer wie WebSphere Application Server platziert wurde und ein zweiter Test mit dem entfernten Web-Server auf einem separaten dedizierten Computer durchgeführt wurde. Tabelle 5 zeigt den Prozentsatz der CPU-Zyklen, die von jedem Prozess verbraucht werden, wenn der Webserver und der Anwendungsserver auf demselben System zusammengestellt wurden. Wie Sie aus den Ergebnissen sehen können, wurden ungefähr 25 der CPU durch den HTTP-Server-Prozess verbraucht, der einer einzelnen CPU in dem Vier-CPU-System entspricht, das für diesen Test verwendet wurde. Tabelle 5. CPU-Auslastung mit HTTP-Server Abbildung 20. Durchsatz mit und ohne Webserver Asynchrone Messaging-Optimierung Der Großteil dieses Papiers konzentriert sich bisher auf die Kern-Web-Serving - und Persistenz-Aspekte der Anwendung DayTrader und WebSphere Application Server. Wir werden nun Schwerpunkt darauf legen, wie DayTrader JMS-Komponenten verwendet, um eine asynchrone Verarbeitung von Buysell-Aufträgen auszuführen und Preisänderungsänderungen zu überwachen. Die DayTrader-Benchmark-Anwendung enthält zwei Messaging-Funktionen, die unabhängig aktiviert oder deaktiviert werden können: Asynchrone Auftragsabwicklung: Die asynchrone Kauf - und Verkaufsauftragsbearbeitung wird von einer JMS-Warteschlange und einem MDB abgewickelt. Zitat Preis Konsistenzverfolgung: Ein JMS-Thema und MDB werden verwendet, um Zitat Preisänderungen im Zusammenhang mit Aktien kaufen und verkaufen Bestellungen zu überwachen. Es gibt zwei primäre Abstimmungsoptionen, die mit der Messaging-Konfiguration verknüpft sind, die einen signifikanten Einfluss auf die Leistung haben werden: den Nachrichtsspeichertyp und die Zuverlässigkeit der Nachricht. Zusammen mit diesen, eine fortgeschrittene Tuning-Technik, die zusätzliche Leistungssteigerungen wird die Platzierung der Transaktionsprotokolle und Filespeicher (falls zutreffend) auf einer schnellen Festplatte. Jedes dieser Themen und ihre entsprechenden Leistungssteigerungen werden im Folgenden näher erläutert. Diskutiert in diesem Abschnitt: a. Nachrichtenspeichertyp Der interne Nachrichtendienst von WebSphere Application Servers verwaltet das Konzept eines Messaging-Servers. Der Datenspeicher dient als persistentes Repository für Nachrichten, die von der Engine gehandhabt werden. Wenn eine Messaging-Engine in einer Einzelserverumgebung erstellt wird, wird ein dateibasierter Speicher erstellt, der als Standarddatenspeicher verwendet wird. In WebSphere Application Server V6.0.x wurde der Standarddatenspeicher von einer lokalen, in-Prozess-Derby-Datenbank bereitgestellt. Die Datei - und Derby-basierten Datenspeicher eignen sich besonders für Single-Server-Szenarien, bieten aber kein Höchstmaß an Performance, Skalierbarkeit, Verwaltbarkeit oder Hochverfügbarkeit. Um diese Anforderungen zu erfüllen, können Sie einen entfernten Datenbank-Datenspeicher verwenden: Lokaler Derby-Datenbank-Datenspeicher: Mit dieser Option wird eine lokale, in-Prozess-Derby-Datenbank verwendet, um die operativen Informationen und Nachrichten zu speichern, die mit der Messaging-Engine verknüpft sind. Obwohl dies für Entwicklungszwecke bequem ist, verwendete diese Konfiguration wertvolle Zyklen und Speicher innerhalb des Anwendungsservers, um die gespeicherten Nachrichten zu verwalten. Dateibasierter Datenspeicher: (Voreinstellung) Wenn die Nachrichtenmaschine für die Verwendung eines dateibasierten Datenspeichers konfiguriert ist, werden Betriebsinformationen und Nachrichten an das Dateisystem anstelle einer Datenbank weitergegeben. Das führt schneller als die lokale Derby-Datenbank und kann, wenn eine schnelle Festplatte wie ein redundantes Array von unabhängigen Festplatten (RAID) verwendet wird, ebenso schnell wie eine entfernte Datenbank ausführen. Die unten aufgeführten Testergebnisse verwendeten kein RAID-Gerät für den dateibasierten Datenspeicher und spiegeln diese zusätzliche Verbesserung nicht wider. Remote-Datenbank-Datenspeicher: In dieser Konfiguration ist eine Datenbank, die sich auf einem fernen System befindet, so konfiguriert, dass sie als Nachrichten-Engine-Datenspeicher fungiert. Dadurch werden Zyklen für den Anwendungsserver-JVM-Prozess freigegeben, die zuvor für die Verwaltung der Derby-Datenbank oder der dateibasierten Speicher verwendet wurden, sodass ein performanterer Datenbankserver auf Produktionsebene (z. B. IBM DB2174 Enterprise Server) verwendet werden kann. Ein technischer Vorteil der Verwendung einer Datenbank für den Datenspeicher ist, dass einige J2EE8482-Anwendungen JDBC-Verbindungen nutzen können, um von einer einphasigen Commit-Optimierung zu profitieren. Weitere Informationen finden Sie unter Informationen zum Teilen von Verbindungen, um von einer einphasigen Commit-Optimierung profitieren zu können. Der Dateispeicher unterstützt diese Optimierung nicht. DayTrader wurde im asynchronen EJB-Modus mit diesen drei verschiedenen Informationsspeichertypen ausgeführt. Während dieser Läufe wurde die Trace-Spezifikation org. apache. geronimo. samples. daytrader. util. Logall aktiviert, um die Zeit zum Empfangen von Meldungen für den TradeBrokerMDB zu erfassen. Bei der Messung der asynchronen Messaging-Performance ist es immer wichtig, die Messungen auf den MDB-Reaktionszeiten, die asynchron sind - und nicht die tatsächlichen Seitenantwortzeiten, die synchron sind, zugrunde zu legen. Die Ergebnisse in Abbildung 21 zeigen, dass ein entfernter Datenbank-Datenspeicher die beste Leistung liefert, da er die schnellste MDB-Antwortzeit und den höchsten Durchsatz bereitstellt. Abbildung 21. Leistungsvergleich von Nachrichtenspeichern Für weitere Informationen: b. Nachrichtenzuverlässigkeitsstufen Die Zuverlässigkeit der Nachrichten ist eine wichtige Komponente für jedes Messaging-System und der WebSphere Application Server-Messaging-Provider bietet fünf verschiedene Zuverlässigkeitsstufen: Bester Einsatz nicht persistent Express nicht persistent Zuverlässig nicht persistent Zuverlässig Persistent Sicherlich Persistent. Persistente Nachrichten werden immer in einer Form persistenten Datenspeichers gespeichert, während nicht-persistente Nachrichten im Allgemeinen in einem flüchtigen Speicher gespeichert sind. Es besteht ein Kompromiss zwischen der Zuverlässigkeit der Nachrichtenübermittlung und der Geschwindigkeit, mit der Nachrichten ausgeliefert werden. Abbildung 22 zeigt die Ergebnisse für zwei Testläufe unter Verwendung eines Dateispeichers mit unterschiedlichen Zuverlässigkeitsstufen: aussagekräftig und ausdrücken nicht persistent. Die Ergebnisse zeigen deutlich, dass bei sinkendem Zuverlässigkeitsgrad die Nachrichten schneller verarbeitet werden können. Abbildung 22. Leistungsvergleich der Meldungszuverlässigkeitsstufen Weitere Informationen: c. Verschieben von Transaktionsprotokoll und Dateispeicher auf eine schnelle Festplatte Da Datenträger-IO-Operationen kostspielig sind, kann das Speichern von Protokolldateien auf schnellen Datenträgern wie einem RAID die Leistung erheblich verbessern. In den meisten RAID-Konfigurationen ist die Aufgabe, Daten auf das physikalische Medium zu schreiben, auf den mehreren Laufwerken gemeinsam. Diese Technik ergibt einen gleichzeitigen Zugriff auf Speicher für persistente Transaktionsinformationen und einen schnelleren Zugriff auf diese Daten aus den Protokollen. Das Transaktionslog-Verzeichnis kann in der Administrationskonsole eingestellt werden, indem Sie zu Server gt Application Servers gt servername gt Container Services gt Transaction Service navigieren. Das Dateispeicherprotokollverzeichnis kann während der Erstellung eines SIBus-Mitglieds mit der Option - logDirectory im AdminTask-Befehl addSIBusMember oder über die Administrationskonsole SIBus Member-Erstellungsfelder festgelegt werden. Abbildung 23 zeigt die Ergebnisse für zwei Testläufe: einen mit Transaktionslogs und Dateispeicher, die lokal auf der Festplatte gespeichert sind, und der andere mit ihnen auf einer RAMDisk (die im Wesentlichen einen Teil des Speichers als Festplatte für schnellere Lesevorgänge behandelt Schreibt). Für diese Läufe wurde ein Zuverlässigkeitsniveau von nicht-persistierendem Express verwendet. Die Ergebnisse zeigen, dass die Reaktionszeiten und der Durchsatz etwas schneller sind, wenn die Protokolle auf einer schnellen Platte gespeichert werden. Abbildung 23. Leistungsvorteil bei der Verwendung einer schnellen Festplatte Weitere Informationen: IBM WebSphere Application Server wurde entwickelt, um eine ständig wachsende Palette von Anwendungen mit jeweils eigenen, einzigartigen Funktionen, Anforderungen und Diensten zu hosten. Diese Flexibilität bestätigt die Tatsache, dass keine zwei Anwendungen den Anwendungsserver in genau der gleichen Weise verwenden werden, und kein einziger Satz von Abstimmparametern wird wahrscheinlich die beste Leistung für zwei unterschiedliche Anwendungen bereitstellen. Even though DayTrader might not resemble your application, the methodology for figuring out what to tune and how to go about tuning it is the same. The key is to identify and focus in on the major server components and resources used by your application, based on the application architecture. In general, a large number of applications will realize some improvement from tuning in three core areas: the JVM, thread pools, and connection pools. Other tunables might yield just as much bang for the buck however, these will typically be tied to a specific WebSphere Application Server feature used by the application. This article discussed this core set of tunables plus other options that benefit the DayTrader application. For each of the options, you were given information on where to find the tunable, general recommendations or cautions about any trade-offs, and pointers to related tools, if any. Figure 24 shows the overall performance improvement for each DayTrader run time mode after these tuning options were applied: JVM heap size Thread pool size Connection pool size Data source statement cache size ORB pass by reference Servlet caching Unlimited persistent HTTP connections Large page support Disabling PMI. Figure 24. Overall performance improvements after tuning options applied As you can clearly see from the figure, the described tuning yielded 169 improvement for EJB mode, 207 improvement for Session Direct mode, and 171 improvement for Direct mode. These are fairly sizable improvements and similar improvements can be realized in other applications however, you must keep in mind that your results will vary based on the factors discussed earlier, and on other factors that are beyond the scope of this article. Hopefully, the information and tools discussed here have provided you with some key insights that will help make the task of tuning your application server for your specific applications less daunting and even less intimidating. Downloadable resources Related topicsAston Martins 2017 Vantage GTS May Be the Last Truly Fun Car: Review You will now receive the Game Plan newsletter McLaren. Mercedes. Audi, xA0and Porsche all make excellent competitors to this Vantage. But each uses a paddle-shifting transmission. On the other hand, Andy Palmer, xA0Aston Martinaposs chief executive officer, has gone on record xA0saying he wants the companyxA0to be the last manufacturer on earth still offering a manual sports cars. As the first journalist to test drive thexA0Vantage, I can safely say it offers strong evidence that Palmer means what he says. The V8 Vantage is the only manual-drive V8 Aston sells. Source: Aston Martin If you are in need of a daily driver sports car that will give you hours of stick-shift delight, call Aston and buy this one. Ix2019d get on that right away, too. Fewer than 10 are left unsold. A Driverx2019s Drive The dawn of thexA0Aston Martin DB11. coming later this summer, has overshadowed this new V8 a bit. Thatx2019s a shame because the Vantage GTS is the most aggressively playful thing Ix2019ve driven all year. It has the same 430-horsepower mid-mounted engine set on a six-speed rear-wheel drive. Itx2019ll take you to 60 miles per hour in 4.6 seconds. Thataposs not the fastest sprint time ever, but this is a clear case of qualitative excellence vs. on-paper specs. (The 361 pound-feet of torque does help.) Top speed is 190mph. Driving this Vantage through Santa Monica streets and up the 405 before the morning rush hour felt as if Iaposd taken a vacation from my problems. Later, the curves on Mulholland Drive were the perfect match for its sport suspension and dynamic stability control it took them with the elegance of a manta ray. The 2017 V8 Vantage GTS Coupe hits 60 miles per hour in 4.6 seconds and has a top speed of 190mph. Photographer: Hannah ElliottBloomberg Aston has given us a thick sport wheel and tight rack-and-pinion power-assisted steering here the turning radius is something to love. The gear box is comfortable to shift through, and the clutch is easy. (Hill-start assist comes standard.) The steel disc brakes respond well when you need them. Itx2019s also welcome to note that the Vantage is just over 172 inches long, a full 10 inches shorter than, say, the Ferrari F12 Berlinetta. and five inches shorter than even a base Porsche 911. You feel the difference: The Vantage gathers itself closer and tighter than they do, and itsxA0steering radius puts all others to shame. Ix2019m not going to make the tired clichxE9 James Bond comparison that unfailingly accompanies every Aston Martin review. Ix2019ll just say that driving this car putsxA0pep in your step when you alight from it. The Vantage has an all-alloy, quad overhead camshaft, 4735-cc V8 engine. xA0 Source: Aston Martin Perfect Proportions As expected, the 2017 Vantage GTS Sport Edition I drove got plenty of attention from the police. (Not to issue a ticket, luckily.) They liked toxA0come over, ask about the engine, and snap a few selfies on the hood. They also wanted to hear the stainless steel sports exhaust system roar awake a few times. I was happy to oblige. On the Vantage GTS Sport Edition, 19-inch five-spoke alloy wheels come standard. Source: Aston Martin Theyx2019re not wrong. Similar to those of the Porsche 911 and Jaguar E-Type, the classic Aston Martin body looks so good because of its proportions. The ratio between the length of the hood, angle of the roofline, stacked rear haunches, and tight back end unlocks the pleasure center of the brain. There is such a thing as absolute beautyx2014a topic for a different columnx2014so suffice it to say that with its sleek body, halogen projector headlamps, and five-spoke alloy wheels, the Vantage GTS is an objectively beautiful machine. xA0xA0 The cobalt blue paint and 19-inch rimsxA0I had come standard you can personalize other wheel optionsxA0for a price rangingxA0from 2,690 to 3,785. There are also plenty of carbon fiber options for the mirrors, handles, and headlamps to match the standard front splitter and diffusers. Do it. You might as well go all-in. Smart Options, No Clutter Inside the Vantage GTS, the differences between this edition and the regular models are mostly cosmetic. Aston gives us special GTS badging on the doorsills, cool indented detailing on the cockpit seats, and suede-like Alcantara on the steering wheel and roof. The gearshift is surrounded by carbon fiber. Heated sport seats, black Alcantara trim, and rear parking sensors, among other luxury accoutrements, come standard. Source: Aston Martin The slight blind spots right at the tip of each shoulder arexA0to be expected. And youx2019ll find yourself stopping for gas a lot: Combined mileage on this thing is only 15 miles per gallon. But the generous ledge for stashingxA0a valise behind you and the ample seating area make you forget the inconvenience. The Vantage has plenty of headroom, shoulder-room, and legroom for tall folks like us. Want more options You can buy a custom umbrella that matches the car (295), a special glass key (750), and a 1,000-watt Bang amp Olufsen sound system (8,330). I like that there isnx2019t too much else on offer here to clutter up the interior. You will be focused on the driving, anyway. The car is a six-speed manual on a short, quick gearbox, with rear-wheel drive. Carbon fiber surrounds the gearshift. Source: Aston Martin The Choice forxA0Manual Fun The V8 Vantage GTS Sport Edition I drove cost 139,000, which includes some options and the destination charges (MSRP: 137,820). Thatx2019s a little less than a Porsche 911 Turbo, which is about 160,000, and itaposs a lot less than a McLaren 570S, which costs around 185,000. Those are great cars. And yes, you might get some side-eyes from ignoramixA0who wonder why you didnx2019t choose the Vantage V12. Ix2019m willing to bet that most people who do that havenx2019t driven this . If you want a real manual driving experience in a high-end daily driver, buy the 2017 Vantage GTS Coupe. After all, youxA0worked at those skills. Donx2019t let them go to waste. The body on the Vantage is made of aluminum, magnesium alloy, composites, and steel it comes with high intensity discharge headlamps and LED rear fog lamps. Source: Aston Martin The manual version of the Vantage GTS Coupe gets 13 miles per gallon in the city and 19mpg on the highway. Source: Aston Martin
Comments
Post a Comment