Frage

Mit JRockit, können Sie die vollständige Liste der Themen mit allen Mitteln bekommen, und alle diese Mittel umfassen Informationen über die Garbage Collection Thread (s):

1) Asking die Thread Klasse für die Informationen:

Thread.getAllStackTraces();

2) Mit ThreadGroup diese Informationen zu bekommen:

ThreadGroup root = Thread.currentThread().getThreadGroup();
while (root.getParent() != null) {
    root = root.getParent();
}
Thread[] list = new Thread[root.activeCount() + 5];
root.enumerate(list, true);

3) JMX über die Liste bekommen:

ThreadMXBean THREAD_MX_BEAN = ManagementFactory.getThreadMXBean();
long[] tids = THREAD_MX_BEAN.getAllThreadIds();
ThreadInfo[] tinfos = THREAD_MX_BEAN.getThreadInfo(tids);

4) CTRL-BREAK

Um jedoch die Sun JVM mit - zumindest den letzten Java 6 Releases - nur CTRL-BREAK scheint die Garbage Collection-Threads und den VM Periodic Task-Thread zu schließen. Ich finde es nützlich CPU durch die GC-Threads verwendet, zu überwachen, so kann meine Anwendung erkennen und melden, wenn GC wird der größte Teil der CPU-Zeit. Ohne diese Informationen nur wissen, wenn GC bestimmte Schwellenwerte überschreitet.

Wenn ich auch nur die Thread-ID der GC-Threads finden, dann JMX wird wahrscheinlich den Rest der Informationen, die ich Notwendigkeit geben (es sei denn, etwas anderes zu diesen Themen ist). Zum Beispiel mit der Methode:

long threadId = tids[0];
long cpuTime = THREAD_MX_BEAN.getThreadCpuTime(threadId);

Wer weiß, wie - oder wenn bekannt ist, nicht möglich zu sein - Informationen über die Garbage Collection Thread (s) mit der Sun JVM zu erhalten

War es hilfreich?

Lösung

Dies ist spezifisch für die Java 1.5+ Sun (HotSpot) JVM. Registrieren Sie die MBean sun.management.HotspotInternal in der MBeanServer Sie aus zu überwachen suchen. Dadurch wird die Registrierung dieser HotSpot internen MBeans auslösen:

  • sun.management:type=HotspotClassLoading
  • sun.management:type=HotspotCompilation
  • sun.management:type=HotspotMemory
  • sun.management:type=HotspotRuntime
  • sun.management:type=HotspotThreading

Die HotspotThreading MBean ein Attribut namens InternalThreadCpuTimes , die eine Karte von HotSpot internen threads.The GC-Threads ist namentlich identifizierbar sind. Zum Beispiel in der JVM leite ich jetzt, werden sie genannt:

  • GC Aufgabe Thread # 1 (ParallelGC)
  • GC Aufgabe Thread # 0 (ParallelGC)

Der Wert der Karte ist die CPU-Zeit für jeden Thread.

Die HotSpotMemory MBean hat auch ein Attribut namens InternalMemoryCounters , die ein paar zusätzlichen Bits an Informationen über GC hat.

Andere Tipps

Ein erster Schritt ist verbosegc zu verwenden: java -verbose:gc -XX:+PrintGCDetails, die Ihnen einige Informationen über (Wanduhr) Zeit in GC-Operationen verbraucht geben, und die Art der Operation (vollständige oder inkrementelle). Ihre Frage scheint, ob zu fragen Sie es programmatisch bekommen -. Wahrscheinlich einige Informationen über das Management die ich bekommen kann / F

Edited hinzuzufügen: Ein Teil davon über die MemoryMXBean vorhanden ist, aber nicht die Besonderheiten der GC Zeit. Sorry ...

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