Frage

Ich versuche, Performance-Probleme mit einer großen und komplexer tomcat Java-Web-Anwendung zu lösen. Das größte Problem im Moment ist, dass von Zeit zu Zeit, die Speicherauslastungsspitzen und die Anwendung nicht mehr reagiert. Ich habe alles fixiert ich mit Log Profiler und Bayes-Analyse der Log-Dateien beheben. Ich betrachte einen Profiler auf die Produktion Tomcatbediener ausgeführt wird.

Ein Hinweis auf den Reader mit Gentle Sensitivitäten:

Ich verstehe, dass einige den Begriff Offensive Profilieren einer Produktion App finden. Bitte seien Sie versichert, dass ich die meisten anderen Möglichkeiten ausgeschöpft haben. Der Grund, warum ich dies bedenken, ist, dass ich nicht vollständig über die Ressourcen verfügt, um unsere Produktion Setup auf meinem Testserver zu kopieren, und ich habe es nicht gelungen, die Ausfälle von Interesse auf meinem Test-Server zu verursachen.

Fragen:

Ich bin auf der Suche nach Antworten, die auf Tomcat laufen entweder für eine Java-Web-Anwendung arbeiten, oder beantworten diese Frage in einer Sprache Agnostiker Weise.

  • Was sind die Leistungskosten der Profilierung?
  • Jede andere Gründe, warum es eine schlechte Idee, eine Web-Anwendung in der Produktion zu Remote-Verbindung und das Profil ist (seltsame Fehlerarten, Sicherheitsfragen, usw.)?
  • Wie viel Profilierungs Effekt der Speicher Fußdruck?
  • sind Insbesondere gibt Java-Tools Profilierung, die sehr niedrig Leistungskosten haben?
  • Jede Java Profilierwerkzeuge konzipiert für die Profilierung von Webanwendungen?
  • Hat jemand Benchmarks auf die Leistungskosten Profilierung mit VisualVM?
  • Welche Größe Anwendungen und Datensätze können VisualVM Maßstab?
War es hilfreich?

Lösung

OProfile und seine Vorfahren DPCI zum Profilieren Produktionssysteme entwickelt wurden. Der Aufwand für diese ist sehr gering, und sie Profil Ihrer full-System , einschließlich den Kernel, so dass Sie Performance-Probleme in der VM finden und in der Kernel und Bibliotheken.

Ihre Fragen zu beantworten:

  1. Overhead: Dies sind abgetastete Profilometer, das heißt, sie erzeugen Timer oder dieser graphischen Darstellung Abtastfrequenz vs. Aufwand für OProfile. Sie können tune die Abtastfrequenz für geringeren Overhead, wenn die Standardeinstellungen nicht gefallen sind.

  2. Verwendung in der Produktion: Die einzige Einschränkung OProfile zu verwenden ist, dass Sie es auf Ihrer Produktionsmaschine müssen installiert werden. Ich glaube, es ist die Kernel-Unterstützung in Red Hat seit RHEL3, und ich bin mir ziemlich sicher, dass andere Distributionen unterstützen.

  3. Speicher. Ich bin mir nicht sicher, was der genaue Speicherbedarf von OProfile ist, aber ich glaube, es ist relativ kleine Puffer hält um und Dumps sie gelegentlich Dateien zu protokollieren

  4. Java: OProfile umfasst Agenten Profilierungs, die Java unterstützen und die sind von Code bewusst in JITs läuft. So werden Sie in der Lage sein zu sehen, Java nennt, nicht nur die C-Aufrufe in den Interpreter und JIT.

  5. Web Apps:. OProfile ist ein System-Level-Profiler, es ist so nicht bewusst Dinge wie Sitzungen, Transaktionen, etc., die ein Web-App würde

    Das heißt, es ist ein Voll System Profiler, also, wenn Ihr Leistungsproblem durch schlechte Wechselwirkungen zwischen dem OS und dem JIT verursacht wird, oder wenn es in einigen Drittanbieter-Bibliothek, Sie‘ ll der Lage sein, das zu sehen, weil OProfile den Kernel und Bibliotheken Profile. Dies ist ein Vorteil für Produktionssysteme, wie Sie Probleme, die aufgrund von Fehlkonfigurationen oder Einzelheiten der Produktionsumgebung zu fangen, die nicht in der Testumgebung existieren könnten.

  6. VisualVM: über dieses man nicht sicher, da ich keine Erfahrung mit VisualVM haben

Hier ist ein Tutorial auf OProfile mit Performance-Engpässe finden .

Andere Tipps

Ich habe YourKit verwendet Anwendungen in einer Hochlastproduktionsumgebung zu profilieren, und während es sicherlich eine Auswirkung war, war es leicht ein akzeptabler Kompromiss. Yourkit macht eine große Sache dies in einem nicht zu tun in der Lage, -invasive Weise, wie selektiv bestimmte Profilierungsfunktionen ausgeschaltet, die teurer sind (es ist eine gleitende Skala, wirklich).

Mein Lieblings Aspekt davon ist, dass Sie die VM mit dem YourKit Agent läuft laufen kann, und es hat Null Auswirkungen auf die Leistung. es ist nur, wenn Sie die GUI verbinden und Profilieren, dass es einen Effekt hat.

Es ist nichts falsch in der Produktion apps Profilierungs. Wenn Sie auf verteilen Anwendungen arbeiten, gibt es Zeiten, in denen eine OutOfMemory Ausnahme tritt in einem sehr einzigartigen Wahrscheinlichkeit Szenario, das sehr schwierig ist, in einer dev / Bühne / uat Umgebung zu reproduzieren.

Sie können versuchen, benutzerdefinierte Profiler verwenden, aber wenn Sie in Eile sind und Einstecken / Einstellung upa Profiler auf einem Produktionsfeld Zeit in Anspruch nehmen, können Sie auch die JVM verwenden, um ein Speicherabbild (JVMs Speicherabbild auch zu nehmen gibt Sie fädeln Dump)

  1. Sie können die automatische Generierung auf der JVM-Befehlszeile aktivieren, indem Sie die folgende Option: -XX: + HeapDumpOnOutOfMemoryError

  2. er Memory Analyzer Projekt Eclipse-hat eine sehr leistungsfähige Funktion namens „Gruppe von Wert“, der es ermöglicht, ein Objekt Abfrage zu erstellen und die Instanzen durch einen Feldwert neu zu gruppieren. Dies ist nützlich, in dem Fall, dass Sie eine Menge von Instanzen, die eine kleinere Menge der möglichen Werte enthält, und Sie können sehen, welche Werte die am meisten verwendet wird. Das hat mir wirklich geholfen, einige komplexe Speicher-Dumps zu verstehen, so empfehle ich Ihnen, es auszuprobieren.

Sie können sich auch mit einem der modernen HotSpot JVM betrachten - Java Flight Recorder und Java Mission Control . Es ist eine Reihe von Tools, mit denen Sie Low-Level-Laufzeitinformationen mit dem CPU-Overhead etwa 5% sammeln (Ich kann die letzte Aussage ohnehin nicht beweisen, das ist die Aussage von Oracle-Ingenieur, der die Funktion und Live-Demo präsentiert).

Sie können dieses Tool verwenden, solange Ihre Anwendung 1_7u40 JVM oder höher ausgeführt wird. Um die Laufzeit Info Sammlung zu aktivieren, müssen Sie JVM mit bestimmten Flags starten:

  

In der Standardeinstellung ist JFR in der JVM deaktiviert. So aktivieren Sie JFR, müssen Sie starten Sie Ihre Java-Anwendung mit der -XX: + Flight Option. Da JFR ist eine kommerzielle Eigenschaft, die nur in den kommerziellen Pakete basierend auf Java Platform, Standard Edition (Oracle Java SE Advanced und Oracle Java SE Suite), müssen Sie auch kommerzielle Funktionen ermöglichen mit Hilfe der -XX: + UnlockCommercialFeatures Optionen.

(Zitiert http: // docs. oracle.com/javase/8/docs/technotes/guides/jfr/about.html#sthref7 )

Ich habe diese Antwort als diese für die Profilierung in der Produktion IMO gangbarer Weg ist.

Auch gibt es eine Eclipse-Plugin dass JFR und JMC und in der Lage unterstützt Informationen benutzerfreundlich angezeigt werden kann.

Die Werkzeuge haben in beträchtlichem Ausmaß über die Jahre verbessert. In diesen Tagen sind die meisten Menschen, die Bedürfnisse wie diese haben verwenden, um ein Werkzeug, das in Java Instrumentation API Haken anstelle der Profilerstellungs-API. Sicherlich gibt es mehr Beispiele, aber NewRelic und AppDynamics in den Sinn kommen. Besetzungs-basierte Lösungen in der Regel als Agent in der JVM laufen und ständig Daten zu sammeln. Sie berichten, die Daten auf einer höheren Ebene (Geschäftstransaktion, Web-Transaktion, Datenbanktransaktion) als der alte Profilierung Ansatz und ermöglichen es Ihnen, tiefer zu graben (bis auf die Verfahren oder Linie), falls erforderlich. Sie können sogar Setup-Überwachung und Warnmeldungen können Sie so verfolgen / alert auf Metriken wie Ladezeiten und Leistung gegen SLAs. Mit diesen großen Werkzeugen, sollten Sie wirklich keinen Grund haben, einen Profiler in der Produktion nicht mehr laufen. Die Kosten für dessen Lauf vernachlässigbar.

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