Optimisation de Zope

Cette partie détaille différentes optimisations qui peuvent être appliquées à ZOPE+CPS.

Avertissement

On manipule directement Zope, il est préferrable d'effectuer une sauvegarde avant de commencer.

Références. 

Script de démarrage

La première chose à faire si ce n'est pas déjà fait est de désactiver le mode DEBUG. Pour cela éditer le script de démarrage start et supprimer le paramètre -D de la dernière ligne :

exec /home/sgeorget/local/bin/python $cwd/z2.py -P xxxx -D "$@"
                        

L'interpreteur python dispose d'une option permettant d'activiter une optimisation basique. Pour cela il faut l'appeler avec le paramètre -O

exec /home/sgeorget/local/bin/python -O $cwd/z2.py -P xxxx "$@"
                        

La dernière modification à apporter au script de démarrage porte sur le paramètre -i du script z2.py :

-i n Set the interpreter check interval. This integer value determines how often the interpreter checks for periodic things such as thread switches and signal handlers. The Zope default is 500, but you may want to experiment with other values that may increase performance in your particular environment.

La dernière ligne du script start devient donc :

exec /home/sgeorget/local/bin/python $cwd/z2.py -P xxxx -i 750 "$@"
                        

Note

La valeur a été reprise de la documentation disponible sur http://plone.org et ne semble pas poser de problème sur un PIV cadencé à 2,4Ghz.

ZODB

Toujours sur le site http://plone.org, il est conseillé d'augmenter la taille du cache lié à la ZODB. Ce cache contient les objets utilisés fréquemments par le serveur. Sur une machine disposant de suffisamment de mémoire, on peut augmenter la taille de ce cache afin d'augmenter les performances.

  • Dans le Control Panel de la ZMI, accéder à la partie Database Management

  • L'onglet Activity permet de voir le nombre de chargements et d'enregistrements d'objets dans la ZODB.

  • L'onglet Cache Parameters permet d'ajuster la taille du cache de manière à limiter les chargements d'objets à partir de la ZODB, il faut cependant faire attention à la quantité de mémoire (RAM) disponible.

HTTP Cache Manager

Par défaut ZOPE considère que tout ce qu'il renvoie est dynamique, par conséquent aucun header précisant la date d'expiration n'est renvoyé avec les objets. Selon le navigateur utilisé pour consulter le site cela peut provoquer le téléchargement des parties communes (css, images, javascripts, ...) plusieurs fois (pour chaque page affichée).

L'objet httpCacheManager permet d'associer une date d'expiration à certains objets. Le navigateur (ou le proxy) ne rechargera que les objets dont la date d'expiration est passée. Cela facilite donc la consultation du site car les pages sont moins longues à chargées (certains éléments restant dans le cache du navigateur, et cela libère des ressources pour le traitement des pages dynamiques au niveau de ZOPE.

  • A la racine du site ajouter un objet de type httpCacheManager (l'id et le titre n'ont pas d'importance).

  • Dans l'onglet Properties, préciser l'interval qui va servir à calculer la date d'expériation associée aux objets renvoyés.

  • L'onglet Associate permet de sélectionner les objets auxquels seront associées les informations d'expiration.

  • Sélectionner tous les objets statiques (ou pseudo-statiques), tels que les css, les javascripts ou les images.

  • Dans l'onglet Statistics il est possible de consulter tous les objets qui ont été demandés (une fois qu'ils ont été associés au cache).

Il est possible de créer plusieur HTTP Cache Manager si on veut spécifier différents intervalles de temps de rafraichissement des objets.

RAM Cache Manager

Cette objet permet de garder en mémoire le résultat de l'interprétation des objets (zpt ou scripts). C'est particulièrement intéressant pour des objets dynamiques qui ne dépenpent que de peu de paramètres extérieurs, c'est le cas de beaucoups de parties publiques (calendrier, menus de navigation, ...).

Warning

Il faut utiliser ce cache avec précaution car il peut facilement perturber la consultation du site, voire révéler certaines informations confidentielles. Avant de mettre un objet en cache, il faut donc réfléchir aux paramètres extérieurs dont il dépent.

  • A la racine du site, ajouter un objet de type RAM Cache Manager

  • L'onglet Properties de cet objet permet de spécifier les paramètres du cache, dont :

    • Le nombre d'objets stockés

    • La durée de vie des objets

    • La période de nettoyage complet du cache

  • Comme pour le HTTP Cache Manager, l'association aux différents objets s'opère via l'onglet Associate.

  • L'onglet Statistics est intéressant car il permet de visualiser les HITS (objets renvoyés par le cache) et les MISS (objets absents du cache donc réexécutées).

    A posteriori on peut donc vérifier l'utilité d'un mettre un objet en cache, en règle général le nombre de HITS doit être largement supérieur au nombre de MISS.