29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Dossiers techniques / eZ Publish : améliorer l'environnement et les performances





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish : améliorer l'environnement et les performances

Date de publication: le lundi 6 août 2007 à 17h41
Dernière modification: par Pascal BOYER le mardi 19 avril 2011 à 23h55

11 July 2006 12:36:46

Here are some of the conclusions/notes about improving the eZ publish deployment environment. 
Vous trouverez ci-dessous quelques notes ou conclusions sur la mise en oeuvre d'un environnement optimisé pour eZ Publish.

1. Apache

1.1. Version

According to Bertrand Dunogier's article "eZ publish: Performance Best Practices" ( http://ez.no/community/articles/ez_publish_performance_best_practices ), Apache 1.x should be used. If 2.x version has to be used, it should be run under pre-fork mode, which prevents Apache 2 from using threads.
En accord avec l'article de Bertrand Dunogier, eZ publish: Comment obtenir de meilleures performances , c'est la version 1.3.x du serveur Apache qui doit être installée. Néanmoins, si vous devez tout de même installer une version 2.x assurez-vous de faire fonctionner votre serveur Apache en mode prefork afin qu'il n'utilise pas les threads (processus légers).

:
Installer un serveur Apache 2 pour le faire fonctionner en mode prefork n'a pas vraiment de sens puisque cela revient, d'une part à le faire fonctionner dans le mode "natif" d'Apache 1.3.x, c'est à dire dans le mode prefork, et d'autre part, à ne pas l'utiliser ce pour quoi il a été fait: fonctionner en mode Threads. Enfin, sachez que la robustesse d'Apache 1.3.x n'est plus à démontrer et que PHP peut poser des problèmes lorsqu'on le marie (en tant que module) à un serveur Apache 2 tournant en mode Threads.

Intel ICC compiled Apache should be used (Bård Farstad: eZ publish Performance.pdf). Apache/PHP/APC compiled with the ICC compiler shows eZ publish template processing is faster from 17.4% to 19.6%. Total script runtime measured with ab ranged from 6.3% to 12.7% faster. ( Bård Farstad: http://papelipe.no/tags/ez_publis...ntel_compiled_icc_apache_php_and_apc ) 
Il est préférable de mettre en oeuvre un serveur web Apache compilé avec le compilateur Intel ICC. D'ailleurs, si Apache, PHP et APC  (Alternative PHP Cache) sont tous trois compilés avec le compilateur d'Intel alors le traitement des templates de eZ Publish montrera un gain de vitesse  compris entre 17.4% et 19.6%. La mesure, avec ab , du temps total d'exécution d'un script montre des gains de vitesse s'échelonnant entre 6.3% à 12.7% (Voir le site de Bård Farstad ).

1.2. configuration 

Correct configuration of the following parameters is extremly important for good performance.
Il est extrêmement important de bien configurer les paramètres suivants pour obtenir de bonnes performances.

  • MaxClients
    This parameter sets the limit of total number of worker processes - it defines how many simultaneous requests can be supported. The more processes apache is allowed to run, the more simultaneous requests it can serve. As you increase that number, you increase the amount of RAM that Apache will take. So, the optimal value depends on the resorces of the server (RAM).
    Ce paramètre définit le nombre maximum de processus serveur ce qui revient à définir le nombre maximum de requêtes simultanées pouvant être supportées. Plus Apache peut exécuter de processus, plus le nombre de requêtes simultanées pouvant être servies est grand. En augmentant cette valeur, vous augmentez la quantité de RAM dont aura besoin le serveur Apache. La valeur optimale dépend donc des ressources en RAM du serveur.

:
Si vous souhaitez spécifier pour MaxClients une valeur supérieure à 256 alors vous devez recompiler Apache.

MaxClients can be calculated by the following formula: 
La valeur de MaxClients peut être calculée avec la formule suivante:

MaxClients = (TotalRam - MSRPC) / (MaxProcessSize - MSRPC)

TotalRam - estimated total RAM available to the Apache  MSRPC - Minimal Shared RAM per Child
...où TotalRam est une estimation de la quantité totale de RAM disponible pour le serveur Apache et MSRPC la quantité minimum de RAM pour un processus fils.

Check http://modperlbook.org/html/ch11_01.html for more explanations and examples.
Voici un lien pour plus d'explications illustrées d'exemples: modperlbook.org

If MaxClients is set too high, this will cause the server to start swapping and become unresponsive. 
Si le paramètre MaxClients est affecté d'une valeur trop grande cela risque de faire swapper le serveur Apache et de le rendre alors injoignable (c'est à dire que le serveur pourrait ne plus répondre aux requêtes entrantes).

If MaxClients is set to low, connections will be unnecessarily queued (and maybe some of them will time-out), while server resources are left unused.
Si le paramètre MaxClients est affecté d'une valeur trop faible alors les connexions seront intempestivement mises en attente (et certaines d'entre elles seront peut-être coupées) alors que les ressources du serveurs ne seront pas pleinement utilisées.

Any connection attempts over the MaxClients limit will normally be queued, up to a number based on the ListenBacklog directive ( http://www.apacheref.com/ref/http_core/ListenBacklog.html )
Au-delà de la limite imposée par la valeur de MaxClients, et dans la limite de la valeur de la directive ListenBacklog , toute requête sera mise en attente.

  • KeepAlive
    Turn On KeepAlive. It allows multiple requests to be sent over the same TCP connection so it reduces the overhead of frequent connects.
    Positionnez la directive KeepAlive à On afin de permettre que plusieurs requêtes soient envoyées sur la même connexion TCP réduisant ainsi le risque qu'un client consomme trop de ressources serveur.
  • KeepAliveTimeout
    If server oftenly hits the MaxClients limit, KeepAliveTimeout should be reduced (default is 15 seconds, try with 2-6 seconds). This will allow Apache to terminate the connection soon enough and to be able to handle other queued connections. If there are a lot more clients than available apache children, KeepAlive On will decrease performance and should be turned off.
    Si le serveur atteint trop souvent la limite imposée par MaxClients alors la valeur de KeepAliveTimeout doit être abaissée (la valeur par défaut étant 15 secondes, essayez une valeur comprise entre 2 et 6 secondes). Cela permettra à Apache de terminer une connexion suffisamment tôt pour être en mesure de traiter les autres connexions en attente. S'il y a beaucoup plus de clients (donc de requêtes) que de processus fils Apache disponibles alors la directive KeepAlive positionnée à On sera responsable d'une chute de performances du serveur et devra donc être positionnée à Off.
  • MinSpareServers   (default 5)
    It takes time to start the apache process which is ready to serve incoming requests. So if server load varies, this should be set to higher value to assure quicker response in that situations.
    La directive MinSpareServers, dont la valeur par défaut 5 indique le nombre minimum de processus fils en attente, démarre les processus serveur Apache qui serviront les requêtes entrantes. Si, dans certaines situations, la charge du serveur varie, alors la valeur de ce paramètre devra être augmentée pour assurer des réponses plus rapides dans ces situations.
  • MaxSpareServers   (default 10)
    Keeping it low allows OS to use RAM for other tasks. Could be kept higher if it's a dedicated machine.
    Garder une valeur faible pour la directive MaxSpareServers (dont la valeur par défaut 10 indique le nombre maximum de processus fils en attente) permet au système d'exploitation d'avoir de la ressource mémoire pour d'autres tâches. Sur un serveur dédié, cette valeur peut être augmentée.

:
Activer les directives MinSpareServers et MaxSpareServers ne devrait concerner que les sites à très fort traffic. Trop augmenter les valeurs de ces deux directives est toujours une mauvaise idée.

  • StartServers  (default 5)
    If it is set to high, it will assure that if you get a high load just after the server has been restarted, the fresh servers will be ready to serve requests immediately (http://modperlbook.org/html/ch11_03.html ). 
    Si la valeur de la directive StartServers est grande alors cela assure, qu'en cas de charge importante juste après le redémarrage du serveur, le serveur puisse servir immédiatement les requêtes.
  • MaxRequestsPerChild  
    Sets the limit on the number of requests that an individual child process can handle during its lifetime. Setting to non-zero value solves memory-leakage problems, by forcing the apache to restart child process ( http://modperlbook.org/html/ch11_02.html ).
    La directive MaxRequestsPerChild définit le nombre maximum de requêtes que peut traiter un processus fils durant sa vie. Donner à cette directive une valeur non nulle permet de résoudre les problèmes de fuite de mémoire en forçant Apache à redémarrer le processus fils.

I am not sure what's the best practice here regarding eZ publish. Please advise.
A propos de cette directive, comme je ne suis pas certain de la meilleure valeur à prendre dans le cas de eZ Publish, veuillez me conseiller.

  • MaxKeepAliveRequests  
    How many total requests a client can issue across a single connection. Please advise is there any need to change the default value (100).
    La directive MaxKeepAliveRequests, qui nécessite que la directive KeepAlive soit activée, définit le nombre maximum de requêtes par connexion qu'un client peut envoyer. Veuiller me conseiller si la valeur 100 par défaut doit être changée.

Some methods how to determine correct values of above options can be found at http://www.apacheweek.com/features/mod_perl14
Des méthodes pour déterminer les bonnes valeurs des directives ci-dessus peuvent être trouvées sur cette page .

1.3. Modules 

Only required modules should be loaded. This reduces memory footprint. For instance, if Perl or CGI isn't used, get rid of it. 
Seuls les modules requis doivent être chargés. Cela réduit l'empreinte mémoire. Par exmple, si Perl ou CGI ne sont pas utilisés alors il n'est pas nécessaire de charger leur module.

2. PHP 

2.1. Version

eZ publish requires PHP 4.3.x for the 3.6 branch, PHP 4.4.x for the 3.7+ branch Use Intel ICC compiled binary. Statically compiled PHP module is faster than a DSO module for about 10% ( http://ez.no/community/blog/php_as_dso_or_as_static_php_module ) Compile with --disable-memory-limit to gain some more speed (Derick Rethans on ez forum)
eZ Publish nécessite une version PHP 4.3.x pour sa branche 3.6 et une version PHP 4.4.x pour les branches 3.7 ou supérieures.
Utilisez des binaires compilés avec le compilateur Intel ICC .
PHP compilé en tant que module statique est 10% plus rapide qu'en tant que module dynamique (DSO: Dynamic Shared Object) d'Apache (Voir cet article )
Compiler PHP avec l'option --disable-memory-limit accroît la vitesse du serveur Apache (Voir ce post  de Derick Rethans).

2.2. PHP extensions / Extensions PHP 

Required PHP extensions for eZ publish: 
Extensions PHP nécessaires au fonctionnement de eZ Publish:

  • session
  • mysql or pgsql
  • gd2 or the ImageMagick program / gd2 ou bien installer le programme externe ImageMagick (pour la manipulation des images)

Optional PHP extensions: 
Extensions PHP optionnelles:

  • gd2 with FreeType support / gd2 avec le support des polices FreeType (pour la manipulation des images)
  • zlib / Lecture et écriture des fichier compressés (.gz)
  • mbstring
  • exif / lecture des méta données des photos prises avec les appareils photos numériques
  • domxml (this will speed up performance in some cases) 
    Cette extension, qui opère sur les documents XML avec l'API DOM, augmentera dans certains cas les performences de eZ Publish.

2.3. Configuration

Required:
Voici les valeurs des directives PHP nécessaires à eZ Publish et que vous devez configurer dans le fichier php.ini:

  • max_execution_time  
    Should be set to at least at least 30 (300 recomended) 
    Cette directive doit être positionnée au moins à "30" secondes ("300" étant la valeur recommadée pour eZ Publish).
  • memory_limit  
    Should be set high enough (more than 64 MB is recommended) (Bertrand Dunogier). I have expirienced very large memory consumption when using ezodcsm (I had to set memory_limit to 384 MB) 
    Cette directive doit être aussi grande que possible et en tout cas supérieure ou égale à "64M". J'ai pu constaté une consommation très importante de mémoire en utilisant l'extension ezodcsm et j'ai dû positionner memory_limit à "384M"
  • safe_mod  
    Safe mode should always be disabled (safe_mode Off) 
    Cette directive devrait toujours être désactivée et donc valoir "0" (zéro).
  • open_basedir   "" 
    Cette directive doit être laissée vide ""
  • file_uploads   On 
    Cette directive doit être positionnée à "1"
  • AcceptPathInfo   On 
    (only for Apache 2) 
    Cette directive, qui ne s'applique qu'à Apache 2.x, doit être positionnée à On

Optional:
Les deux directives ci-dessous sont optionnelles:

  • register_globals   Off 
    Cette directive doit être positionnée à "0" (zéro)
  • magic_quotes_gpc   Off 
    Cette directive doit être positionnée à "0" (zéro)

(Please notify if something is missing) 
(Veuillez m'avertir s'il manque certains éléments)

3. MySQL

Intel ICC compiled binary are allready availble for download (Linux Intel C/C++ compiled section) http://dev.mysql.com/downloads/mysql/4.1.html http://dev.mysql.com/downloads/mysql/5.0.html 
Some issues with stability have been reported with the Intel CC compiled version. Comparison between GCC compiled vs. Intel ICC compiled MySQL when inserting objects into eZ publish ( Bård Farstad: http://papelipe.no/tags/ez_publis...ter_running_on_intel_optimized_mysql )
In order to use UTF-8 use MySQL 4.1 or later, previous versions only support the ISO character set.
Au paragraphe " Linux (non RPM, Intel C/C++ compiled, glibc-2.3) downloads" des deux lien donnés ci-après, vous trouverez des binaires de MySQL compilés avec le compilateur Intel ICC disponibles en téléchargement pour les versions 4.1  et 5.0  de MySQL. Certaines questions portant sur la stabilité des versions compilées avec Intel ICC ont été rapportées. Un test comparatif entre une version de MySQL compilée avec GCC et une version compilée avec Intel ICC a été réalisé par Bård Farstad et publié sur son site .
Si vous souhaitez utiliser le jeux de caratères UTF-8 alors vous devez installer une version 4.1 ou ultérieure de MySQL puisque les versions antérieures ne supportent que les jeux de caractères ISO.

3.1. Tuning / Réglages

(Bård Farstad: eZ publish Performance.pdf)
Tiré du document (introuvable !) " eZ Publish Performance.pdf" réalisé par Bård Farstad, je vous renvoie vers sa série d'articles sur l' optimisation de MySQL pour eZ Publish .

  • Re-compile with optimization / Re-compilation avec optimisation
  • Optimize settings / Optimisation des paramètres
  • Key buffer / (???)
  • Table cache / Table de cache
  • Sort buffer / (???)
  • Query cache / Cache pour les requêtes (???)
  • Max connect ions (???)
  • No flush at commit (???)
  • InnoDB buffer pool size (???)
  • InnoDB additional mem size / Taille mémoire supplémentaire pour InnoDB
  • Log buffer size (???)

(TODO: explanation)
(A FAIRE: expliquer les points ci-dessus)

   

4. Opcode cache (eAccelerator / APC configuration)

Cette section est consacrée à la configuration des accélérateurs de code PHP que sont eAccelerator  et APC  (Alternative PHP Cache).

4.1. eAcceleator

I suppose that eAccelerator can also be compiled with the ICC compiler, but didn't try it (i am using the 0.9.4 binary release).
Je suppose que eAccelerator peut également être compilé avec le compilateur Intel ICC bien que je n'ai jamais essayé (j'utilise la version binaire 0.9.4).

   

4.2. eAccelerator configuration / Configuration de eAccelerator

Adjust eAccelerator options (which are configured through php.ini). This is how I'm currently using it (please notify if you have any configuration advices here):
Les options de eAccelerator doivent être placées à la fin du fichier de configuration php.ini puis correctement configurées. Voici les valeurs que j'utilise actuellement. N'hésitez pas à me faire des remarques ou à me conseiller sur ces valeurs.

eaccelerator.shm_size="128"
eaccelerator.cache_dir="/home/eaccelerator"
eaccelerator.enable="1" 
eaccelerator.optimizer="1" 
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="1200"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

4.3. APC

Compile APC with the ICC compiler. I didn't use APC. Please notify if you have better results or better control with APC (or any other pros/cons).
Compilez APC avec le compilateur Intel ICC. N'utilisant pas APC, pouvez-vous me dire si vous obtenez de meilleurs résultats ou un meilleur contrôle avec APC (ou me donner tout autre avis positif/négatif).

4.4. Zend Optimizer 

Although eAccelerator works with Zend Optimizer, it won't give any extra performace. So, Zend Optimizer should be loaded ONLY if you have to run encoded PHP scripts. Some performance comparisons between Zend Optimizer and eAccelerator can be found on http://blog.robinz.info/archives/...optimizer-and-eaccelerator-together/
Bien que eAccelerator puisse fonctionner avec Zen Optimizer , il ne produit aucun gain de performance. Par conséquent, Zend Optimizer ne doit être chargé QUE si vous devez exécuter des scripts PHP codés. Des tests de performance ont été réalisées entre Zend Optimizer et eAccelerator et peuvent être consultés sur ce site . Ils montrent que l'utilisation de eAccelerator conjointement à Zend Optimizer est bien moins performante que l'utilisation exclusive de eAccelerator.

5. Squid Cache / Utiliser le cache Squid  

(from the Bård Farstad: eZ publish Performance.pdf) 
Tiré du document (introuvable !) " eZ Publish Performance.pdf" réalisé par Bård Farstad.

  • Cache CSS, JavaScript , images and files
    Mettre en cache les feuilles CSS, les scripts javascripts, les images et les fichiers.
  • Cache complete XHTML pages
    Mettre entièrement en cache des pages XHTML.

(didn't use it yet, but planning to)
Je n'utilise pas encore Squid mais c'est prévu.

6. HDD/filesystem tuning / Réglages du disque dur et du système de fichier

6.1. noatime option / L'option noatime

(Bård Farstad: eZ publish Performance.pdf). Effect of using noatime is explained here: http://www.faqs.org/docs/securing/chap6sec73.html
Tiré du document (introuvable !) " eZ Publish Performance.pdf" réalisé par Bård Farstad, les effets de l'utilisation de l'option noatime est explicitée sur cette page wiki .

6.2. hdparm 

Default Linux installs are also notorious for setting hard disk default settings which are tuned for compatibility and not for speed. Use the command hdparm to tune your Linux hard disk settings. ( http://phplens.com/lens/php-book/optimizing-debugging-php.php ) So girls & guys, share your information :)
Les distributions GNU/Linux sont connues pour le paramètrage par défaut des disques durs optimisé pour la compatibilité et non pour les performances. Vous pouvez utiliser la commande hdparm  pour optimiser vos disques durs.

Resources (except allready mentioned) / Ressources (exceptées celles déjà mentionnées)

http://httpd.apache.org/docs/1.3/misc/perf-tuning.html

http://www.howtoforge.com/configuring_apache_for_maximum_performance

http://virtualthreads.blogspot.com/2006/01/tuning-apache-part-1.html

http://emergent.urbanpug.com/?p=60

http://www.perlcode.org/tutorials/apache/tuning.html

http://linuxgazette.net/123/vishnu.html

http://blog.coomanskristof.be/2006/07/07/ezpublish_requirements/

http://ez.no/content/download/134...ile/ez2006_ezpublish_performance.pdf

Commentaires

  • @ JIM PROFIT

    Il eut été largement plus constructif de proposer les bonnes traductions afin que j'apporte les modifs et que tout le monde en profite.
    Mais sûrement étais-tu trop occuper à dénigrer mon travail et cette évidence ne t'aura point frappé l'esprit ;-)

    Traduction

    Je suis tombé là dessus, et c'est vraiment n'imprte quoi ces "traductions". Vraiment n'importe quoi.


    Key buffer / Clef de buffer
    ...
    Sort buffer / Tri du buffer

    eZ Publish Performance .pdf

    Le document ez Publish Performance est toujours téléchargeable sur le site d'eZ Publish (en bas de page) :
    http://ez.no/company/ez_conference_awards/ez_publish_conference_2006/presentations_at_ez_conference_2006