Pregunta

Con JRockit, se puede obtener la lista completa de los hilos de ninguna manera, y todos estos medios incluyen información acerca de la recolección de basura Tema (s):

1) Pedir la clase Thread de la información:

Thread.getAllStackTraces();

2) Utilizando ThreadGroup para obtener esa información:

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

3) El uso de JMX para obtener la lista:

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

4) CTRL-BREAK

Sin embargo, el uso de la JVM de Sun - en los últimos comunicados de Java 6 menos - sólo se CTRL-BREAK parece que se incluyen los hilos de recolección de basura y el hilo VM periódica de tareas. Me parece útil para monitorizar la CPU utilizada por los hilos de GC para que mi aplicación puede detectar y registrar cuando GC está utilizando la mayor parte del tiempo de CPU. Sin esta información, sólo se sabe cuando GC excede ciertos umbrales establecidos.

Si puedo incluso sólo averiguar el ID del tema de los hilos de GC, entonces JMX probablemente le dará al resto de la necesidad de información que (a menos que haya algo diferente en estos hilos). Por ejemplo, usando el método:

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

¿Alguien sabe cómo - o si se sabe que no es posible - para obtener información acerca de la recolección de basura Tema (s) utilizando la JVM de Sun

¿Fue útil?

Solución

Esto es específico para Java 1.5 + Sun (HotSpot) JVM. Registrar el MBean sun.management.HotspotInternal en el MBeanServer que busca monitorear desde. Esto activará el registro de estos mbeans internos HotSpot:

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

La HotspotThreading MBean tiene un atributo llamado InternalThreadCpuTimes que es un mapa de roscas internas threads.The GC de HotSpot son identificables por su nombre. Por ejemplo, en la JVM estoy corriendo en este momento, se les llama:

  • GC hilo tarea # 1 (ParallelGC)
  • GC hilo tarea # 0 (ParallelGC)

El valor del mapa es el tiempo de CPU para cada hilo.

La HotSpotMemory MBean también tiene un atributo llamado InternalMemoryCounters que tiene unos pocos bits adicionales de información acerca de GC.

Otros consejos

Un primer paso es usar verbosegc: java -verbose:gc -XX:+PrintGCDetails, que le dará alguna información sobre el tiempo (reloj de pared) se consume en las operaciones de GC, y el tipo de operación (completa o incremental). Su pregunta parece estar preguntando si lo puede conseguir mediante programación -. Probablemente se puede obtener algo de información a través de la gestión de I / F

Editado para añadir: Un poco de esto está disponible a través de la MemoryMXBean, pero no los detalles de tiempo de GC. Lo siento ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top