Archivos de etiquetas: memoria

Avisos de Alfresco sobre saturación de la Cache (EHCache / Hibernate)

En algunas ocasiones, como migraciones, reindexaciones completas, etc. pueden salir determinados avisos como el siguiente:

… WARN [org.alfresco.repo.cache.TransactionalCache.org.alfresco.storeAndNodeIdTransactionalCache] Transactional update cache ‘org.alfresco.storeAndNodeIdTransactionalCache’ is full (10000).

Este tipo de avisos se refiere a que se ha llenado la memoria de intercambio o caché de segundo nivel (también llamada L2 Cache).

** SOLUCIÓN **

La solución pasa por agrandar el tamaño de esta tocando los parámetros del fichero cache-context.xml

Unos valores más acorde con situaciones de instalaciones en producción podrían ser los siguientes:

[…]
  
     
        
     
     
        
     
     
         org.alfresco.userToAuthorityTransactionalCache
     
     
         10000
     
  
[…]
  
     
        
     
     
        
     
     
     
         org.alfresco.personTransactionalCache
     
     
         25000
     
  
[…]
  
     
        
     
     
        
     
     
         org.alfresco.storeAndNodeIdTransactionalCache
     
     
         100000
     
  

[…]

Cada uno de estos valores hay que adaptarlo al número de elementos que tengamos, como son asignaciones de autorizaciones (roles en espacios de trabajo), usuarios y ficheros o documentos.

** CONSIDERACIONES **

Esto juega negativamente sobre el recolector de basura (GC) de la máquina Java (JVM) ya que tardará más en intentar recoger los objetos obsoletos.

Para esto podemos usar dos soluciones alternativas y parciales pero que impactarán sobre nuestra instalación, una es desactivar directamente la caché.

Para desconectar la caché de segundo nivel (L2 cache) podemos poner el siguiente valor en alfresco-global.properties:

hibernate.cache.use_second_level_cache=false

La otra forma de intentar resolver el tiempo de ralentización será hacer que se guarden los valores de la cache de forma más continuada. Para ello podemos reajustar los valores de los beans sessionSizeResourceInterceptor y sessionSizeResourceManager en el fichero hibernate-context.xml como sigue:

[…]
  
     
        
           
        
     
     
         10000
     
     
         100
     
  
  
     
        
     
     
         100
     
     
         100
     
     
         0
     
  
[…]

Esta última opción solo es recomendable para usarla durante una actualización, una reindexación completa, y cualquier operación que conlleve mucha carga de memoria de intercambio o cache. Una vez finalizada la operación, deberían restaurarse los valores originales.

No hay que olvidarse de hacer copia de estos ficheros para poder restaurarlos posteriormente a los valores originales.

Es recomendable además que se copien los ficheros ehcache-context.xml y hibernate-context.xml del directorio de despliegue al de configuración (extension) como custom-ehcache-context.xml y custom-hibernate-context.xml. De esta forma se pueden dejar los ficheros originales.

Más información y otras fuentes:

http://wiki.alfresco.com/wiki/Repository_Cache_Configuration
http://issues.alfresco.com/jira/browse/ETHREEOH-3294

La siguiente web es muy recomendable, tiene una serie de artículos sobre migraciones en los que se trata este tema.

http://alfrescoshare.wordpress.com/category/alfresco-dm/

Revisiones:

17/08/2011: En el caso de cluster, al usar ehcache-custom.xml en /extension, hay que modificar los valores ahí, no hace falta copiar el fichero ehcache.xml