Attention : vous consultez actuellement la documentation dédiée aux versions 1.x de Moodle. La documentation pour les versions 2.x de Moodle est consultable ici : Performance, celle pour les versions 3.x de Moodle est consultable ici : Performance et celle pour Moodle 4.x est consultable là : Performance.

« Performance » : différence entre les versions

De MoodleDocs
Aller à :navigation, rechercher
m (Une mise à jour serait nécessaire, notamment pour des valeurs adaptées à Moodle 1.9 et 2.x)
 
(25 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Mettre à jour}}
{{En cours de traduction}}
{{En cours de traduction}}


Ligne 18 : Ligne 19 :
Les grands sites hébergent généralement le serveur web et la base de données sur des serveurs différents. Cela n'est généralement pas nécessaire pour des installations de taille moyenne.
Les grands sites hébergent généralement le serveur web et la base de données sur des serveurs différents. Cela n'est généralement pas nécessaire pour des installations de taille moyenne.


Il est possible de répartir une installation de Moodle sur plusieurs machines (''load balancing''), par exemple en utilisant plusieurs serveurs web. Ces différents serveurs doivent alors interroger la même base de données et utiliser le même stockage de fichiers (moodledata). En dehors de ceci, la séparation des couches de l'application est suffisamment complète pour rendre faisable ce type de partage de ressources. De façon analogue, la base de données peut être une grappe de serveurs (par exemple un ''cluster'' MySQL), mais cela n'est pas une tâche facile. Il est relativement simple de faire tourner des serveurs web en grappe, par exemple avec LVM ou d'autres solutions. La seule solution pas trop complexe pour un serveur de bases de données en grappe est [http://www.mysql.com/products/database/cluster/ MySQL Cluster], et elle comporte quelques problèmes. Pour une telle implémentation, il est conseillé de s'adresser à un expert en assistance, par exemple un ''Moodle Partner''.
Il est possible de répartir une installation de Moodle sur plusieurs machines (''load balancing''), par exemple en utilisant plusieurs serveurs web. Ces différents serveurs doivent alors interroger la même base de données et utiliser le même stockage de fichiers (moodledata). En dehors de ceci, la séparation des couches de l'application est suffisamment complète pour rendre faisable ce type de partage de ressources. De façon analogue, la base de données peut être une grappe de serveurs (par exemple un ''cluster'' MySQL), mais cela n'est pas une tâche facile. Il est relativement simple de faire tourner des serveurs web en grappe, par exemple avec LVS ou d'autres solutions. La seule solution pas trop complexe pour un serveur de bases de données en grappe est [http://www.mysql.com/products/database/cluster/ MySQL Cluster], et elle comporte quelques problèmes. Pour une telle implémentation, il est conseillé de s'adresser à un expert en assistance, par exemple un ''Moodle Partner''.


'''Voir aussi''' les discussions suivantes (en anglais) :
'''Voir aussi''' les discussions suivantes (en anglais) :
Ligne 28 : Ligne 29 :
== Configuration matérielle ==
== Configuration matérielle ==


'''Note''' : Le moyen le plus simple, rapide et efficace pour augmenter les performances est '''d'augmenter la mémoire vive (RAM) de votre serveur web'''. Installez autant de RAM que possible (par exemple 4 Go). Accroître la mémoire vive permettra de réduire l'usage du fichier d'échange sur le disque et permettra à votre serveur de gérer plus de clients simultanément.
'''Note''' : Le moyen le plus simple, rapide et efficace pour augmenter les performances est '''d'augmenter la mémoire vive (RAM) de votre serveur web'''. Installez autant de RAM que possible. Accroître la mémoire vive permettra de réduire l'usage du fichier d'échange sur le disque et permettra à votre serveur de gérer plus de clients simultanément.
* Une meilleure performance peut être atteinte en ayant la meilleure '''puissance processeur''' possible, c'est-à-dire plusieurs processeurs ou des processeurs multi-coeurs. Un EFI actuel ou un BIOS récent permettra l'''hyperthreading''. Vérifiez toutefois que ceci fasse une réelle différence quant à la performance d'ensemble des processeurs. Des outils permettant de mesurer cette performance seront utiles pour cela ([http://en.wikipedia.org/wiki/Super_PI Super PI], par exemple).
* Une meilleure performance peut être atteinte en ayant la meilleure '''puissance processeur''' possible, c'est-à-dire plusieurs processeurs ou des processeurs multi-cœurs. Un EFI actuel ou un BIOS récent permettra l'''hyperthreading''. Vérifiez toutefois que ceci fasse une réelle différence quant à la performance d'ensemble des processeurs. Des outils permettant de mesurer cette performance seront utiles pour cela ([http://en.wikipedia.org/wiki/Super_PI Super PI], par exemple).
* Si vous pouvez vous le permettre, utilisez des '''disques durs SCSI''' au lieu de disques SATA. Les disques SATA augmenteront l'utilisation du processeur de votre système, alors que les disques SCSI ont leurs propres contrôleurs intégrés et se débrouillent lorsque vous disposez de plusieurs disques. Si vous devez utiliser des disques SATA, vérifiez que votre carte mère et les disques eux-mêmes supportent NCQ (Native Command Queuing).
* Si vous pouvez vous le permettre, utilisez des '''disques durs SCSI''' au lieu de disques SATA. Les disques SATA augmenteront l'utilisation du processeur de votre système, alors que les disques SCSI ont leurs propres contrôleurs intégrés et se débrouillent lorsque vous disposez de plusieurs disques. Si vous devez utiliser des disques SATA, vérifiez que votre carte mère et les disques eux-mêmes supportent NCQ (Native Command Queuing).
* Achetez des disques durs ayant un '''bas temps de recherche''' (''low seek time''). Une telle option améliorera la vitesse de tout votre système, notamment l'accès aux rapports et statistiques de votre Moodle.
* Achetez des disques durs ayant un '''bas temps de recherche''' (''low seek time''). Une telle option améliorera la vitesse de tout votre système, notamment l'accès aux rapports et statistiques de votre Moodle.
Ligne 42 : Ligne 43 :


== Système d'exploitation ==
== Système d'exploitation ==
* Vous pouvez utiliser [http://fr.wikipedia.org/wiki/Linux Linux](recommandé), un système Unix, Windows ou Mac OS X comme '''système d'exploitation''' pour le serveur. Les systèmes d'exploitation *nix nécessitent généralement moins de mémoire que les serveurs Mac OS X ou Windows pour faire les mêmes tâches, car le serveur n'a pas forcément une interface graphique. De plus, Linux n'a pas de coût de licence. Toutefois, si vous avez l'habitude d'un autre système d'exploitation, la courbe d'apprentissage peut être notablement raide. Si vous disposez d'un grand nombre de processeurs supportant [http://fr.wikipedia.org/wiki/Symmetric_multiprocessing SMP], vous pouvez essayer d'utiliser un système d'exploitation particulièrement configuré pour cela, par exemple [http://fr.wikipedia.org/wiki/Solaris_%28syst%C3%A8me_d%27exploitation%29 Solaris].
* Vous pouvez utiliser [http://fr.wikipedia.org/wiki/Linux Linux] (recommandé), un système Unix, Windows ou Mac OS X comme '''système d'exploitation''' pour le serveur. Les systèmes d'exploitation *nix nécessitent généralement moins de mémoire que les serveurs Mac OS X ou Windows pour faire les mêmes tâches, car le serveur n'a pas forcément une interface graphique. De plus, Linux n'a pas de coût de licence. Toutefois, si vous avez l'habitude d'un autre système d'exploitation, la courbe d'apprentissage peut être notablement raide. Si vous disposez d'un grand nombre de processeurs supportant [http://fr.wikipedia.org/wiki/Symmetric_multiprocessing SMP], vous pouvez essayer d'utiliser un système d'exploitation particulièrement configuré pour cela, par exemple [http://fr.wikipedia.org/wiki/Solaris_%28syst%C3%A8me_d%27exploitation%29 Solaris].
* Vérifiez votre propre système d'exploitation et les '''instructions du fournisseur''' pour les étapes d'optimisation :
* Vérifiez votre propre système d'exploitation et les '''instructions du fournisseur''' pour les étapes d'optimisation :
** pour Linux, consultez le site [http://linuxperf.sourceforge.net/ Linux Performance Team].
** pour Linux, consultez le site [http://linuxperf.sourceforge.net/ Linux Performance Team].
Ligne 53 : Ligne 54 :


=== Performances de PHP===
=== Performances de PHP===
* Vous êtes fortement encouragé à utiliser un '''accélérateur PHP''' pour baisser la charge CPU, comme [http://pecl.php.net/apc APC] (recommandé), [http://www.php-accelerator.co.uk/ PHPA], [http://trac.lighttpd.net/xcache/ Xcache] ou [http://eaccelerator.net/ eAccelerator]. (Prenez garde à choisir un accélérateur PHP qui fonctionne correctement avec votre version de PHP et notez que Turck MMCache n'[http://turckmmcache.exeprod.com/TheManifestoEnglish est plus maintenu] et peut provoquer des erreurs avec PHP 5). Placez les pages du cache PHP sur un [[:en:TMPFS|système de fichiers virtuel]].
* Vous êtes fortement encouragé à utiliser un '''accélérateur PHP''' pour baisser la charge CPU, comme [http://pecl.php.net/apc APC] (recommandé), [http://www.php-accelerator.co.uk/ PHPA], [http://trac.lighttpd.net/xcache/ Xcache] ou [http://eaccelerator.net/ eAccelerator]. (Prenez garde à choisir un accélérateur PHP qui fonctionne correctement avec votre version de PHP et notez que Turck MMCache n'est plus maintenu et peut provoquer des erreurs avec PHP 5). Placez les pages du cache PHP sur un [[:en:TMPFS|système de fichiers virtuel]].
* Les performances de PHP sont meilleures s'il est installé comme un '''module Apache ou IIS''', plutôt que comme CGI.
* Les performances de PHP sont meilleures s'il est installé comme un '''module Apache ou IIS''', plutôt que comme CGI.
* Vérifiez également le paramètre '''memory_limit''' dans php.ini. Réduisez-le à 16Mo pour les versions de Moodle jusqu'à 1.6 ([http://moodle.org/mod/forum/discuss.php?d=39656 voir cette discussion]). À partir de Moodle 1.7, il est recommandé de fixer le paramètre 'memory_limit' à 40Mo.
* Vérifiez également le paramètre '''memory_limit''' dans php.ini. Réduisez-le à 16Mo pour les versions de Moodle jusqu'à 1.6 ([http://moodle.org/mod/forum/discuss.php?d=39656 voir cette discussion]). À partir de Moodle 1.7, il est recommandé de fixer le paramètre ''memory_limit'' à 40Mo. Cette valeur devra être augmentée dans les versions plus récentes de Moodle.


=== Performances d'Apache ===
=== Performances d'Apache ===
* Considérez le fait de réduire le '''nombre de modules''' qu'Apache charge dans le fichier httpd.conf au minimum nécessaire pour réduire la mémoire nécessaire.
* Considérez le fait de réduire le '''nombre de modules''' qu'Apache charge dans le fichier httpd.conf au minimum nécessaire pour réduire la mémoire nécessaire.
* Définissez la directive '''MaxClients''' correctement. Use this formula to help (which uses 80% of available memory to leave room for spare):
* Définissez correctement la directive '''MaxClients'''. Utilisez cette formule pour vous aider (elle utilise 80% de la mémoire disponible pour conserver une réserve) :
  MaxClients = Total available memory * 80% / Max memory usage of apache process
  MaxClients = Total de la mémoire disponible * 80% / Utilisation maximale de la mémoire par les processus Apache
:Memory usage of apache process is usually 10MB, so a general rule of thumb is to divide your available memory in megabytes by 10 to get the value of MaxClients. To find the max memory usage of apache processes read the value from the shell command:
:L'utilisation de la mémoire de Apache est habituellement 10 Mo. Pour trouver une valeur acceptable de MaxClients, il suffit donc de diviser par 10 la mémoire disponible de votre serveur (en Mo). Pour être plus précis, trouvez la valeur exacte du maximum de la mémoire utilisée par Apache en lançant la commande suivante dans le shell :
  #ps -ylC httpd --sort:rss
  ps -ylC httpd --sort:rss
:'''Warning''': Do not be tempted to set the value of MaxClients higher than your available memory as your server will consume more RAM than available and start to swap to disk.  
:Si vous devez augmenter la valeur de '''MaxClients''' au delà de 256, vous devrez également définir la directive '''ServerLimit'''.
* Use the '''latest version of Apache''' - Apache 2 has an improved memory model which reduces memory usage further.
:'''Attention''' ! Ne soyez pas tenté de fixer MaxClients à une valeur supérieure à la mémoire réellement disponible sur votre serveur, car dans ce cas la machine commencera à utiliser la mémoire virtuelle sur le disque et cela réduira considérablement les performances.  
* For Unix/Linux systems, consider lowering '''MaxRequestsPerChild''' in httpd.conf to as low as 20-30 (if you set it any lower the overhead of forking begins to outweigh the benefits).  
* Utilisez la '''dernière version d'Apache''' : Apache 2 dispose d'un modèle de mémoire amélioré qui réduit encore plus l'utilisation de la mémoire.
* For a heavily loaded server, consider setting '''KeepAlive Off''' (do this only if your Moodle pages do not contain links to resources or uploaded images) or lowering the '''KeepAliveTimeout''' to between 2 and 5. The default is 15 (seconds) - the higher the value the more server processes will be kept waiting for possibly idle connections. A more accurate value for KeepAliveTimeout is obtained by observing how long it takes your users to download a page. After altering any of the KeepAlive variables, monitor your CPU utilization as there may be an additional overhead in initiating more worker processes/threads.
* Pour les systèmes Unix, Linux ou Mac OS X, essayez de diminuer la valeur du paramètre '''MaxRequestsPerChild''' (dans httpd.conf) à 20-30. Si vous descendez plus bas, la charge processeur pour créer de nouveaux processus annulera les gains de performance éventuels.  
* As an alternative to using KeepAlive Off, consider setting-up a '''Reverse Proxy server''' infront of the Moodle server to cache HTML files with images. You can then return Apache to using keep-alives on the Moodle server.
* Sur un serveur très chargé, essayez le réglage '''KeepAlive Off''' (ne le faites que si vos pages Moodle ne contiennent pas de liens vers des ressources ou des images téléchargées) ou alors diminuez la valeur de '''KeepAliveTimeout''' à une valeur entre 2 et 5. La valeur par défaut est 15 (secondes). Plus cette valeur est élevée, plus de processus serveur seront maintenus en attente de connexions. Une valeur plus précise de KeepAliveTimeout est obtenue en observant le temps nécessaire à vos utilisateurs pour télécharger une page. Après avoir modifié l'un des paramètres KeepAlive, contrôlez l'utilisation de votre CPU, car il pourrait y avoir une surcharge lors de l'initiation de plus de processus de travail.
* If you do not use a .htaccess file, set the '''AllowOverride''' variable to AllowOverride None to prevent .htaccess lookups.
* Comme alternative à KeepAlive Off, vous pouvez mettre en place un '''serveur proxy inverse (Reverse Proxy)''' entre votre serveur Moodle et vos clients pour mettre en cache les fichiers HTML avec des images. Il est alors possible de réactiver KeepAlive sur Apache.
* Set '''DirectoryIndex''' correctly so as to avoid content-negotiation. Here's an example from a production server:
* Si vous n'utilisez pas de fichier '.htaccess', définissez le paramètre '''AllowOverride''' comme AllowOverride None pour éviter qu'Apache ne cherche vainement des fichiers .htaccess.
* Définissez correctement le paramètre '''DirectoryIndex''' afin d'éviter la négociation de contenu. Voici un exemple tiré d'un serveur en production :
  DirectoryIndex index.php index.html index.htm
  DirectoryIndex index.php index.html index.htm
* Unless you are doing development work on the server, set '''ExtendedStatus Off''' and disable mod_info as well as mod_status.
* À moins que vous n'effectuiez du développement sur votre serveur, définissez '''ExtendedStatus Off''' et désactivez mod_info ainsi que mod_status.
* Leave '''HostnamesLookups Off''' (as default) to reduce DNS latency.
* Laissez le réglage par défaut du paramètre '''HostnamesLookups Off''' pour diminuer les délais dus au DNS.
* Consider reducing the value of '''TimeOut''' to between 30 to 60 (seconds).  
* Essayez de réduire la valeur de '''TimeOut''' entre 30 et 60 (secondes).  
* For the '''Options directive''', avoid Options Multiviews as this performs a directory scan. To reduce disk I/O further use
* Dans la directive '''Options''', évitez Options Multiviews, qui lit le contenu des dossiers. Pour réduire encore plus les accès au disque, utilisez
  Options -Indexes FollowSymLinks
  Options -Indexes FollowSymLinks
*'''Caching''' - Apache can be told to make pages load a lot faster by specifying that the browser should cache some various page elements such as images and reuse them from local memory rather than ask for them again every time a page is requested. How to do this varies slightly between OSes but there are two basic steps:
* '''Cache''' : ''Attention, ceci peut générer de gros soucis lors de mises à jour''. On peut demander à Apache de charger les pages beaucoup plus rapidement en indiquant que le navigateur doit mettre en cache divers éléments de page, comme les images, et les réutiliser en les tirant de la mémoire locale plutôt que les demander chaque fois que la page est demandée. La procédure pour effectuer ceci diffère suivant les systèmes d'exploitation, mais en voici deux étapes :


# Install and enable mod_expires - refer to documentation or man pages
# Installer et activez mod_expires - voyez la documentation ou les pages man
# Add this code to the virtual server config file within the <directory> section for the root directory (or within the .htaccess file if AllowOverrides is On):
# Ajoutez ce code à la configuration du serveur virtuel, à l'intérieur de la section <directory> du dossier racine (ou dans le fichier .htaccess, si AllowOverrides est activé) :
  <IfModule mod_expires.c>
  <IfModule mod_expires.c>
  ExpiresActive On
  ExpiresActive On
Ligne 93 : Ligne 95 :
  </IfModule>
  </IfModule>


The effect is to make everything stay in the cache except HTML and XML, which change dynamically. It's possible to gain a several hundred percent decrease in load times this way. Adjust the cache times according to how often your images etc change.
:L'effet produit est que tout reste en cache, sauf les fichiers HTML et XML, qui changent dynamiquement. On peut de cette façon gagner plusieurs ordres de grandeurs de temps de chargement. Ajustez la durée de mise en cache d'après la fréquence de changement de vos images, etc.
 
Plus d'informations : [http://www.metaskills.net/blog/heuristics/sysadmin/how-to-control-browser-caching-with-apache-2 www.metaskills.net]
* Alternatively, you can increase web server performance by using the '''light-weight webserver''' [http://www.lighttpd.org/ lighttpd] in combination with PHP in fastCGI-mode instead of Apache. Lighttpd has a lower memory consumption than Apache. One single apache process requires more RAM than the whole lighttpd with all of its fastCGI-processes together. Note that Lighttpd is relatively difficult to configure and administration takes a more time.


:Plus d'informations à ce sujet : [http://www.metaskills.net/blog/heuristics/sysadmin/how-to-control-browser-caching-with-apache-2 www.metaskills.net]
* Autrement, vous pouvez augmenter la performance de votre serveur web en utilisant au lieu d'Apache le '''serveur web poids-plume (light-weight webserver)''' [http://www.lighttpd.net/ lighttpd] en combinaison avec PHP en mode fastCGI. Lighttpd consomme moins de mémoire qu'Apache. Un seul processus Apache nécessite plus de RAM que la totalité de lighttpd avec tous ses processus fastCGI. Il est à remarquer que Lighttpd est relativement difficile à configurer et que son administration prend plus de temps.


=== Performances de IIS ===
=== Performances de IIS ===
All alter this location in the registry :
Les paramètres à modifier sont situés à cet endroit de la base de registre :


   HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
   HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\


* L'équivalent de KeepAliveTimeout est '''ListenBackLog''' (IIS - registry location is HKLM\ SYSTEM\ CurrentControlSet\ Services\ Inetinfo\ Parameters). Set this to between 2 to 5.
* L'équivalent de KeepAliveTimeout est '''ListenBackLog'''. Définissez sa valeur à entre 2 et 5.
*Change the '''MemCacheSize''' value to adjust the amount of memory (Mb) that IIS will use for its file cache (50% of available memory by default).
* Modifiez la valeur de '''MemCacheSize''' pour ajuster la taille de la mémoire en Mo que IIS utilisera pour son cache de fichiers (50% de la mémoire disponible par défaut).
*Change the '''MaxCachedFileSize''' to adjust the maximum size of a file cached in the file cache in bytes. Default is 262,144 (256K).
* Modifiez la valeur de '''MaxCachedFileSize''' pour ajuster la taille maximale en octets des fichiers placés en cache. La valeur par défaut est 262'144 (256 Ko).
*Create a new DWORD called '''ObjectCacheTTL''' to change the length of time (in milliseconds) that objects in the cache are held in memory. Default is 30,000 milliseconds (30 seconds).
* Créez une nouvelle entrée DWORD dénommée '''ObjectCacheTTL''' pour modifier le temps (en millisecondes) durant lequel les objets en cache sont conservés dans la mémoire. La valeur par défaut est de 30'000 millisecondes (30 secondes).


== Performances de Base de données ==
== Performances de la base de données ==


Moodle contient un script qui affiche des informations clés sur les statistiques de performance à partir de [http://phplens.com/lens/adodb/docs-perf.htm ADOdb performance monitor]. Lancez ce script dans votre navigateur comme ceci :
'''Important''' ! Avant toute modification ou intervention sur votre base de données, faites-en impérativement une sauvegarde ! Après, ce sera trop tard !
 
Moodle est livré avec un script basé sur [http://phplens.com/lens/adodb/docs-perf.htm ADOdb performance monitor] qui permet d'afficher des informations clefs sur les performances de la base de données. Lancez ce script dans votre navigateur de la façon suivante :


  <nowiki>http://www.monmoodle.com/admin/dbperformance.php</nowiki>
  <nowiki>http://www.monmoodle.com/admin/dbperformance.php</nowiki>
Ligne 119 : Ligne 122 :
=== Performances de MySQL ===
=== Performances de MySQL ===


Voici quelques paramètres spécifiques à MySQL qui peuvent être ajustés dans votre fichier my.cnf (my.ini pour Windows), afin d'apporter de meilleurs performances. Pour voir les valeurs actuelles, utilisez ces commandes :
Voici quelques paramètres spécifiques à MySQL qui peuvent être ajustés dans votre fichier my.cnf (my.ini pour Windows), qui contient les différents paramètres et leurs valeurs, afin d'améliorer les performances. Pour afficher les valeurs actuelles, utilisez ces commandes :


   SHOW STATUS;
   SHOW STATUS;
   SHOW VARIABLES;
   SHOW VARIABLES;


'''Important''' : vous devez faire des sauvegardes de votre base de données avant de modifier  la configuration de votre serveur MySQL. Après chaque changement du fichier my.cnf, redémarrez mysqld.
'''Important''' ! Avant toute modification de la configuration de votre serveur MySQL faites-en impérativement une sauvegarde ! Après, ce sera trop tard ! Après chaque modification du fichier my.cnf, redémarrez mysqld.
* Autorisez le '''cache de requête''' avec query_cache_type = 1. For most Moodle installs, set the query_cache_size to 36M and query_cache_min_res_unit to 2K. The query cache will improve performance if you are doing few updates on the database.
 
* Définissez '''table cache''' correctement. For Moodle 1.6 set table_cache = 256 (min), and for Moodle 1.7 set table_cache = 512 (min). The table cache is used by all threads (connections), so monitor the value of opened_tables to further adjust - if opened_tables > 3 * table_cache then increase table_cache upto your OS limit. Note also that the figure for table_cache will also change depending on the number of modules and plugins you have installed. Find the number for your server by executing the mysql statement below. Look at the number of rows printed and set table_cache to this value.
* Autorisez le '''cache de requête''' avec :
 
  query_cache_type = 1
 
Pour la plupart des installations de Moodle, définissez les valeurs suivantes :
 
  query_cache_size = 36M
  query_cache_min_res_unit = 2K
 
Le cache de requête améliorera la performance si vous n'effectuez que quelques modifications de la base de données.
* Définissez '''table cache''' correctement. Pour Moodle 1.6 :
 
  table_cache = 256
 
et dès Moodle 1.7 :
 
  table_cache = 512


  mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
Ces valeurs sont des minimums. Le cache des tables est utilisé par toutes les connexions. Il est donc important de contrôler la valeur du paramètre opened_tables et d'ajuster table_cache en conséquence. Si opened_tables > 3 * table_cache, augmentez alors table_cache au maximum permis sur votre système d'exploitation. Remarquez que la valeur adéquate de table_cache sera différente suivant le nombre de modules et plugins que vous avez installés. Pour trouver la bonne valeur pour votre serveur, lancez la commande mysql ci-dessous. Comptez le nombre de rangées affichées et définissez table_cache à cette valeur.


* Définissez '''thread cache''' correctement. Adjust the value so that your thread cache utilization is as close to 100% as possible by this formula:
  mysql> SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourmoodledbname';


  thread cache utilization (%) = (threads_created / connections) * 100
* Définissez correctement la valeur de '''thread cache'''. Ajustez sa valeur de sorte que l'utilisation de ce cache soit aussi proche de 100% que possible en utilisant cette formule :


* The '''key buffer''' can improve the access speed to Moodle's SELECT queries. The correct size depends on the size of the index files (.myi) and in Moodle 1.6 or later (without any additional modules and plugins), the recommendation for this value is key_buffer_size = 32M. Ideally you want the database to be reading once from the disk for every 100 requests so monitor that the value is suitable for your install by adjusting the value of key_buffer_size so that the following formulas are true:
  utilisation de thread cache (%) = (threads_created / connexions) * 100
 
* Le tampon '''key buffer''' peut augmenter la vitesse d'accès des requêtes SELECT de Moodle. Sa taille correcte dépends de la taille des fichiers d'index (.myi). Pour Moodle 1.6 et les versions ultérieures (sans modules ni plugins additionnels), il est recommandé de fixer cette variable ainsi : key_buffer_size = 32M. Idéalement, la base de données devrait être lue sur le disque une fois pour 100 requêtes. Contrôlez donc que la valeur est adéquate pour votre installation en ajustant la valeur de key_buffer_size de façon à ce que les formules suivantes soient respectées :


   key_read / key_read_requests < 0.01
   key_read / key_read_requests < 0.01
   key_write / key_write_requests <= 1.0
   key_write / key_write_requests <= 1.0


* Définissez le '''nombre maximum de connexions''' afin que vos utilisateurs ne voient pas un message "Too many connections". Attention, cela peut avoir un impact sur la mémoire totale utilisée. MySQL connections usually last for milliseconds, so it is unusual even for a heavily loaded server for this value to be over 200.
* Définissez le '''nombre maximum de connexions''' afin que vos utilisateurs ne voient pas de message "Too many connections". Attention, cela peut avoir un impact sur la mémoire totale utilisée. Les connexions MySQL durent habituellement quelques millisecondes. Il est donc inhabituel, même pour un serveur fortement chargé, que cette valeur dépasse 200.
* Manage '''high burst activity'''. If your Moodle install uses a lot of quizzes and you are experiencing performance problems (check by monitoring the value of threads_connected - it should not be rising) consider increasing the value of back_log.
* Gérer les ''' poussées de haute activité'''. Si votre installation de Moodle utilise un grand nombre de tests et que vous souffrez de problèmes de performance (contrôlez la valeur du paramètre threads_connected, qui ne devrait pas augmenter), essayez d'élever la valeur du paramètre back_log.
* '''Optimisez vos tables chaque semaine et après une mise à jour de Moodle'''. It is good practice to also optimize your tables after performing a large data deletion exercise, e.g. at the end of your semester or academic year. This will ensure that index files are up to date. Backup your database first and then use:
* '''Optimisez vos tables chaque semaine et après chaque mise à jour de Moodle'''. C'est une bonne discipline d'optimiser vos tables également après la suppression de grandes quantité de données, par exemple à la fin d'un semestre ou d'une année académique. Une telle pratique vous permettra de vous assurer que les fichiers d'index sont à jour. Faites avant tout une copie de sauvegarde de votre base de données et utilisez ensuite :
 
  mysql>CHECK TABLE mdl_tablename;
  mysql>OPTIMIZE TABLE mdl_tablename;


:Les tables principales à vérifier dans Moodle sont mdl_course_sections, mdl_forum_posts, mdl_log et mdl_sessions (si vous utilisez dbsessions). Les erreurs doivent être corrigées avec REPAIR TABLE (voir le [http://dev.mysql.com/doc/refman/5.0/en/repair-table.html manuel MySQL] et ce [http://moodle.org/mod/forum/discuss.php?d=58208#p279638 script dans le forum]).
  mysql> CHECK TABLE mdl_tablename;
* '''Maintenez la distribution principale'''. Chaque mois, par exemple, il serait utile d'arrêter le serveur mysql et lancer ces commandes myisamchk :
  mysql> OPTIMIZE TABLE mdl_tablename;


  #myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
:Les tables principales à vérifier dans Moodle sont mdl_course_sections, mdl_forum_posts, mdl_log et mdl_sessions (si vous conservez les sessions en base de données, avec le paramètre dbsessions). Les erreurs doivent être corrigées avec REPAIR TABLE (voir le [http://dev.mysql.com/doc/refman/5.0/fr/repair-table.html manuel MySQL] et ce [http://moodle.org/mod/forum/discuss.php?d=58208#p279638 script dans le forum]).
* '''Entretenez les index principaux''' de la base de données. Chaque mois, par exemple, il serait utile d'arrêter le serveur mysql et lancer ces commandes myisamchk, qui optimisent l'utilisation des index :


:'''Attention''' : Vous devez arrêter le processus de base de données mysql (mysqld) avant de lancer les commandes myisamchk. Sinon, vous risquez de perdre des données.
  myisamchk -a -S /pathtomysql/data/moodledir/*.MYI


* Réduisez le nombre de '''tables temporaires sauvées sur le disque'''. Vérifiez cela avec la valeur created_tmp_disk_tables. If this is relatively large (>5%) increase tmp_table_size until you see a reduction. Notez que cela aura un impact sur la RAM utilisée.
:'''Attention''' ! Vous devez arrêter le processus de base de données mysql (mysqld) avant de lancer les commandes myisamchk. Sinon, vous risquez de perdre des données.
* Les tables de Moodle sont au format MyISAM, donc '''désactivez InnoDB''' car il n'y aura pas de gain de performance. Si vous devez utiliser InnoDB, vous devrez convertir toutes vos tables Moodle. Pour cela, lancez le script innodb suivant :


<nowiki>http://www.monmoodle.com/admin/innodb.php</nowiki>
* Réduisez le nombre de '''tables temporaires sauvées sur le disque'''. Vérifiez cela avec la valeur created_tmp_disk_tables. Si ce paramètre est trop grand (plus de 5%), augmentez le paramètre tmp_table_size jusqu'à obtenir une diminution. Notez que cela aura un impact sur la RAM utilisée.


=== Autres liens de performance de bases de données ===
=== Autres liens de performance de bases de données ===
* Consider using a '''distributed cacheing system''' like [http://en.wikipedia.org/wiki/Memcached memcached] but note that memcached does not have any security features so it should be used behind a firewall.
* [http://dev.mysql.com/doc/refman/5.0/fr/server-parameters.html Conseil généraux sur le réglage fin des paramètres MySQL] (tirés du manuel MySQL).
* Considérer le fait d'utiliser PostgresSQL. Voir [[:en:Arguments in favour of PostgreSQL|arguments en faveur de PostgreSQL]] (en anglais) et la discussion sur les forums [http://moodle.org/mod/forum/discuss.php?d=49195 how to migrate from MySQL to PostgreSQL].
* Si vous avez un accès en ligne de commande *nix, vous pouvez utiliser le script [http://day32.com/MySQL/ MySQL Performance Tuning Primer Script] qui permet facilement de consulter vos valeurs actuelles, et voir si elles sont en adéquation avec l'utilisation de votre plateforme.
* [[:en:Increasing the database connection lifetime | Try increasing the database connection lifetime]]
* [[:en:Increasing the database connection lifetime | Essayez d'augmenter la durée d'une connexion à la base de données]].
* [http://dev.mysql.com/doc/refman/5.0/fr/server-parameters.html General advice on tuning MySQL parameters] (advice from the MySQL manual)
* Il peut être utile d'utiliser un '''système de cache distribué''' comme [http://en.wikipedia.org/wiki/Memcached memcached]. Notez que memcached n'a aucune sécurité et qu'il doit donc être utilisé derrière un pare-feu.
* Vous pouvez essayer d'utiliser PostgresSQL. Voir [[:en:Arguments in favour of PostgreSQL|arguments en faveur de PostgreSQL]] (en anglais) et la discussion sur les forums [http://moodle.org/mod/forum/discuss.php?d=49195 how to migrate from MySQL to PostgreSQL].


== Paramètres d'administration de Moodle ==
== Paramètres d'administration de Moodle ==
* Depuis Moodle 1.7, définissez le '''Type de cache''' pour votre serveur: ''Administration du site -> Serveur -> Performance -> Type de cache''. Plusieurs options différentes sont possibles :
* Depuis Moodle 1.7, définissez le '''Type de cache''' pour votre serveur: ''Administration du site -> Serveur -> Performance -> Type de cache''. Plusieurs options différentes sont possibles :
:*If you do not have eaccelerator or mmemcached installed, choose "internal" (which makes use of the record/internal cache - see the next bullet point).
:* Si vous n'avez installé ni eaccelerator ni memcached, choisissez "internal", qui permettra à Moodle d'utiliser le Cache des enregistrements (voir point ci-dessous).
:* If you have a single server and have compiled '''eaccelerator with shared memory support''', set the cache type to the eaccelerator option.
:* Si vous avez un unique serveur et que votre eaccelerator a été compilé avec '''shared memory support''', choisissez l'option eaccelerator.
:* If you have a '''separate memcached server''', set the cache type to memcached and enter a csv list of server IP addresses.
:* Si vous avez un '''serveur memcached''' distinct, choisissez l'option memcached et tapez dans le champ ''Serveurs memcached'' une liste des adresses IP des serveurs memcached, séparées par des virgules.
* Enable the '''record/internal cache''': Site Admin -> Server -> Performance -> Record cache = True. Set the maximum amount of memory allocated to the cache in the Int Cache Max box. This will enable a primary cache for database records, without using any database engine cache, e.g. MySQL/PostgreSQL cache. See [http://tracker.moodle.org/browse/MDL-7196 this Tracker entry] for a full discussion.
* Activez le '''cache des enregistrements''' : Administration -> Serveur -> Performance -> Cache des enregistrements = Oui. Indiquez le montant maximum de mémoire  à allouer au cache dans le champ ''Int. cache max''. De cette manière, vous activerez le cache primaire des enregistrements de la base de données, sans utiliser de cache de base de données. Voir [http://tracker.moodle.org/browse/MDL-7196 ce descriptif de bogue] pour une discussion complète (en anglais).
* Activez le '''cache de langue'''.
* Activez le '''cache de langue'''.
* Large log files can cause overall performance to degrade over time. If you observe that the site has gradually got slower loading pages in the browser, '''reduce your Log life time''' setting (Admin/Configuration/Variables/Maintenance).
* Large log files can cause overall performance to degrade over time. If you observe that the site has gradually got slower loading pages in the browser, '''reduce your Log life time''' setting (Admin/Configuration/Variables/Maintenance).
Ligne 186 : Ligne 205 :
Voici quelques remarques sur les performances de certains modules :
Voici quelques remarques sur les performances de certains modules :


* Le module '''Chat''' est [http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 réputé] pour être très consommateur de requêtes HTTP fréquentes vers le serveur principal. On peut réduire le nombre de ces requêtes en choisissant la méthode des ''flux'' (option ''chat_normal_updatemode'') ou , si vous utilisez un serveur web à base Unix ou Mac OS X, en utilisant le chat en mode ''démon''.
* Le module '''Chat''' est [http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 réputé] pour être très consommateur de requêtes HTTP fréquentes vers le serveur principal. On peut réduire le nombre de ces requêtes en choisissant la méthode des ''flux'' (option ''chat_normal_updatemode'') ou, si vous utilisez un serveur web à base Unix ou Mac OS X, en utilisant le chat en mode ''démon''.
* L'activité '''Test''' est réputée pour plomber les performances de la base de données. Essayez d'optimiser votre serveur de base de données. Voyez par exemple [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 pour un bref rapport de performance] avec 55 étudiants effectuant un test simultanément.
* L'activité '''Test''' est réputée pour plomber les performances de la base de données. Essayez d'optimiser votre serveur de base de données. Voyez par exemple [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 un bref rapport de performance] avec 55 étudiants effectuant un test simultanément.
* Le '''cron''' de  Moodle  est lancé par le script ''cron.php''. Si celui-ci est lancé par une requête HTTP (par exemple en utilisant ''wget'' ou ''curl''), il peut mobiliser une grande quantité de mémoire sur de grosses installations. Pour améliorer de façon importante l'efficacité, il est conseillé de l'appeler directement en utilisant la commande ''php'', par exemple
* Le '''[[Cron|cron]]''' de  Moodle  est lancé par le script ''cron.php''. Si celui-ci est lancé par une requête HTTP (par exemple en utilisant ''wget'' ou ''curl''), il peut mobiliser une grande quantité de mémoire sur de grosses installations. Pour améliorer de façon importante l'efficacité, il est conseillé de l'appeler directement en utilisant la commande ''php'', par exemple


     php -f /path/to/moodle/directory/admin/cron.php
     php -f /path/to/moodle/directory/admin/cron.php
Ligne 195 : Ligne 214 :


* Le forum [http://moodle.org/mod/forum/view.php?f=94 Servers and Performance] (en anglais) sur Using Moodle
* Le forum [http://moodle.org/mod/forum/view.php?f=94 Servers and Performance] (en anglais) sur Using Moodle
* La discussion [http://moodle.org/mod/forum/discuss.php?d=57028 Performance perspectives - a little script] (en anglais) sur Using Moodle
* Les discussions suivantes (en anglais) sur Using Moodle :
:*[http://moodle.org/mod/forum/discuss.php?d=57028 Performance perspectives - a little script]
:*[http://moodle.org/mod/forum/discuss.php?d=83057 Performance woes!]
:*[http://moodle.org/mod/forum/discuss.php?d=111847 Une configuration pour 10 000 connexions siimultanées]


[[Category:Administrateur]]
[[Category:Administrateur]]

Dernière version du 14 octobre 2011 à 07:58

Cet article a besoin d'une mise à jour. Veuillez SVP le mettre à jour et retirer cette notice une fois la mise à jour effectuée. Si le bloc "Autres langues" (voir pied de page), comprend un lien "English", vous pouvez vous inspirer du contenu anglais.



Remarque : la traduction de cet article n'est pas terminée. N'hésitez pas à traduire tout ou partie de cette page ou à la compléter. Vous pouvez aussi utiliser la page de discussion pour vos recommandations et suggestions d'améliorations.


Moodle peut être configuré de sorte de fournir de très bonnes performances, que ce soit pour de petits usages, ou pour une utilisation avec plusieurs dizaines de milliers d'utilisateurs. Les facteurs impliqués dans les performances d'exécution sont fondamentalement les mêmes que pour n'importe quel système basé sur PHP et une base de données.

Lorsque vous essaierez d'optimiser votre installation, focalisez-vous avant tout sur les éléments qui feront le plus de différence pour l'utilisateur final. Par exemple, si les habitudes d'utilisation de vos utilisateurs chargent plus le serveur web que la base de données, veillez d'abord à améliorer la performance du serveur web.

Obtenir une mesure de référence

Avant de tenter la moindre optimisation, vous devriez obtenir une mesure de référence de base des composants que vous essayez d'améliorer. Pour Linux, essayez LBS et pour Windows, utilisez le Performance Monitor. Lorsque vous aurez des données quantitatives sur les performances actuelles de votre système, vous pourrez déterminer si les changements que vous aurez apportés ont eu un réel impact.

Le but général des ajustements pour accélérer l'exécution est d'employer la mémoire vive (RAM) via des caches pour réduire l'activité des disques. Il est particulièrement important d'essayer d'éliminer autant que possible l'utilisation de dossiers d'échange (swap). Si votre système commence à swapper, c'est un signe que vous avez besoin de plus de RAM.

L'ordre d'optimisation préférentiel est généralement : stockage principal (plus de RAM), le stockage secondaire (disques durs plus rapides/meilleure configuration des disques durs), processeur (plus, et plus rapides).

Montée en charge

La conception de Moodle (avec la séparation claire des couches de l'application) permet une grande montée en charge (jetez un oeil à la liste des grosses installations de Moodle).

Les grands sites hébergent généralement le serveur web et la base de données sur des serveurs différents. Cela n'est généralement pas nécessaire pour des installations de taille moyenne.

Il est possible de répartir une installation de Moodle sur plusieurs machines (load balancing), par exemple en utilisant plusieurs serveurs web. Ces différents serveurs doivent alors interroger la même base de données et utiliser le même stockage de fichiers (moodledata). En dehors de ceci, la séparation des couches de l'application est suffisamment complète pour rendre faisable ce type de partage de ressources. De façon analogue, la base de données peut être une grappe de serveurs (par exemple un cluster MySQL), mais cela n'est pas une tâche facile. Il est relativement simple de faire tourner des serveurs web en grappe, par exemple avec LVS ou d'autres solutions. La seule solution pas trop complexe pour un serveur de bases de données en grappe est MySQL Cluster, et elle comporte quelques problèmes. Pour une telle implémentation, il est conseillé de s'adresser à un expert en assistance, par exemple un Moodle Partner.

Voir aussi les discussions suivantes (en anglais) :

Configuration matérielle

Note : Le moyen le plus simple, rapide et efficace pour augmenter les performances est d'augmenter la mémoire vive (RAM) de votre serveur web. Installez autant de RAM que possible. Accroître la mémoire vive permettra de réduire l'usage du fichier d'échange sur le disque et permettra à votre serveur de gérer plus de clients simultanément.

  • Une meilleure performance peut être atteinte en ayant la meilleure puissance processeur possible, c'est-à-dire plusieurs processeurs ou des processeurs multi-cœurs. Un EFI actuel ou un BIOS récent permettra l'hyperthreading. Vérifiez toutefois que ceci fasse une réelle différence quant à la performance d'ensemble des processeurs. Des outils permettant de mesurer cette performance seront utiles pour cela (Super PI, par exemple).
  • Si vous pouvez vous le permettre, utilisez des disques durs SCSI au lieu de disques SATA. Les disques SATA augmenteront l'utilisation du processeur de votre système, alors que les disques SCSI ont leurs propres contrôleurs intégrés et se débrouillent lorsque vous disposez de plusieurs disques. Si vous devez utiliser des disques SATA, vérifiez que votre carte mère et les disques eux-mêmes supportent NCQ (Native Command Queuing).
  • Achetez des disques durs ayant un bas temps de recherche (low seek time). Une telle option améliorera la vitesse de tout votre système, notamment l'accès aux rapports et statistiques de votre Moodle.
  • Dimensionnez votre fichier swap correctement. La règle générale est de le définir à 4 x la mémoire vive RAM.
  • Utilisez un système de disques durs RAID. De nombreuses configurations des systèmes RAID sont envisageables. La configuration suivante donne en général les meilleurs résultats :
    • installez un contrôleur RAID matériel ;
    • installez le système d'exploitation et la partition de swap sur un jeu de disques configurés en RAID 1 ;
    • installez Moodle, le serveur web et le serveur de base de données sur un autre jeu de disques configuré en RAID 5.
  • Utilisez des connexions réseau gigabit ethernet pour obtenir un meilleur débit et une latence diminuée. Une telle configuration est particulièrement importante dans le cas où le serveur web et le serveur de base de données sont hébergés sur des machines différentes.
  • Vérifiez les paramètres de votre carte réseau. Vous pourrez obtenir une amélioration de performance en augmentant l'utilisation des tampons ('buffers') et des descripteurs d'émission et de réception (à équilibrer avec les marges du processeur et de la mémoire) et déchargeant le système d'exploitation du calcul des sommes de contrôles TCP, en les faisant calculer par la carte réseau.
  • Étudiez cette étude de cas du test d'un serveur (Moodle 1.7) avec 300 utilisateurs : http://moodle.org/mod/forum/discuss.php?d=68579 et consultez le rapport qui l'accompagne montrant les statistiques du trafic réseau et de la charge du serveur : http://elearning.sgu.ac.jp/doc/PT/

Système d'exploitation

  • Vous pouvez utiliser Linux (recommandé), un système Unix, Windows ou Mac OS X comme système d'exploitation pour le serveur. Les systèmes d'exploitation *nix nécessitent généralement moins de mémoire que les serveurs Mac OS X ou Windows pour faire les mêmes tâches, car le serveur n'a pas forcément une interface graphique. De plus, Linux n'a pas de coût de licence. Toutefois, si vous avez l'habitude d'un autre système d'exploitation, la courbe d'apprentissage peut être notablement raide. Si vous disposez d'un grand nombre de processeurs supportant SMP, vous pouvez essayer d'utiliser un système d'exploitation particulièrement configuré pour cela, par exemple Solaris.
  • Vérifiez votre propre système d'exploitation et les instructions du fournisseur pour les étapes d'optimisation :
    • pour Linux, consultez le site Linux Performance Team.
    • pour Linux, étudiez la commande hdparm. Par exemple, hdparm -m16 -d1 peut être utilisée pour activer la lecture/écriture sur des secteurs multiples et l'accès direct à la mémoire (DMA). Montez les disques avec les options async et noatime ;
    • pour Windows, configurez le serveur pour les applications réseau (Control Panel, Network Connections, LAN connection, Properties, File & Printer Sharing for Microsoft Networks, Properties, Optimization). Vous pouvez aussi chercher sur le site Microsoft TechNet pour des documents sur l'optimisation.
    • pour Mac OS X, les outils CHUD (Computer Hardware Understanding Development) sont particulièrement utiles pour aider à l'optimisation. Voyez également [1] et [2].

Performances du serveur web

L'installation de Firefox et de l'extension FireBug vous permettra de voir le temps nécessaire pour charger chaque composant. L'extension Yslow évaluera votre page par rapport aux 14 règles Yahoo (video) pour des sites web qui se chargent rapidement.

Performances de PHP

  • Vous êtes fortement encouragé à utiliser un accélérateur PHP pour baisser la charge CPU, comme APC (recommandé), PHPA, Xcache ou eAccelerator. (Prenez garde à choisir un accélérateur PHP qui fonctionne correctement avec votre version de PHP et notez que Turck MMCache n'est plus maintenu et peut provoquer des erreurs avec PHP 5). Placez les pages du cache PHP sur un système de fichiers virtuel.
  • Les performances de PHP sont meilleures s'il est installé comme un module Apache ou IIS, plutôt que comme CGI.
  • Vérifiez également le paramètre memory_limit dans php.ini. Réduisez-le à 16Mo pour les versions de Moodle jusqu'à 1.6 (voir cette discussion). À partir de Moodle 1.7, il est recommandé de fixer le paramètre memory_limit à 40Mo. Cette valeur devra être augmentée dans les versions plus récentes de Moodle.

Performances d'Apache

  • Considérez le fait de réduire le nombre de modules qu'Apache charge dans le fichier httpd.conf au minimum nécessaire pour réduire la mémoire nécessaire.
  • Définissez correctement la directive MaxClients. Utilisez cette formule pour vous aider (elle utilise 80% de la mémoire disponible pour conserver une réserve) :
MaxClients = Total de la mémoire disponible * 80% / Utilisation maximale de la mémoire par les processus Apache
L'utilisation de la mémoire de Apache est habituellement 10 Mo. Pour trouver une valeur acceptable de MaxClients, il suffit donc de diviser par 10 la mémoire disponible de votre serveur (en Mo). Pour être plus précis, trouvez la valeur exacte du maximum de la mémoire utilisée par Apache en lançant la commande suivante dans le shell :
ps -ylC httpd --sort:rss
Si vous devez augmenter la valeur de MaxClients au delà de 256, vous devrez également définir la directive ServerLimit.
Attention ! Ne soyez pas tenté de fixer MaxClients à une valeur supérieure à la mémoire réellement disponible sur votre serveur, car dans ce cas la machine commencera à utiliser la mémoire virtuelle sur le disque et cela réduira considérablement les performances.
  • Utilisez la dernière version d'Apache : Apache 2 dispose d'un modèle de mémoire amélioré qui réduit encore plus l'utilisation de la mémoire.
  • Pour les systèmes Unix, Linux ou Mac OS X, essayez de diminuer la valeur du paramètre MaxRequestsPerChild (dans httpd.conf) à 20-30. Si vous descendez plus bas, la charge processeur pour créer de nouveaux processus annulera les gains de performance éventuels.
  • Sur un serveur très chargé, essayez le réglage KeepAlive Off (ne le faites que si vos pages Moodle ne contiennent pas de liens vers des ressources ou des images téléchargées) ou alors diminuez la valeur de KeepAliveTimeout à une valeur entre 2 et 5. La valeur par défaut est 15 (secondes). Plus cette valeur est élevée, plus de processus serveur seront maintenus en attente de connexions. Une valeur plus précise de KeepAliveTimeout est obtenue en observant le temps nécessaire à vos utilisateurs pour télécharger une page. Après avoir modifié l'un des paramètres KeepAlive, contrôlez l'utilisation de votre CPU, car il pourrait y avoir une surcharge lors de l'initiation de plus de processus de travail.
  • Comme alternative à KeepAlive Off, vous pouvez mettre en place un serveur proxy inverse (Reverse Proxy) entre votre serveur Moodle et vos clients pour mettre en cache les fichiers HTML avec des images. Il est alors possible de réactiver KeepAlive sur Apache.
  • Si vous n'utilisez pas de fichier '.htaccess', définissez le paramètre AllowOverride comme AllowOverride None pour éviter qu'Apache ne cherche vainement des fichiers .htaccess.
  • Définissez correctement le paramètre DirectoryIndex afin d'éviter la négociation de contenu. Voici un exemple tiré d'un serveur en production :
DirectoryIndex index.php index.html index.htm
  • À moins que vous n'effectuiez du développement sur votre serveur, définissez ExtendedStatus Off et désactivez mod_info ainsi que mod_status.
  • Laissez le réglage par défaut du paramètre HostnamesLookups Off pour diminuer les délais dus au DNS.
  • Essayez de réduire la valeur de TimeOut entre 30 et 60 (secondes).
  • Dans la directive Options, évitez Options Multiviews, qui lit le contenu des dossiers. Pour réduire encore plus les accès au disque, utilisez
Options -Indexes FollowSymLinks
  • Cache : Attention, ceci peut générer de gros soucis lors de mises à jour. On peut demander à Apache de charger les pages beaucoup plus rapidement en indiquant que le navigateur doit mettre en cache divers éléments de page, comme les images, et les réutiliser en les tirant de la mémoire locale plutôt que les demander chaque fois que la page est demandée. La procédure pour effectuer ceci diffère suivant les systèmes d'exploitation, mais en voici deux étapes :
  1. Installer et activez mod_expires - voyez la documentation ou les pages man
  2. Ajoutez ce code à la configuration du serveur virtuel, à l'intérieur de la section <directory> du dossier racine (ou dans le fichier .htaccess, si AllowOverrides est activé) :
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
ExpiresByType text/xml "access plus 1 seconds"
</IfModule>
L'effet produit est que tout reste en cache, sauf les fichiers HTML et XML, qui changent dynamiquement. On peut de cette façon gagner plusieurs ordres de grandeurs de temps de chargement. Ajustez la durée de mise en cache d'après la fréquence de changement de vos images, etc.
Plus d'informations à ce sujet : www.metaskills.net
  • Autrement, vous pouvez augmenter la performance de votre serveur web en utilisant au lieu d'Apache le serveur web poids-plume (light-weight webserver) lighttpd en combinaison avec PHP en mode fastCGI. Lighttpd consomme moins de mémoire qu'Apache. Un seul processus Apache nécessite plus de RAM que la totalité de lighttpd avec tous ses processus fastCGI. Il est à remarquer que Lighttpd est relativement difficile à configurer et que son administration prend plus de temps.

Performances de IIS

Les paramètres à modifier sont situés à cet endroit de la base de registre :

 HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
  • L'équivalent de KeepAliveTimeout est ListenBackLog. Définissez sa valeur à entre 2 et 5.
  • Modifiez la valeur de MemCacheSize pour ajuster la taille de la mémoire en Mo que IIS utilisera pour son cache de fichiers (50% de la mémoire disponible par défaut).
  • Modifiez la valeur de MaxCachedFileSize pour ajuster la taille maximale en octets des fichiers placés en cache. La valeur par défaut est 262'144 (256 Ko).
  • Créez une nouvelle entrée DWORD dénommée ObjectCacheTTL pour modifier le temps (en millisecondes) durant lequel les objets en cache sont conservés dans la mémoire. La valeur par défaut est de 30'000 millisecondes (30 secondes).

Performances de la base de données

Important ! Avant toute modification ou intervention sur votre base de données, faites-en impérativement une sauvegarde ! Après, ce sera trop tard !

Moodle est livré avec un script basé sur ADOdb performance monitor qui permet d'afficher des informations clefs sur les performances de la base de données. Lancez ce script dans votre navigateur de la façon suivante :

http://www.monmoodle.com/admin/dbperformance.php

Utilisez les informations affichées comme guide pour affiner et améliorer les performances de votre serveur de base de données.

Performances de MySQL

Voici quelques paramètres spécifiques à MySQL qui peuvent être ajustés dans votre fichier my.cnf (my.ini pour Windows), qui contient les différents paramètres et leurs valeurs, afin d'améliorer les performances. Pour afficher les valeurs actuelles, utilisez ces commandes :

 SHOW STATUS;
 SHOW VARIABLES;

Important ! Avant toute modification de la configuration de votre serveur MySQL faites-en impérativement une sauvegarde ! Après, ce sera trop tard ! Après chaque modification du fichier my.cnf, redémarrez mysqld.

  • Autorisez le cache de requête avec :
 query_cache_type = 1

Pour la plupart des installations de Moodle, définissez les valeurs suivantes :

 query_cache_size = 36M
 query_cache_min_res_unit = 2K

Le cache de requête améliorera la performance si vous n'effectuez que quelques modifications de la base de données.

  • Définissez table cache correctement. Pour Moodle 1.6 :
 table_cache = 256

et dès Moodle 1.7 :

 table_cache = 512

Ces valeurs sont des minimums. Le cache des tables est utilisé par toutes les connexions. Il est donc important de contrôler la valeur du paramètre opened_tables et d'ajuster table_cache en conséquence. Si opened_tables > 3 * table_cache, augmentez alors table_cache au maximum permis sur votre système d'exploitation. Remarquez que la valeur adéquate de table_cache sera différente suivant le nombre de modules et plugins que vous avez installés. Pour trouver la bonne valeur pour votre serveur, lancez la commande mysql ci-dessous. Comptez le nombre de rangées affichées et définissez table_cache à cette valeur.

 mysql> SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  • Définissez correctement la valeur de thread cache. Ajustez sa valeur de sorte que l'utilisation de ce cache soit aussi proche de 100% que possible en utilisant cette formule :
 utilisation de thread cache (%) = (threads_created / connexions) * 100
  • Le tampon key buffer peut augmenter la vitesse d'accès des requêtes SELECT de Moodle. Sa taille correcte dépends de la taille des fichiers d'index (.myi). Pour Moodle 1.6 et les versions ultérieures (sans modules ni plugins additionnels), il est recommandé de fixer cette variable ainsi : key_buffer_size = 32M. Idéalement, la base de données devrait être lue sur le disque une fois pour 100 requêtes. Contrôlez donc que la valeur est adéquate pour votre installation en ajustant la valeur de key_buffer_size de façon à ce que les formules suivantes soient respectées :
 key_read / key_read_requests < 0.01
 key_write / key_write_requests <= 1.0
  • Définissez le nombre maximum de connexions afin que vos utilisateurs ne voient pas de message "Too many connections". Attention, cela peut avoir un impact sur la mémoire totale utilisée. Les connexions MySQL durent habituellement quelques millisecondes. Il est donc inhabituel, même pour un serveur fortement chargé, que cette valeur dépasse 200.
  • Gérer les poussées de haute activité. Si votre installation de Moodle utilise un grand nombre de tests et que vous souffrez de problèmes de performance (contrôlez la valeur du paramètre threads_connected, qui ne devrait pas augmenter), essayez d'élever la valeur du paramètre back_log.
  • Optimisez vos tables chaque semaine et après chaque mise à jour de Moodle. C'est une bonne discipline d'optimiser vos tables également après la suppression de grandes quantité de données, par exemple à la fin d'un semestre ou d'une année académique. Une telle pratique vous permettra de vous assurer que les fichiers d'index sont à jour. Faites avant tout une copie de sauvegarde de votre base de données et utilisez ensuite :
 mysql> CHECK TABLE mdl_tablename;
 mysql> OPTIMIZE TABLE mdl_tablename;
Les tables principales à vérifier dans Moodle sont mdl_course_sections, mdl_forum_posts, mdl_log et mdl_sessions (si vous conservez les sessions en base de données, avec le paramètre dbsessions). Les erreurs doivent être corrigées avec REPAIR TABLE (voir le manuel MySQL et ce script dans le forum).
  • Entretenez les index principaux de la base de données. Chaque mois, par exemple, il serait utile d'arrêter le serveur mysql et lancer ces commandes myisamchk, qui optimisent l'utilisation des index :
 myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
Attention ! Vous devez arrêter le processus de base de données mysql (mysqld) avant de lancer les commandes myisamchk. Sinon, vous risquez de perdre des données.
  • Réduisez le nombre de tables temporaires sauvées sur le disque. Vérifiez cela avec la valeur created_tmp_disk_tables. Si ce paramètre est trop grand (plus de 5%), augmentez le paramètre tmp_table_size jusqu'à obtenir une diminution. Notez que cela aura un impact sur la RAM utilisée.

Autres liens de performance de bases de données

Paramètres d'administration de Moodle

  • Depuis Moodle 1.7, définissez le Type de cache pour votre serveur: Administration du site -> Serveur -> Performance -> Type de cache. Plusieurs options différentes sont possibles :
  • Si vous n'avez installé ni eaccelerator ni memcached, choisissez "internal", qui permettra à Moodle d'utiliser le Cache des enregistrements (voir point ci-dessous).
  • Si vous avez un unique serveur et que votre eaccelerator a été compilé avec shared memory support, choisissez l'option eaccelerator.
  • Si vous avez un serveur memcached distinct, choisissez l'option memcached et tapez dans le champ Serveurs memcached une liste des adresses IP des serveurs memcached, séparées par des virgules.
  • Activez le cache des enregistrements : Administration -> Serveur -> Performance -> Cache des enregistrements = Oui. Indiquez le montant maximum de mémoire à allouer au cache dans le champ Int. cache max. De cette manière, vous activerez le cache primaire des enregistrements de la base de données, sans utiliser de cache de base de données. Voir ce descriptif de bogue pour une discussion complète (en anglais).
  • Activez le cache de langue.
  • Large log files can cause overall performance to degrade over time. If you observe that the site has gradually got slower loading pages in the browser, reduce your Log life time setting (Admin/Configuration/Variables/Maintenance).
  • Les performances peuvent être grandement améliorées en autorisant l'usage des commandes systèmes zip/unzip/du (plutôt que les librairies PHP) - visitez Administration > Configuration > Paramètres techniques et saisissez le chemin des exécutables concernés.
  • Notez qu'utiliser des connections web sécurisées (https plutôt que http) implique un temps de traitement supérieur, à la fois du côté serveur web que client, notamment car le cache ne peut pas être utilisé aussi efficacement, et le nombre de requêtes de fichier augmente donc considérablement. Pour cette raison, utiliser https pour toutes les pages Moodle n'est pas recommandé. Vous pouvez autoriser https uniquement pour la page de connexion, simplement, depuis la page de configuration de Moodle.
  • Vérifiez vos filtres. Having too many filters active can have serious effects on server load, especially on lower-end systems. The number of active filters has a direct effect on the perceived latency of your site; that is the time taken for each page impression.
  • Enable the text cache but do not "Filter all strings" unless you have a specific need. If in doubt profile the performance, and see how your changes affect the processing time.
  • Check your anti-virus measures on the server. Although they are useful for preventing security holes being exploited, some "On-Demand" scanners can affect performance by scanning page content (word, ppt files etc)
  • If there are performance problems loading course pages, check the Resource module settings. The setting resource_filterexternalpages is known to slow-down course pages and should be set to 'No' for better performance.
  • Check your forum settings. To improve performance set forum_trackreadposts = No and forum_usermarksread = Yes (this will impact on the convenience of your users' forum experience). Also consider setting the time of the day when old posts are cleared from the read table (forum_cleanreadtime) to when your site is less busy.

Performance de différents modules Moodle

Les modules d'activité, filtres et autres plugins de Moodle peuvent êtres activés/désactivés. Si nécessaire, vous pouvez désactiver certaines fonctionnalités (comme le chat), si vous ne les utilisez pas. Cela n'est pas obligatoire.

Voici quelques remarques sur les performances de certains modules :

  • Le module Chat est réputé pour être très consommateur de requêtes HTTP fréquentes vers le serveur principal. On peut réduire le nombre de ces requêtes en choisissant la méthode des flux (option chat_normal_updatemode) ou, si vous utilisez un serveur web à base Unix ou Mac OS X, en utilisant le chat en mode démon.
  • L'activité Test est réputée pour plomber les performances de la base de données. Essayez d'optimiser votre serveur de base de données. Voyez par exemple un bref rapport de performance avec 55 étudiants effectuant un test simultanément.
  • Le cron de Moodle est lancé par le script cron.php. Si celui-ci est lancé par une requête HTTP (par exemple en utilisant wget ou curl), il peut mobiliser une grande quantité de mémoire sur de grosses installations. Pour améliorer de façon importante l'efficacité, il est conseillé de l'appeler directement en utilisant la commande php, par exemple
   php -f /path/to/moodle/directory/admin/cron.php

Voir aussi

  • Le forum Servers and Performance (en anglais) sur Using Moodle
  • Les discussions suivantes (en anglais) sur Using Moodle :