java-ee - valid - weblogic tools for eclipse oxygen
WebLogic protección de rosca atascada (2)
La documentación de WLS10 WorkManager puede causar algunos arañazos reales. Consulte http://blogs.oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html para obtener un ejemplo paso a paso de cómo definir un WorkManager para una aplicación web en weblogic.xml y asignarle un servlet específico para usarlo.
Añadiendo a ese ejemplo, puede agregar <ignore-stuck-threads>true</ignore-stuck-threads>
a la definición <work-manager>
que evitará que los hilos que trabajan para ese WorkManager se cuenten contra un estado de servidor fallido.
De manera predeterminada, WebLogic elimina los hilos atascados después de 15 minutos (600 s), esto es controlado por el parámetro StuckThreadMaxTime
. Sin embargo, no puedo encontrar más detalles sobre cómo se define exactamente "estancamiento". Específicamente:
- ¿Cuál es el punto en el que comienza la cuenta atrás de 15 minutos? ¿Comienza el proceso de solicitud? Última
wait()
como método? ¿Algo más? - ¿Esto se aplica solo a los hilos de procesamiento de solicitudes o a todos los hilos? Es decir, ¿puede un subproceso de procesamiento de solicitudes "escapar" de esta protección al generar un hilo de trabajo para una tarea larga? Especialmente, ¿puede delegar la escritura de respuesta a dicho trabajador sin una cuenta regresiva de 15 minutos?
Mi caso de uso es la descarga de archivos enormes a través de un sistema de permisos. Dado que un usuario necesita ser autenticado y tener permisos para ver un archivo, no puedo (o al menos no sé cómo) dejar esto en un servidor HTTP simple, por ejemplo, Apache. Y debido a que los archivos pueden ser enormes, la descarga podría (al menos en teoría) tomar más de 15 minutos.
Weblogic NO mata los hilos atascados después de StuckThreadMaxTime
. No puede hacerlo, el mensaje es solo una información de estado para que usted (es decir, el administrador) sepa que el hilo ha cruzado 10 minutos (600 segundos = 10 minutos, no 15)
Este es un valor configurable.
El temporizador comienza cuando el hilo comienza a procesar la solicitud dentro del servidor. El hilo no se eliminará, sino que continuará procesándose hasta que la operación finalice. por lo tanto, en su caso, no necesita preocuparse por la muerte del hilo, acaba de informarle sobre el tiempo empleado, que conoce en este caso de uso.
Se aplica a todos los hilos AFAIK: cualquier hilo generado también operará bajo las mismas reglas.
En mi humilde opinión, Weblogic (o cualquier servidor de aplicaciones) no es el lugar para almacenar y servir archivos de gran tamaño. Esto es ideal para el nivel del servidor web: utilizamos SunOne en el que se puede ejecutar el servlet de descarga de archivos. En su caso, necesitaría Tomcat junto con su Apache para optimizar esto.