es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Apendices de Quartz SLF4J Log4J modificados en tiempo de ejecución externamente a un SocketAppender.

Tenemos un problema con un solo cliente donde los trabajos de Quarzo dejan de ejecutarse poco después del inicio. Diagnosticar el problema ha sido muy frustrante porque Quarzo no estaba registrando correctamente en el disco como lo hace habitualmente para este cliente. Después de varios días de depuración difícil del sistema de producción y de utilizar jstack después de que dejen de ejecutarse los trabajos, pude observar que el proceso principal de Quarzo está IO bound intentando escribir en un socket de registro… que no hemos configurado. Esta es una pila de aplicaciones de producción QA desplegada en más de 1000 servidores, sin embargo, este problema solo ocurre con un cliente en uno de sus dos servidores que ejecutan nuestro software.

Después de que los trabajos dejen de ejecutarse, jstack muestra lo siguiente para nuestro hilo principal de Quarzo:

La principal conclusión de la pila anterior se resalta, pero incluye “BlockDataOutputStream.drain” (IO Bound) y “org.apache.log4j.net.SocketAppender”. Solo hemos configurado un “rolling file appender” (que ya no está escribiendo). La presencia de un SocketAppender IO bound es desconcertante ya que nunca hemos configurado tal appender y está IO bound bloqueando nuestros hilos como resultado. Nuestras propiedades de log4j son las siguientes:

log4j.debug=TRUE
log4j.rootLogger=INFO, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=C:/CIP/Server/tmp/scheduler.log
log4j.appender.R.MaxFileSize=5MB
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSSS} %p %t %c – %m%n

Los registros de Tomcat muestran que está procesando esta configuración de log4j en el inicio. Es mi opinión que de alguna manera en tiempo de ejecución la configuración de registro está siendo cambiada por alguna fuente externa. Todos nuestros componentes están incrustados en nuestra aplicación, no están instalados de forma global y no utilizan ninguna configuración global en el servidor. He comprobado que no se definen variables de entorno del classpath o de Java de forma global en el servidor. La configuración anterior de log4j creará un archivo de registro vacío en el inicio, pero nunca escribirá en él (pero solo en este único despliegue).

Este cliente tiene SolarWinds instalado en este servidor (y no en el otro servidor que funciona bien). Puedo ver que SolarWinds tiene su propia pila de Java incrustada, incluyendo SLF4J/Log4J instalado en C:\Windows\SysWOW64/ContegoSPOP. Sin embargo, no veo ninguna indicación de que tenga algún impacto global que deba interferir con nuestro software.

¿Tiene Tomcat y/o SLF4J algún mecanismo de descubrimiento o herencia o modificación desde un proceso remoto que pueda cambiar los conectores de registro para un servlet de Quarzo?

OpenJDK 13 + Tomcat 8.5.73 + Quarzo 1.8.6 + SLF4J 1.6.0 + Log4J 1.2.17

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Problema con trabajos de Cuarcita que no se ejecutan para un solo cliente

    Antecedentes

    Como experto en TI especializado en Java, Tomcat, Log4j, planificador de Cuarcita y SLF4J, el problema en cuestión es que los trabajos de Cuarcita dejan de ejecutarse poco después del inicio para un solo cliente. Sin embargo, diagnosticar el problema ha sido frustrante porque Cuarcita no está registrando en el disco correctamente, como suele hacerlo para este cliente. Además, el proceso principal de Cuarcita está limitado por la E / S al intentar escribir en un SocketAppender que no se ha configurado.

    Problema

    El problema afecta solo a uno de los dos servidores que ejecutan el software del cliente, y está sucediendo en una pila de aplicaciones de producción QA’d implementada en más de 1000 servidores. El problema parece estar con la configuración de registro. El personal ha verificado que no se definen variables de entorno de Java o de ruta de acceso de clase globalmente, y ninguna fuente externa está cambiando la configuración de registro en tiempo de ejecución.

    Análisis

    Después de analizar el problema, parece que la presencia de un SocketAppender limitado por E / S es desconcertante ya que no se ha configurado tal appender, y está bloqueando los hilos como resultado. Todos los componentes están integrados en la pila de aplicaciones y no se está utilizando ninguna configuración global en el servidor.

    El personal descubrió que el cliente tiene SolarWinds instalado en el servidor, que tiene su pila de Java integrada, incluyendo SLF4J / Log4J. Sin embargo, no hay indicación de que interfiera con el software. Los registros de Tomcat muestran la configuración de registro durante el inicio, un appender de archivo rodante y un archivo de registro cuyo tamaño aumenta a 5 MB.

    Conclusión

    Es la opinión del experto que una fuente externa, como SolarWinds, está interfiriendo con la configuración de registro en tiempo de ejecución. No hay mecanismo de descubrimiento o herencia o modificación de los appenders de registro de un servlet Cuarcita por parte de Tomcat o SLF4J. Dado que la pila de Java de SolarWinds contiene SLF4J y Log4J, es vital garantizar que los archivos de configuración no entren en conflicto.

    El personal debe analizar la pila de Java de SolarWinds para ver si está causando el problema, y el experto debe investigar cómo funciona la pila de Java y determinar si puede alterar la configuración de registro en tiempo de ejecución. Al resolver el problema con la configuración de registro, el personal debería poder resolver el problema con los trabajos de Cuarcita que no se ejecutan.

Comments are closed.