servlet example java multithreading java-ee tomcat jaxb

java - servlet - jersey rest example



¿Cuáles son estas advertencias en catalina.out? (3)

En pocas palabras, algunos ThreadLocals no se han limpiado correctamente. La mayoría (si no todos) los servidores J2EE / Contenedores de aplicaciones utilizan grupos de subprocesos para solicitudes entrantes y otras tareas, para evitar la sobrecarga de iniciar nuevos subprocesos todo el tiempo. El problema es que algunas bibliotecas (y usted mismo, si no lo sabe) no limpian sus ThreadLocals después de que finaliza la ejecución de la tarea / solicitud.

Normalmente, cuando el hilo muere al final de la ejecución, los objetos almacenados en ThreadLocals ya no se referencian y el recolector de basura se encarga de eliminar dichos objetos:

Cada subproceso contiene una referencia implícita a su copia de una variable local de subproceso, siempre que el subproceso esté activo y se pueda acceder a la instancia de ThreadLocal; después de que un hilo desaparece, todas sus copias de instancias locales de subprocesos están sujetas a la recolección de elementos no utilizados (a menos que existan otras referencias a estas copias).

Pero cuando el hilo ha sido obtenido de un grupo de hilos, no se muere, sino que se devuelve al grupo. Como el hilo todavía está vivo, también lo son los ThreadLocals a los que se hace referencia. Esto se manifiesta como pérdidas de memoria y "pérdida" de valores de una solicitud a otra cuando se usa el mismo ThreadLocal y el hilo que maneja la solicitud / tarea se utilizó antes.

Esta pregunta ya tiene una respuesta aquí:

Tengo una aplicación web en Tomcat 7.
Cuando apago Tomcat veo estas advertencias (pero no siempre)

SEVERE: The web application [/MyApplication] created a ThreadLocal with key of type [org.apache.xml.security.algorithms.MessageDigestAlgorithm$1] (value [org.apache.xml.security.algorithms.MessageDigestAlgorithm$1@2e2c2e2c]) and a value of type [java.util.HashMap] (value [{http://www.w3.org/2000/09/xmldsig#sha1=MESSAGE DIGEST SHA-1}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. Apr 3, 2012 1:56:19 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks SEVERE: The web application [/MyApplication] created a ThreadLocal with key of type [com.sun.xml.bind.v2.ClassFactory$1] (value [com.sun.xml.bind.v2.ClassFactory$1@25442544]) and a value of type [java.util.WeakHashMap] (value [{class com.classes.internal.ContactType=java.lang.ref.WeakReference@17eb17eb, class javax.xml.bind.annotation.adapters.HexBinaryAdapter=java.lang.ref.WeakReference@178a178a, class com.classes.internal.xjc.ListType=java.lang.ref.WeakReference@181c181c, class com.classes.internal.xjc.MessageType=java.lang.ref.WeakReference@17711771, class com.classes.internal.xjc.MessageType=java.lang.ref.WeakReference@17011701}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. Apr 3, 2012 1:56:19 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks SEVERE: The web application [/MyApplication] created a ThreadLocal with key of type [org.apache.xml.security.utils.UnsyncBufferedOutputStream$1] (value [org.apache.xml.security.utils.UnsyncBufferedOutputStream$1@4a904a90]) and a value of type [byte[]] (value [[B@67486748]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

¿Qué significan estas advertencias en catalina.out en shutdown?
Veo algunas de mis clases JAXB mencionadas, pero no puedo decir cuál es el problema aquí.

¿Alguna ayuda, por favor?



Al menos uno de los mensajes JAXB parece estar relacionado con un error conocido:

org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks SEVERE: la aplicación web [/ MyApplication] creó un ThreadLocal con la clave del tipo [com.sun.xml.bind.v2.ClassFactory $ 1] (value [com.sun.xml.bind] .v2.ClassFactory $ 1 @ 25442544]) y un valor de tipo [java.util.WeakHashMap]

Ver JAXB-563 y JAXB-831 (NB - Estos están en java.net y requieren un inicio de sesión para verlos de manera uniforme). El primer error fue supuestamente reparado, pero como otros han comentado, esto no está completamente solucionado. El segundo error tiene una solución sugerida que consiste en forzar un gc () antes de permitir el apagado del contexto que mitigue el problema (aunque no lo elimine por completo): puede usar un ServletContextListener personalizado y simplemente llamar a System.gc() en el contextDestroyed() método.

En cuanto a los otros errores, debe seguir las otras respuestas y hacer algunas correcciones graves.