Cache Monitoring über JMX

Beim Betrieb des jadice web toolkit ist die Überwachung des Cache wichtig. Hierbei können über den Cache verschiedene Metriken erhalten werden, welche Informationen zum allgemeinen Laufzeitverhalten bereitstellen können. Wichtig ist, dass neben dem Cache auch die Metriken für den Hauptspeicherverbrauch, die Prozessorauslastung sowie das Verhalten des Garbage Collectors betrachtet werden. Dieser Artikel konzentriert sich jedoch primär auf das Monitoring des Cache. 

Aktivierung der Cache-Überwachung mittels JMX

Die Cache-Überwachung kann mittels JMX MBeans gestartet werden. Damit ist es möglich, die Überwachung ohne Änderungen an der Laufzeit zu aktivieren. Hierzu geht man wie folgt vor:

 

1) Verbinden mittels JMX Client

Um auf die entsprechenden MBeans zuzugreifen, muss eine Verbindung mittels JMX aufgebaut werden. Hierbei gibt es verschiedene Wege und Clients, mit welchen dies erreicht werden kann. In dem folgenden Beispiel wird jconsole verwendet, ein Werkzeug des JDK. Grundsätzliche Informationen zu JMX finden sich unter https://docs.oracle.com/javase/tutorial/jmx/index.html

2) Aktivieren der Statistics Bean

Standardmäßig sammelt der Cache keinerlei Statistiken über Zugriffe, Fehlschläge und Erfolge. Dies muss gezielt aktiviert werden. Hierfür kann die Operation enableStatistics über die org.jadice.util.mm.cache:type=CacheConfiguration Bean aufgerufen werden

3) Auslesen der Statistik-Werte

Nach dem Aufruf der Operation enableStatistics wird eine neue MBean unter dem Namen org.jadice.util.mm.cache:type=CacheStatistics registriert. Über diese können im Anschluss verschiedene Statistiken ausgelesen werden:

  • CacheEvictions
    Anzahl von aus dem Cache entfernten Elementen um den Speicher zu räumen oder weil auf diese lange nicht mehr zugegriffen wurde
  • CacheGets
    Anzahl von Cache-Zugriffen
  • CacheHits
    Anzahl von erfolgreichen Cache-Zugriffen. Dies bedeutet, Zugriffe, die Erfolgreich zu einem Element führten.
  • CacheMisses
    Anzahl von Cache-Zugriffen, die kein Ergebnis lieferten.
  • CacheMissPercentage
    Prozentuale Angabe, wie viele Cache-Zugriffe zu keinem erfolgreichen Ergebnis führten
  • CacheHitPercentage
    Prozentuale Angabe, wie viele Cache-Zugriffe zu einem erfolgreichen Ergebnis führten
  • CachePuts
    Anzahl von hinzugefügten Elementen zum Cache
  • CacheRemovals
    Anzahl von explizit entfernen Elementen aus dem Cache.

4) Aktivieren der Occupation Bean

Neben den Statistiken für den Zugriff auf den Cache, kann auch der Inhalt des Cache überwacht werden. Hierfür kann die Operation enableCacheOccupationBean über die org.jadice.util.mm.cache:type=CacheConfiguration Bean aufgerufen werden

5) Auslesen der Cache-Belegung

Nach dem Aufruf der Operation enableCacheOccupationBean wird eine neue MBean unter dem Namen org.jadice.util.mm.cache:type=CacheOccupation registriert.

Diese MBean stellt zwei verschiedene Arten von Werten zur Verfügung. Einerseits sind es die aktuell gültigen Konfigurationswerte für Schwellen im Cache:

  • EstimatedMemorySizeInBytesAtMaximum
    Die maximale geschätzte Größe von Elementen im Cache, bevor der Cache beginnt Elemente aus dem Cache zu entfernen um Hauptspeicher frei zu geben.
  • NumberOfElementsAtMaximum
    Die maximale Anzahl an Elementen im Cache, bevor der Cache beginnt, Elemente aus dem Cache zu entfernen

Neben den Konfigurationswerten finden sich auch Informationen über die aktuelle Auslastung des Cache:

  • EstimatedMemorySizeInBytes
    Die geschätzte Größe von Elementen im Cache.
  • NumberOfElements
    Die Anzahl von Elementen im Cache.

Programmatische Aktivierung der Cache-Überwachung

Die MBeans für die Überwachung können auch programmatisch aktiviert werden. Hierbei muss sichergestellt werden, dass die Aktivierung erst nach der Initialisierung von jadice durchgeführt wird. Dies kann beispielsweise in einem WebtoolkitServletContextListener erreicht werden:

ContextListener
@Override
protected void contextInitialized(ServletContextEvent sce, WebtoolkitServerContext webtoolkitContext) {

  final Cache cache = CacheManager.getDefault();
  if (cache instanceof CompositeKeyCache) {
    final CompositeKeyCache ckc = (CompositeKeyCache) cache;
    ckc.setCacheStatisticsEnabled(true);
    ckc.connectJMXStatisticsBean();
    ckc.connectJMXOccupationBean();
  }
}

Durch die programmatische Aktivierung werden damit die oben genannten Schritte 2 und 4 hinfällig und die entsprechenden MBeans sind direkt über JMX verfügbar.

Ähnliche Artikel