martes, 29 de octubre de 2013

Configuración del administrador de trabajo por defecto (default Work Manager) en WebLogic

Un caso muy usual durante la operación del servidor WebLogic consiste en mejorar el rendimiento y eficacia del servidor; Generalmente esto se necesita cuando se requiere un mejor tiempo de respuesta de las aplicaciones o para soportar una elevada carga de trabajo (cientos de peticiones por minuto).

Para solventar dicho requisito, es necesario realizar una afinación, no sólo del servidor WebLogic, sino también del Sistema Operativo, Red y, en algunos casos, de la Base de Datos utilizada por nuestra aplicación.

En el servidor WebLogic se pueden realizar varias tareas para mejorar el rendimiento del mismo, por ejemplo:
  • Ajustar parámetros de la Maquina Virtual de Java (JVM)
  • Ajustar nivel y tipo de registro (Logging)
  • Ajustar parámetros de orígenes de datos (DataSources), si existen
  • Ajustar la administración de trabajo, hilos y timeouts (WorkManager)
  • Ajustar sistema de Entrada/Salida (I/O System)
  • Entre otras.


En esta ocasión sólo hablaré de la administración de carga de trabajo y la configuración que podemos realizar para aprovecharlo. Con el ajuste del WorkManager se pretende principalmente lo siguiente:
  • Especificar el tiempo respuesta máximo que el servidor debería de tolerar.
  • Especificar la carga máxima de trabajo, es decir, cuantas peticiones  y/o clientes puede soportar por un tiempo.
  • Especificar el tiempo de espera máximo para la ejecución de una tarea, con el fin de liberar recursos y continuar con otras tareas.

La configuración del WorkManager la podemos aplicar de dos maneras:
  • Dentro de los archivos de despliegue de nuestra aplicación, resultando  efectivo sólo para esta aplicación. Este se denomina administrador de trabajo de aplicación (Application WorkManager)
  • Desde la consola de administración WebLogic, efectivo para una o más aplicaciones y/o recursos en el servidor. Este se denomina administrador de trabajo global (Global WorkManager)      

De manera nativa, cada dominio WebLogic  cuenta con un WorkManager por defecto, que se asigna a cada servidor manejado y al servidor de administración para  procesar el trabajo que deben ejecutar. También, por defecto este WorkManager no está visible en la consola de administración WebLogic.

Para mejorar el rendimiento del servidor WebLogic podemos sobre-escribir el WorkManager por defecto, para  ello hacemos lo siguiente:


  1. Entrar a la consola de Administración WebLogic con un usuario con privilegios de administrador.
  2. Crear un WorkManager con el nombre default, y asígnarlo a todos los servidores existentes en el dominio. Ver imagen 01.
  3. Entrar a la configuración del nuevo WorkManager y especificar los atributos del mismo, crear cada uno de ellos con los valores con los que pretendemos mejorar el rendimiento. Ver imagen 02.

          Por ejemplo:

Atributo
Tipo
Objetivo
Valor afinado
Request Class
Response Time Request Class
Mejorar el tiempo de respuesta.
500 milisegundos
Request Class
Fair Share Request Class
Mejorar el tiempo de respuesta.
75
Minimum Threads Constraint

Buena práctica
10
Maximum Threads Constraint

Soportar mayor carga de trabajo
200
Capacity Constraint

Soportar mayor carga de trabajo
100
Ignore Stuck Threads

Incrementar tolerancia a fallas
Habilitado

            Estos atributos deben tener el mismo destino que el WorManager.


Una vez guardado y activado los cambios, el WorkManager está listo. Todas las aplicaciones y recursos son atendidas por el mismo WorkManager por defecto, no obstante, ahora tiene nuevos valores para mejorar su rendimiento. 

Adicionalmente, podemos crear WorkManager personalizados y asignarlos a servidores específicos, en donde se busque un diferente rendimiento, claro, siempre será un mejor rendimiento.

En un ambiente productivo, se recomienda crear un WorkManager personalizado para una o más aplicaciones, o simplemente para una aplicación de misión crítica. Para que nuestras aplicaciones hagan uso de dicho WorkManager, es necesario incluir la referencia a éste en el descriptor de despliegue weblogic-application.xml, por ejemplo:

<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd"
                      xmlns="http://www.bea.com/ns/weblogic/weblogic-application">
  …
  <work-manager>
    <name>MiWorkManager</name>
  </work-manager>
  …
</weblogic-application>

En este mismo descriptor se puede definir un WorkManager y todos sus atributos, que aplicarían sólo a esta aplicación.

Imagen 01.

Imagen 02.