java tomcat crash jvm

java - Tomcat muere de repente



crash jvm (4)

Lo siento, tuve que quitar el cheque verde de @erickson. Finalmente me di cuenta de lo que estaba matando a Tomcat.

Parece que un complemento de perfilador no está configurado correctamente con VisualVM y el intento de ejecutar un perfil en el proceso de Tomcat lo mató.

Investigar por qué ahora mismo, y actualizaré esta respuesta una vez que sepa más.

Intentando diagnosticar algunos errores de Tomcat ( 7.0.21 ) y / o JVM extraños en una máquina de Linux de 64 bits (CentOS).

Estoy probando la carga de nuestra aplicación de servidor e intenté golpearla con mensajes de 100K. jvisualvm y mantuve mis ojos en el montón todo el tiempo. Todo se veía genial * (ver más abajo) hasta que llegué a aproximadamente 93K de mensajes procesados ​​y luego Tomcat murió. Ingresó un ps en el número PID de Tomcat para confirmar que estaba muerto.

Hasta este choque:

  • La prueba de carga había estado funcionando durante unos 90 minutos; Debería haber terminado poco después ya que estábamos en 93K / 100K)
  • CPU se mantuvo fuerte alrededor del 45%
  • El montón usado fue de alrededor de 2 GB (más o menos un montón después de GC), pero el tamaño del montón aumentó de 4 GB a MAX_HEAP después de unos 30 minutos
  • La carga / descarga de la clase estaba completando un ciclo normalmente
  • Los vertederos eran normales.

En ninguna parte del código del servidor hay llamadas a System.exit() , por lo que podemos descartarlo (y sí, lo he comprobado dos veces).

No estoy seguro de si esto es un fallo de Tomcat o la JVM ( ¿cómo puedo saberlo? ). E incluso si lo supiera, parece que no puedo encontrar ninguna indicación de lo que salió mal:

  • Todos los registros de la aplicación del servidor se detienen sin ningún mensaje de ERROR (aunque tenemos el registro configurado universalmente en DEBUG y superior)
  • Los archivos de catalina.out y respeto de Tomcat localhost_access_* detienen sin ninguna información

He oído que es posible hacer que Tomcat registre un volcado de información cuando lo hace, pero no estoy seguro de cómo hacerlo y los ejemplos en línea no ayudan mucho.

¿Cómo haría SO para diagnosticar esto? ¿Qué pasos debo tomar para comenzar a descartar todos los factores posibles?

¡Gracias por adelantado!


Otra posibilidad es que el sistema operativo se esté quedando sin memoria y el OOM Killer esté matando su proceso. En este caso, la JVM no tendría la oportunidad de escribir un volcado de pila o un archivo hs_err_pid.



Si la JVM se bloquea, debería tener un archivo hs_err_pidNNN.log; No tienes que hacer nada para habilitar esto. Su ubicación depende de su sistema operativo y de cómo esté ejecutando Tomcat. En Windows, pueden aparecer en su escritorio, a menos que se esté ejecutando como un servicio. De lo contrario, deberían estar en el directorio de trabajo actual del proceso bloqueado.

Su sistema operativo probablemente proporciona herramientas adicionales para el monitoreo de procesos; podría describir su entorno más, o tal vez preguntar en serverfault.com .

También es posible que jvisualvm esté causando la caída.

Intentaría reproducir el problema y simplificar progresivamente el escenario para ayudar a aislar la causa.