Daten sammeln
Um Daten sammeln zu können, benötigt es viel Speicherplatz. Sorgen Sie dafür, dass immer genügend davon da ist.
Logs
Hier gilt: So wenig wie möglich, so viel wie nötig. Logs verbrauchen sehr schnell, sehr viel Speicherplatz. Regelmäßig Logs zu konsolidieren und nicht benötigte Logmeldungen zu entfernen oder in einen anderen Log Level zu schieben spart viel Speicherplatz. Wichtig ist auch, dass der Log Level während des Betriebs angepasst werden kann, ohne die Applikation stoppen zu müssen. Speziell in verteilten Systemen möchte man Logs an zentraler Stelle haben. Lösungen wie z.B der ELK Stack haben sich als sehr nützlich erwiesen. Falls Logfiles verwendet werden, sollte eine Abschätzung des Speicherplatzes gemacht und die Umgebung dementsprechend dimensioniert werden. Umgekehrt ist die Speicherlimitierung bei der Logging Konfiguration zu berücksichtigen.
Denn wie hoch ist der Nutzen von Logs, wenn sie nicht weiterverwendet werden? Eher gering.
Verwendet man z.B. den ELK Stack können in Kibana hervorragend Dashboards erstellt werden. Je nach Abteilung können diese Dashboards eine andere Sicht auf die Applikation haben. Der Betrieb möchte wissen, dass ein Fehler aufgetreten ist. Developer müssen den Fehler nachvollziehen und die Security Abteilung möchte mögliche Angriffe erkennen. Für das Management sind ebenfalls interessante Metriken möglich!
GC Logs
Garbage Collection Logs sind eine einfache Art Daten über Speicherverhalten der JVM zu bekommen und sollten immer aktiv sein. Um GC Logs auch über einen längeren Zeitraum zu behalten, muss dies konfiguriert werden. Kurz gesagt, die Rotation der Logfiles überschreibt alte Logs. Auch bei einem Neustart der Applikation werden die alten GC Logs überschrieben. Sehr gut beschrieben ist es in diesem Beitrag.
JDK
Oracle bzw. OpenJDK kommt mit vielen nützlichen Tools. Diese Tools sind jedoch nur in der JDK und nicht in der JRE Version verfügbar. Auch wenn JDK Java Development Kit bedeutet, sollte es in der Produktionsumgebung verwendet werden.
JStat
jstat ist ein einfaches Tool, um wie bei GC Logs, Informationen zu Speicherverhalten der JVM zu kommen. jstat ist sehr nützlich, um Live zuzuschauen wie sich der Speicher verhält.
JStack
jstack verwendet man, um einen Thread Dump der JVM zu machen. Man erfährt also, welche Funktionen die Applikation gerade bearbeitet. Mit einem Thread Dump erkennt man, ob sich Threads gegenseitig blockieren, ob ein Thread stecken geblieben ist (mit mehreren Thread Dumps) oder auch welcher Thread gerade viel CPU benötigt. In Linux gibt es den Befehl “top”. Mittels “top -H” werden die Threads zum Prozess angezeigt. Die Thread ID kann umgerechnet und mit dem Thread Dump verglichen werden. Minütliche Thread Dumps sind eine einfache Möglichkeit Daten über einen längeren Zeitraum zu sammeln und sie sind sehr nützlich bei der Fehleranalyse. Grundsätzlich sind Thread Dumps schnell erstellt. Aber Achtung, wenn der Thread Dump erstellt wird, wartet die JVM auf einen Safe Point aller Threads. Bei sehr vielen Threads kann es im Sekundenbereich liegen.
JMap
jmap ermöglicht es einen kompletten Speicherabzug der JVM zu erstellen. Den Speicherabzug analysiert man am besten mit MAT (Eclipse Memory Analyser). Im Prinzip hilft MAT herauszufinden, welche Objekte den meisten Speicher verbrauchen, bzw warum Objekte bei einer Garbage Collection nicht aufgeräumt werden. Je größer der Speicher der JVM ist (Xmx), desto länger brauchen die Erstellung und die Analyse des Heap Dumps. Wichtig ist auch, dass genügend freier Speicherplatz auf der Umgebung verfügbar ist. Als Faustregel gilt: Xmx * 1,5. Ein Heap Dump lässt sich auch hervorragend komprimieren.
Java Flight Recorder
Der Flight Recorder ist ein Java Profiler und kommt mittlerweile mit OpenJDK gratis mit. Ein Flight Recording lässt sich während des Betriebs der Applikation starten und wird mit der Java Mission Control ausgewertet. Versuchen Sie auch mal während der Entwicklung ein Flight Recording zu erstellen. Sie werden überrascht sein, welche Einblicke und Ergebnisse Sie erhalten.
APM
Mit den oben genannten Tools und Methoden können Sie einen Großteil, wenn nicht sogar alle Bereiche abdecken. Es gibt am Markt auch kostenpflichtige Tools, welche nicht unerwähnt bleiben sollen. Dynatrace und AppDynamics sind sehr gute Lösungen, um weitere Einblicke in die Applikation zu bekommen. Geschulte Personen holen viele Informationen aus diesen Tools. Leider habe ich auch schon gesehen, dass für diese Tools viel Geld bezahlt wurde, ohne dass sie genutzt wurden.