with programs page form example code java apache tomcat

java - page - jsp example programs



Tomcat se apaga automáticamente (10)

Estoy usando Apache y Tomcat en un servidor de Windows y desde esta mañana, Tomcat deja de funcionar sin ningún registro. No se cuelga, simplemente se apaga.
No hay registro en Tomcat, la CPU / memoria son multas, no hay System.Exit en mi código.

¿Alguna vez alguien ha tenido este problema?

Sucede al azar, después de 5-10 minutos. La aplicación responde normalmente y en algún momento, boom .. deja de funcionar.

ACTUALIZACIÓN: Todavía no hay idea. El equipo de administración instalará la aplicación web en otra caja ...


¿Sus servlets o una de sus dependencias tienen permiso para llamar a System.exit ()? (No estoy seguro de cómo están bloqueadas las máquinas virtuales de Tomcat en ese sentido)

He tenido desarrolladores que piensan que está bien usar exit (666); en la detección de una matriz no invertible (que no es buena, pero seguro como diablos no es fatal). Arrgh. ¿Quizás tienes algún culpable similar en tu sistema?


En algún momento sucede si algún otro programa se está ejecutando en el mismo puerto. Por ejemplo Skype. Apague el programa antes de iniciar Tomcat.


Esto suena como si la JVM se estrellara. ¿Has buscado un registro de fallos de JVM? Por lo general, tiene un nombre como hs_err_pid * .log y se crea en el directorio de trabajo de la JVM.

Si encuentra un archivo como este y lo carga, entonces probablemente podamos ayudarlo más.

Algunas preguntas:

  • ¿Ha cambiado recientemente la versión de Java que está usando?
  • ¿Cuál es la versión exacta de Tomcat que está utilizando?
  • ¿Estás utilizando Tomcat Native (el tiempo de ejecución portátil de Apache)?

Hace frente a este problema recientemente.

Escenario : Tomcat se inició con éxito pero se apaga automáticamente después de 1 hora y, a veces, esto sucede después de 1 día y no hay nada en los registros de Tomcat.

Problema : el problema real fue el uso de memoria alta y no hay memoria SWAP libre.

Cómo encontré la solución

Si Tomcat no muestra ningún registro, debe haber algo en los registros del sistema, así que verifiqué /var/log/messages pero como el permiso fue denegado, intenté con /var/log/dmesg y obtuve esto.

"Sin memoria: proceso de eliminación 14606 (java) puntuación 106 o sacrificio del niño".

En la salida noté Swap Memory gratis 0 K. Ejecutó el comando top para confirmar lo mismo. Entonces, de alguna manera hubo un alto uso de memoria que causó que el sistema operativo matara el proceso de mi gato.

Después de pasar horas finalmente consiguió el motivo.

ps -ef | grep tomcat ps -ef | grep tomcat demostró que había varios procesos tomcat ejecutándose para la misma aplicación. Parece que, los cierres de tomcat anteriores podrían no haberse realizado con éxito y los procesos no se eliminaron incluso después del cierre debido a alguna razón, lo que estaba causando el alto uso de memoria.

Por lo tanto, eliminó todos los procesos tomcat en ejecución usando kill La memoria SWAP se liberó.

Comenzó Tomcat de nuevo, funcionó bien. :)


Noté CATALINA_OPTS en mi camino y eso se estableció para un tamaño de JVM más bajo. Por lo tanto, se encontró el bloqueo y no se encontró ningún registro de tomcat. El servidor se apaga automáticamente en menos de 2 hrs.

check, CATALINA_OPTS o JAVA_OPTS - estos pueden tener configuraciones de jvm. Auméntelos o coméntelos y aumente la memoria de intercambio.


Recientemente tuve este problema, si alguien se enfrenta al mismo problema en el futuro, espero que esto ayude.

Escenario: Tomcat se apaga sin ningún registro o error

Causa raíz de mi problema: método sincronizado al que se accede desde una tarea usando TimerTask

Tuve una clase de singleton con un método sincronizado al que se accedía desde varios subprocesos según el temporizador o la acción del usuario, algunas veces este método tardará unos minutos en completarse. Cuando TimerTask está esperando en este método por algún tiempo (supongo que el temporizador está agotado / el hilo está cancelado o algo está sucediendo en el fondo) y en el momento en que se libera el bloqueo del método, el Tomcat está siendo eliminado.

Así que eliminé la palabra clave sincronizada y eliminé singleton e hice algunos cambios de código para la seguridad de subprocesos. Entonces el problema se ha ido.

Cómo me enteré: tenía una declaración de registro en la primera línea del método sincronizado y cada vez que se detuvo el tomcat encontré este mensaje en las últimas líneas.

Saludos, Phanindra Kasturi


Tuve este problema, y ​​encontré la causa en este link . Mi script para iniciar tomcat tenía la última línea tail -f catalina.out . En algún momento no eliminé esta secuencia de comandos, el shell se apagó y eliminó la secuencia de comandos con todos los procesos secundarios, incluido Tomcat.


cosas para buscar en la depuración de un problema como este:

  • Mire el directorio de registros ($ TOMCAT_ROOT / logs) para asegurarse de que ninguno de los archivos de registro tenga ningún rastro de pila
  • Mire la secuencia de comandos de inicio de Tomcat para verificar la ubicación de los archivos de registro para ver si los registros no se están escribiendo en otro directorio.
  • Otra razón podría ser que algún otro usuario / proceso podría estar emitiendo un kill -9 que podría matar a Tomcat sin darle la oportunidad de registrar errores.

otra posibilidad es que se inició algún proceso esta mañana en el cuadro que está vinculado a un puerto que su servidor requiere.


"El servicio en la computadora local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no están siendo utilizados por otros servicios o programas".

Pasé por el problema. He intentado tantas maneras de solucionarlo. Finalmente, obtuve la solución de la siguiente manera.

1) Haga clic en Ejecutar comando desde el botón de inicio.

2) Ingrese Services.msc y luego haga clic en Aceptar, obtendrá todos los servicios en su computadora.

3) Seleccione su servicio y haga clic derecho en el servicio y seleccione Propiedades

4) Vaya a Propiedades de inicio de sesión y seleccione Cuenta del sistema local, luego haga clic en Aceptar.

Esto funcionará.