El tamaño de la memoria caché de EJB (Enterprise JavaBeans) puede afectar al rendimiento del servidor de aplicaciones.
Uno de los pasos para ajustar el contenedor de EJB
a niveles de rendimiento óptimo es ajustar la memoria caché de EJB.
Antes de empezar
Nota: En este tema se hace referencia a uno o más de los archivos de registro del servidor de aplicaciones. Como alternativa recomendada, puede configurar el servidor para utilizar la infraestructura de registro y rastreo HPEL en lugar de utilizar los archivos SystemOut.log , SystemErr.log, trace.log y activity.log en sistemas distribuidos y de IBM® i. Puede también utilizar HPEL junto con sus recursos de registro nativos de z/OS. Si utiliza HPEL, puede acceder a toda la
información de registro y rastreo utilizando la herramienta de línea de mandatos LogViewer desde
el directorio bin de perfil de servidor. Consulte la información sobre la utilización de HPEL
para resolver problemas de aplicaciones para obtener más información sobre la utilización de
HPEL.
Acerca de esta tarea
El procedimiento siguiente describe cómo utilizar el servicio de rastreo de diagnóstico
para ayudarle a determinar el mejor tamaño de memoria caché.
Procedimiento
- Habilite el rastreo de memoria caché de EJB. Para obtener información sobre cómo trabajar con el servicio de rastreo, consulte el tema Trabajar con el rastreo.
![[IBM i]](../images/iseries.gif)
Para obtener información sobre los valores del servicio de rastreo, consulte el tema Valores del servicio de rastreo de diagnóstico.Configure el rastreo para utilizar esta serie de rastreo:
com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy=all=enabled:com.ibm.ejs.util.cache.CacheElementEnumerator=
all=enabled
![[IBM i]](../images/iseries.gif)
Establezca Tamaño máximo de archivo en 200 MB o
más. Si deja el valor predeterminado de 20MB, podría llenar el registro cronológico de rastreo
único de 20 MB y perder algunos datos debido a la acomodación del rastreo.
![[IBM i]](../images/iseries.gif)
Establezca
Número máximo de archivos históricos en 5. Cinco archivos deben ser suficientes,
pero si ve que los cinco archivos están llenos y se produce una acomodación del rastreo, aumente
este valor.
![[IBM i]](../images/iseries.gif)
Detenga el servidor, suprima los archivos de
registros cronológicos existentes y, a continuación, inicie el servidor.
Detenga y reinicie el servidor.
- Ejecute casos de ejemplo corrientes para capturar los datos de rastreo de memoria caché. Ejecutando un escenario habitual con el rastreo habilitado, obtendrá los datos de rastreo de memoria caché de EJB
para analizar en los pasos siguientes.
- Visualice y analice la salida del rastreo.
- Abra el registro cronológico de rastreo. Busque una de las siguientes series de rastreo, o ambas, para visualizar:
![[IBM i]](../images/iseries.gif)
BackgroundLru 3 EJB Cache: Sweep (1,40) - Cache limit not reached : 489/2053
BackgroundLru > EJB Cache: Sweep (16,40) - Cache limit exceeded : 3997/2053 Entry
Trace: 2007/03/22 11:47:07.048 01 t=7A9690 c=UNK key=P8 (13007002)
ThreadId: 0000006a
FunctionName: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
SourceId: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
Category: FINEST
ExtendedMessage: EJB Cache: Sweep (23,40) - Cache limit not reached : 0/2053
Trace: 2007/03/22 11:54:16.755 01 t=7BD3B0 c=UNK key=P8 (13007002)
ThreadId: 0000006d
FunctionName: EJB Cache: Sweep (75,37) - Cache limit exceeded : 3801/2053
SourceId: com.ibm.ejs.util.cache.BackgroundLruEvictionStrategy
Category: FINER
ExtendedMessage: Entry
En las series de rastreo que incluyen las palabras
Cache limit (Límite de memoria caché) encontrará una proporción. Por ejemplo, 3997/2053.
El primer
número es el número de enterprise beans que actualmente están en la memoria caché de EJB (se denomina
capacidad). El segundo número es el valor de memoria caché de EJB (en pasos posteriores
aparece más información sobre esto). Utilice esta proporción, particularmente la capacidad, en el análisis.
Además, busque las sentencias
Cache limit not reached
(No alcanzado el límite de memoria caché) y
Cache limit exceeded
(Superado el límite de memoria caché).
- Cache limit not reached (No alcanzado el límite de memoria caché)
- La memoria caché tiene un tamaño mayor o igual que el adecuado. Si es mayor, está malgastando memoria y debe reducir el tamaño de memoria caché a un valor más adecuado.
- Cache limit exceeded (Superado el límite de memoria caché)
- El número de beans actualmente en uso es mayor que la capacidad
especificada, que indica que la memoria caché no está ajustada adecuadamente.
La
capacidad puede superar el valor de memoria caché de EJB porque éste no tiene un límite
estricto. El contenedor de EJB no deja de añadir beans a la memoria caché cuando se
alcanza el límite. Hacerlo podría significar que cuando la memoria caché está llena,
no se satisfaría una solicitud de un bean o se retardaría al menos hasta que la
memoria caché estuviera por debajo del límite. En su lugar, se puede superar el límite
de memoria caché, pero el contenedor de EJB intenta limpiar la memoria caché y conservarla por debajo
del tamaño de memoria caché de EJB.
En el caso donde se supera el límite de memoria caché, podría
ver un punto de rastreo similar a éste:
![[IBM i]](../images/iseries.gif)
BackgroundLru < EJB Cache: Sweep (64,38) - Evicted = 50 : 3589/2053 Exit
EJB Cache: Sweep (64,38) - Evicted = 50 : 3589/2053
Fíjese en
la serie
Evicted =. Si ve esta serie, está utilizando beans de sesión
con estado o beans de entidad configurados para la opción A o B de colocación en memoria caché. Objetos desalojados (significa que no está aprovechando completamente la opción de almacenamiento en memoria caché que ha elegido. El primer paso es intentar aumentar el tamaño
de memoria caché de EJB. Si la ejecución continuada de la aplicación provoca más desalojos,
significa que la aplicación accede o crea más beans nuevos entre barridos de memoria caché de EJB
de los que la memoria caché puede contener y
NO reutiliza los beans existentes.
Quizá prefiera considerar utilizar la Opción C de
almacenamiento en memoria caché para los beans de entidad o comprobar la aplicación para ver si no se eliminan los beans de sesión con estado
cuando ya no los necesita.
Nota: Los beans de entidad configurados
con la opción C de colocación en memoria caché sólo están en memoria caché mientras se está en una
transacción y es necesario conservarlos en la memoria caché durante toda la transacción.
Por lo tanto,
nunca se desalojan durante un barrido de memoria caché, pero se eliminan de memoria caché cuando
finaliza la transacción. Además, si utiliza sólo beans de sesión sin estado o beans de entidad con la opción C de colocación en memoria caché (o ambas), quizá prefiera aumentar el intervalo de limpieza de la memoria caché de EJB en un número mayor. El intervalo de limpieza se puede establecer como se describe en Valores de memoria caché de EJB. Los beans de sesión sin estado
NO están en la memoria caché de EJB y dado que los beans de entidad
que utilizan la opción C de colocación en memoria caché nunca se desalojan mediante la estrategia de
colocación en memoria caché (LRU), realmente no es necesario realizar el barrido muy a menudo. Cuando se utilizan sólo los beans de sesión sin estado o la
opción C de colocación en antememoria, sólo debe aparecer "Evicted = 0" en el ejemplo de rastreo mostrado.
- Analice el registro cronológico de rastreo. Busque la serie de rastreo Cache
limit exceeded (Superado el límite de memoria caché).
- Podría encontrar más de una instancia de esta serie. Revíselas todas para encontrar el valor de máxima capacidad de beans en la memoria caché de EJB. Restablezca el tamaño de la memoria caché de EJB a aproximadamente el 110% de este número. En un paso posterior se describe cómo se establece el tamaño de memoria caché de EJB.
- Puede que no encuentre ninguna instancia de esta serie. Esto significa que no ha
superado la capacidad de la memoria caché de EJB (que es su objetivo final), pero no haberlo
visto durante su análisis inicial también podría significar que la memoria caché es demasiado
grande y utiliza memoria innecesaria. En este caso, todavía tendrá que ajustar la memoria caché reduciendo el tamaño de memoria caché hasta que no se exceda el límite de memoria caché y, a continuación, aumentándolo al valor óptimo. En un paso posterior se describe cómo se establece el tamaño de memoria caché de EJB.
Su objetivo último es establecer el límite de memoria caché en un valor que
no malgaste recursos, pero que tampoco esté en exceso. Una buena configuración
proporciona un rastreo en el que sólo aparece el mensaje
Cache limit not reached (No se ha alcanzado el límite de memoria caché) y una
proporción donde el número de capacidad puede
estar próximo, pero por debajo de, el 100% del valor de memoria caché de EJB.
Nota: Se recomienda no establecer el tamaño de la memoria caché en
un valor inferior al valor predeterminado de 2053.
- Modifique los valores de memoria caché basándose en el análisis. Consulte los valores de memoria caché de EJB para obtener información sobre cómo hacerlo.
![[IBM i]](../images/iseries.gif)
Detenga el servidor, suprima todos los archivos de
registros cronológicos y, a continuación, reinicie el servidor.
Detenga y reinicie el servidor.
- Repita los pasos anteriores hasta que esté satisfecho con los valores.
- Inhabilite el rastreo de memoria caché de EJB. Con la memoria caché
correctamente ajustada, puede eliminar el rastreo, eliminar los archivos de registros cronológicos anteriores y reiniciar el servidor.
Qué hacer a continuación
En el análisis, se puede establecer la memoria caché de EJB de forma óptima desde una perspectiva de contenedor de EJB, pero quizá no de forma óptima desde una perspectiva de WebSphere Application Server. Un tamaño de memoria caché mayor proporciona más
coincidencias y mejor rendimiento de memoria caché de EJB, pero utiliza más memoria. La memoria utilizada
por la memoria caché no está disponible para otras áreas del producto, que potencialmente provocan que
se vea afectado el rendimiento global. En un sistema con una amplia memoria, esto no sería un problema
y si se ajusta correctamente la memoria caché de EJB podría aumentar el rendimiento global. No obstante, debe tener en cuenta este rendimiento del sistema frente al rendimiento
de la memoria caché de EJB al configurar la memoria caché.