Lightweight-Erkennung von Speicherverlusten
Dieser Artikel beschreibt Speicherverluste in Java™-Anwendungen und eine neue Funktion, die Lightweight-Erkennung von Speicherverlusten.
Obwohl eine Java-Anwendung einen integrierten Garbage-Collection-Mechanismus besitzt, der den Programmierer von der expliziten Freigabe von Objekten entbindet, treten in Java-Anwendungen trotzdem Speicherverluste (auch Speicherlecks genannt) auf. Speicherverluste treten in Java-Anwendungen auf, wenn versehentlich auf nicht mehr verwendete Objekte verwiesen wird. Dies verhindert, dass bei der Java-Garbage-Collection Speicher freigegeben wird.
Der Betriff Speicherverlust ist eigentlich irreführend. Ein Speicherverlust bezieht sich auf die falsche Verwendung oder falsche Verwaltung von Speicher. Alte, nicht mehr verwendete Datenstrukturen können offene Referenzen enthalten, werden aber von der Garbage-Collection nicht erfasst. Eine Datenstruktur kann unbegrenzt anwachsen, oder es ist nicht genügend Speicher reserviert, um verschiedene Anwendungen auszuführen.
Die meisten vorhandenen Technologien für die Erkennung von Speicherverlusten basieren auf der Annahme, dass der Benutzer weiß, dass ein Speicherverlust vorliegt, und diesen untersuchen möchte. Aufgrund dieser Analysevoraussetzungen bringen diese Technologien erhebliche Leistungseinbußen mit sich und sind deshalb als Erkennungsmechanismus in Produktionsumgebungen nicht geeignet. Diese Einschränkung bedeutet, dass Speicherverluste im Allgemeinen erst dann erkannt werden, wenn die Situation kritisch ist. Die Systemtests für die Anwendung verlaufen alle erfolgreich, die Anwendung wird in die Produktionsumgebung übernommen, wo sie abstürzt, und niemand weiß, warum.
WebSphere Application Server hat einen einfachen Erkennungsmechanismus für Speicherverluste implementiert, der im Framework des WebSphere-Leistungs- und Diagnose-Advisors ausgeführt wird. Dieser Mechanismus ist für eine frühzeitige Erkennung von Speicherproblemen in Test- und Produktionsumgebungen bestimmt. Dieses Framework ist nicht für die Analyse der Fehlerursache bestimmt. Vielmehr erstellt es Benachrichtigungen und bietet Unterstützung für die Generierung der Informationen, die von den Analysetools benötigt werden. Der Mechanismus erkennt nur Speicherverluste im Java-Heapspeicher und keine nativen Speicherverluste.
Die Lightweight-Erkennung für Speicherverluste in WebSphere Application Server erfordert keine zusätzlichen Agenten. Die Erkennung verwendet Algorithmen, die auf den im PMI-Service (Performance Monitoring Infrastructure) verfügbaren Informationen basieren, und hat nur geringfügige Auswirkungen auf die Leistung.