2010-11-15 24 views
9

Estoy intentando diagnosticar algunos problemas de memoria en nuestro servidor J2EE. Configuré jconsole en nuestro servidor en vivo y estoy tratando de monitorear el estado del servidor tomcat a través de él. Tengo una pregunta rápida sobre la pestaña Subprocesos en jconsole. Puedo ver un hilo llamado Finalizer en la lista de hilos. El número de 'Total bloqueado' en este hilo sigue aumentando. Por ejemplo, ahora es 4.049, hace una hora fue 3.867.Uso de Jconsole para pérdida de memoria

Name: Finalizer
State: WAITING on [email protected]
Total blocked: 4,049 Total waited: 1,579

¿Qué significa este hilo? ¿Está de alguna manera relacionado con el GC? He descargado un volcado de heap donde muestra que el número de objetos pendientes para la finalización es cero.

El tamaño de almacenamiento dinámico máximo de mi servidor es de 200 MB por el momento, el tamaño del almacenamiento dinámico permanece entre 100 y 150 MB y cuando hago clic en 'Realizar GC', puedo ver que se libera espacio en el montón. Sin embargo, esto no cambia la cantidad de memoria que toma este proceso de tomcat en el administrador de tareas de Windows, que ahora consume más de 700 MB.

Cualquier consejo sobre cómo debo hacerlo será muy apreciado. Por favor, hágame preguntas si necesita más información sobre la configuración de mi servidor.

Gracias de antemano.

Respuesta

10

Creo que he encontrado la respuesta a mi pregunta. El 'Total bloqueado' y 'Total esperado' simplemente cuentan el número de veces que el hilo esperó o fue bloqueado. JConsole toma esta información del ThreadInfo.

Conteo bloqueado es el número total de veces que el subproceso se bloquea para entrar o volver a entrar en un monitor. Es decir. la cantidad de veces que ha estado un hilo en el estado java.lang.Thread.State.BLOCKED.

El recuento de espera es el número total de veces que el subproceso aguarda la notificación. es decir, la cantidad de veces que ha estado un hilo en el estado java.lang.Thread.State.WAITING o java.lang.Thread.State.TIMED_WAITING.

+0

Por cierto, el tiempo está en unidad de segundos, en mi prueba. –

0

El administrador de tareas de Windows muestra el tamaño de la memoria virtual y la mayoría de las veces no es precisa. He visto esto mucho tiempo, lo que JConsole muestra ya que la huella es la huella de memoria correcta.

Para obtener más información acerca de JConsole, verifique here.

+0

Gracias por su enlace. También he visto esa página antes.Tiene una captura de pantalla del hilo de Finalizer de la que estoy hablando (Figura 3-8). Sin embargo, no entra en ningún detalle sobre el hilo, o los atributos totales bloqueados, totales esperados. –

1

Nombre: Finalizer Estado: ESPERA EN [email protected] total bloqueado: 4049 total esperado: 1.579

El ReferenceQueue es mantener una referencia para todos los objetos no utilizados (esperando la finalización), en otras palabras, hay 4049 objetos esperando una recolección de basura.

Cuando la caza de pérdidas de memoria, asegúrese de hacer un GC completa (o muchos GC hasta que nada no se puede recuperar) antes de hacer el volcado