Automatische Java Deadlock Erkennung mit AppDynamics

Keine Kommentare

Deadlocks sind üble Fehler für Programmierer. Sie treten niemals in der Entwicklungsumgebung auf, sondern nur in Produktion. Und weil sie die Produktion beeinträchtigen, werden sie von den Betriebsteams schnell durch Neustarts beseitigt. Leider gehen dabei auch wertvolle Hinweise auf die Ursache verloren.

Als Entwickler hat man so fast nie die Gelegenheit ein Deadlock in Aktion zu sehen.

Wäre es nicht toll diese Informationen zur Analyse zu haben? Etwas das so aussieht:

Gute Nachrichten! Ich habe mir dieses Bild nicht ausgedacht, sondern aus AppDynamics entnommen. AppDynamics erkennt Deadlocks in Produktionsumgebungen automatisch und bietet so alle Informationen zur Beseitigung der Problemursache.


Für den folgenden kurzen Screencast habe ich das „Dining Philosophers“ Problem genutzt, welches in einer abgewandelten Variante von Dr. Heinz Kabutz in seinem letzten Newsletter behandelt wurde. Heinz war kürzlich mit seinem Java Specialists Master Course bei codecentric in Düsseldorf und hat mir davon erzählt. Ich hatte schon länger vor das Feature zu demonstrieren, nur nie Zeit ein Deadlock zu programmieren. Danke Heinz 🙂

Sobald der AppDynamics Agent in einer JVM läuft, beobachtet er die Thead Aktivität und diagnostiziert Deadlocks völlig automatisch. Es ist keinerlei Konfiguration notwendig, und verursacht keinen nennenswerten Overhead, weshalb es sich insbesondere für Produktionsysteme eignet.

Da die Informationen für die Entwickler von AppDynamics gesichert werden, kann der Server problemlos neu gestartet werden. Die notwendigen Diagnoseinformationen stehen weiterhin zur Verfügung. Diese nützliche Funktion hat uns schon in einigen Java Performance Troubleshooting Einsätzen geholfen.

Für mich ist diese Deadlockerkennung ein Geheimtipp in AppDynamics. Das Feature ist leider nicht sofort zu erkennen, da es keinerlei Konfiguration bedarf und nur im Fehlerfall in Erscheinung trifft. Aber eigentlich ist es ja auch nicht schlecht, dass man solche Dinge nicht einstellen muss.

Fabian Lange ist Lead Agent Engineer bei Instana und bei der codecentric als Performance Geek bekannt. Er baut leidenschaftlich gerne schnelle Software und hilft anderen dabei, das Gleiche zu tun.
Er kennt die Java Virtual Machine bis in die letzte Ecke und beherrscht verschiedenste Tools, die JVM, den JIT oder den GC zu verstehen.
Er ist beliebter Vortragender auf zahlreichen Konferenzen und wurde unter anderem mit dem JavaOne Rockstar Award ausgezeichnet.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.