2010-04-25 22 views
21

De forma predeterminada, WebLogic elimina los hilos atascados después de 15 minutos (600 s), esto se controla mediante el parámetro StuckThreadMaxTime. Sin embargo, no puedo encontrar más detalles sobre cómo se define exactamente "estancamiento". Específicamente:Protección de hilo atascado WebLogic

  • ¿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 subprocesos de procesamiento de solicitudes o a todos los subprocesos? 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 de gran tamaño 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 simple servidor HTTP, p. 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.

Respuesta

21

Weblogic does NOT kill stuck threads after the StuckThreadMaxTime. No puede hacer así, el mensaje es sólo una información de estado de manera que (es decir admin) es consciente de que el hilo ha cruzado 10 minutos (600 s = 10 min, no 15)

Este es un valor configurable.

El temporizador se inicia cuando el subproceso 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.

+0

OK, pero como sé, puede volver a implementar toda la aplicación si hay demasiados hilos atascados, ¿no? Podría haber mezclado cosas con el tiempo de espera de la sesión, tuvimos algunos problemas con eso en el pasado. Acerca de los archivos: la aplicación es tan grande y tiene errores que no hay tiempo para optimizarla, ya que siempre hay problemas más urgentes. – doublep

+6

El servidor dejará de responder a nuevas solicitudes si hay demasiados hilos atascados, pero en su caso no están realmente "atascados", pero están procesando solicitudes largas. Un mejor enfoque es darle al FileDownloadServlet su propio conjunto de hilos de ejecución: en WL10, este será un WorkManager dedicado. Esto garantiza que cualquier subproceso bloqueado/afectado en la descarga no afectará al resto del servidor que procesa las solicitudes normales. mira aquí para más información - http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1059038. Puede definir una política de despacho para ese servlet. – JoseK

+0

Gracias por la respuesta y las aclaraciones. – doublep

7

La documentación del WorkManager WLS10 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.

Agregando a ese ejemplo, se puede añadir a la definición <ignore-stuck-threads>true</ignore-stuck-threads><work-manager> cuales debe evitar las discusiones que trabajan para que se cuenten WorkManager contra un estado servidor que ha fallado.

+1

¡Justo lo que estaba buscando, gracias! –