java - adding - Tomcat se apaga aleatoriamente con una pausa de AbstractProtocol después de un uso suave
spring log4j2 example (4)
Después de ejecutar mi aplicación web por un tiempo (el tiempo varía entre horas y días dependiendo del tráfico) Tomcat aparentemente se apaga al azar. No hay nada fuera de lo común en el registro antes de que esto suceda (sin excepciones) solo las cosas INFO normales que mi aplicación emite.
¿Alguien puede ayudar en la mejor manera de depurar esto? ¿Hay algo en Tomcat que active la señal de AbstractProtocol pause
?
Registros:
09-Nov-2011 21:40:19 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-80"]
09-Nov-2011 21:40:20 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
09-Nov-2011 21:40:21 org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Versión de Java: 1.6.0_25-b06 Versión de Tomcat: 6
He visto esto suceder antes y los registros a veces pueden ser crípticos. Sin embargo, me doy cuenta de que se está ejecutando en el puerto 80 (que es un problema completamente diferente), lo que me hace creer que modificó su server.xml. Si hay varias instancias de Tomcat en el servidor, asegúrese de que todas tengan puertos de apagado únicos. El puerto estándar es 8005 y si varias instancias escuchan en el mismo puerto, es posible eliminarlas a la vez.
Podría haber un System.exit () aleatorio en su código o en una biblioteca apalancada o está suprimiendo incorrectamente el verdadero mensaje de error en su código. Lo he visto muchas veces que la gente escribe esto en los controladores como una forma de manejo de errores:
try {
// Do something
} catch(Exception e) {
// No rethrowing or logging, just suppressing
}
Esto evita que el verdadero error se acumule o incluso el registro adecuado.
También he visto que los servidores Tomcat dejan de funcionar cuando llegan a los límites de memoria. Habrá un error en el espacio del montón en algún lugar de los registros, pero por alguna razón, encuentro que se puede enterrar con bastante facilidad y todo lo que quedará serán los mensajes de pausa. Podría valer la pena buscar en localhost.log además de en catalina.out. Por lo general hay menos basura allí.
Nuestro tomcat se estaba cerrando misteriosamente porque nuestro script personalizado comenzó con startup.sh original (sin nohup) y continuó haciendo cosas que consumían tiempo. La persona que invocó el script personalizado usó ctrl-Z para ponerlo en segundo plano y luego cerró el terminal de masilla. Esto envió a SIGHUP a todos los procesos conectados al terminal y Tomcat se cerró.
Wish Tomcat había impreso un mensaje acerca de recibir SIGHUP. Más tarde encontramos este enlace que confirmó nuestro análisis.
Si está trabajando en el cuadro de producción o desea una solución rápida / temporal, es posible que desee configurar su puerto de apagado en server.xml en "-1", lo que deshabilitará el comando de apagado. Esto no permitirá que otras aplicaciones, que podrían tener el mismo puerto de apagado, envíen una señal de apagado a su instancia de Tomcat. Pero con esta configuración tendrás que matarte Tomcat en lugar de apagarlo. Esa es la parte mala.
Tenemos este problema cuando logrotate envía un "kill-HUP" al proceso de Apache, y Tomcat ha sido generado por Apache: Apache matará a todos sus hijos cuando reciba la señal HUP.