Nous avons Jahia 4.1.0, sur une machine Red Hat 3 bi-xeon avec 2 Go de RAM, 
avec une machine virtuelle JRockit 1.4.1. La taille de la Heap est réglée à 
1024MB. Nous utilisons la console JRockit pour surveiller l'état de la VM. Le 
serveur est arrêté chaque nuit, le temps de faire un backup de la base et du 
système de fichiers de Jahia.

Pour de nombreuses raison techniques et fonctionnelles, nous avons divisé notre 
site web en un nombre important de sites virtuels (environ 150 actuellement). 
Le nombre total de pages sur le serveur est de l'ordre de 10'000.

Régulièrement et de plus en plus fréquemment (car le nombre de pages publiées 
augmente !), nous avons des situations où le garbage collector de la machine 
virtuelle n'arrive plus à libérer suffisament de mémoire. La proportion du CPU 
utilisée par ce dernier monte alors jusqu'à 80-80% ( !) et les performances 
chutent désastreusement, les temps de réponse explosent et des erreurs 
apparaissent sur certaines pages (mais pas toujours des OutOfMemoryException). 
Ce problème devient critique car sa fréquence augmente de plus en plus.

Il semble que ces plantages soient liés à des visites de spiders de moteurs de 
recherche type Google ou autre, qui contrairement au trafic moyen ne se 
concentrent pas sur certaines pages mais explorent l'entièreté des pages du 
site (des sites virtuels), forçant le calcul et la mise en cache de toutes les 
pages, et remplissant le cache, qui ne semble pas être doté de purge 
automatique. Le graphe de l'utilisation de la heap de Java est à ce sujet très 
symptomatique : la mémoire se remplit et se vide au fur et à mesure des 
passages du GC, mais la quantité libérée diminue petit à petit et 
régulièrement. Au démarrage de Jahia elle se monte à environ 50% du total de la 
heap, et diminue jusqu'à presque rien.

Ce problème est-il connu, et bien du à la gestion du (des) cache(s) de Jahia ? 
Est-il résolu dans une version ultérieure (Jahia 5) ? Quelles autres solutions 
sont conseillées ?

Comme une migration à la version 5n'est de toute façons pas envisagée dans 
l'immédiat, j'envisage à court terme de passer à un serveur 64 bits, ainsi 
qu'un OS (Red hat 4) et une machine virtuelle (Jrockit 1.5) 64 bits afin 
d'éviter la limitation d'allocation de mémoire des systèmes 32 bits, et de 
pouvoir allouer une heap de plusieurs GB. A moyen et long terme une solution en 
cluster s'imposera probablement.

Comment puis-je dimensionner la taille de mémoire suffisante pour mettre toutes 
les pages en cache ? Existe-t-il une estimation de la mémoire consommée en 
cache par 1 page ?

Tout conseil est bienvenu !

Désolé pour le post un peu indigeste ;) j'ai essayé de concentrer au maximum 
les données du problème.

Cordialement,

Pierre Henry
Ingénieur de développement
----------------------------------------------------------------------------
Université de Neuchâtel
Faculté des sciences
SITEL

Répondre à