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
(Liens francisés)
Ligne 3 : Ligne 3 :
Moodle peut avoir de bonnes performances, que ce soit pour de petits usages, ou en augmentant jusqu'à une utilisation pour 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.
Moodle peut avoir de bonnes performances, que ce soit pour de petits usages, ou en augmentant jusqu'à une utilisation pour 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.


== Obtenir un benchmark de base ==
== Obtenir une mesure de référence ==


Avant de tenter la moindre optimisation, vous devriez obtenir un benchmark de base des composants que vous essayez d'améliorer. Pour Linux, essayez [http://lbs.sourceforge.net/ LBS] et pour Windows utilisez le Performance Monitor. Lorsque vous avez 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 un réel impact.
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 [http://lbs.sourceforge.net/ 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 améliorer l'exécution est d'employer la mémoire 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 dossier d'échange (Swap). Si votre système commence à swapper, c'est un signe que vous avez besoin de plus de RAM.  
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/meilleur configuration des disques durs), processeur (plus, et plus rapides).
'''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 ==
== Montée en charge ==

Version du 12 octobre 2007 à 22:01

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 avoir de bonnes performances, que ce soit pour de petits usages, ou en augmentant jusqu'à une utilisation pour 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.

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 séparent généralement le serveur web et la base de données sur des serveurs différents, ce qui n'est généralement pas nécessaire pour des installations de taille moyenne.

It is possible to load-balance a Moodle installation, for example by using more than one webserver. The separate webservers should query the same database and refer to the same filestore area, but otherwise the separation of the application layers is complete enough to make this kind of clustering feasible. Similarly, the database could be a cluster of servers (e.g. a MySQL cluster), but this is not an easy task and you should seek expert support, e.g. from a Moodle Partner.

The above comment makes it sound easy to run a database cluster. It is not. It is easy to run the webservers in cluster with LVM and other solutions. The only "easy" cluster database is MySQL Cluster and there are several issues with it. --Martin Langhoff 18:53, 31 August 2006 (CDT)

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 sur votre serveur web - installez autant de RAM que possible (par exemple 4 Go). Accroitre la mémoire centrale permettra de réduire l'usage du fichier d'échange sur le disque et permettra à votre serveur de gérer plus d'utilisateurs.

  • Better performance is gained by obtaining the best processor capability you can, i.e. dual or dual core processors. A modern BIOS should allow you to enable hyperthreading, but check if this makes a difference to the overall performance of the processors by using a CPU benchmarking tool.
  • 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 processeurs intégrés et se débrouillent lorsque vous avez de multiples 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).
  • Purchase hard disks with a low seek time. This will improve the overall speed of your system, especially when accessing Moodle's reports.
  • Dimensionnez votre fichier swap correctement. La règle générale est de le définir à 4 x la mémoire RAM.
  • Use a RAID disk system. Although there are many different RAID configurations you can create, the following generally works best:
    • installez un contrôleur RAID matériel (si vous pouvez)
    • the operating system and swap drive on one set of disks configured as RAID-1.
    • Moodle, Web server and Database server on another set of disks configured as RAID-5.
  • Use gigabit ethernet for improved latency and throughput. This is especially important when you have your webserver and database server separated out on different hosts.
  • Check the settings on your network card. You may get an improvement in performance by increasing the use of buffers and transmit/receive descriptors (balance this with processor and memory overheads) and off-loading TCP checksum calculation onto the card instead of the OS.
  • Read this Case Study on a server stress test with 300 users : http://moodle.org/mod/forum/discuss.php?d=68579
  • See this accompanying report on network traffic and server loads : 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 cout de licence, but can have a big learning curve if you're used to another operating system. If you have a large number of processors running SMP, you may also want to consider using a highly tuned OS such as Solaris.
  • Vérifiez votre propre OS et les instructions spécifiques du fournisseur pour les étapes d'optimisation.
    • Pour Linux, regardez le site Linux Performance Team.
    • For Linux investigate the hdparm command, e.g. hdparm -m16 -d1 can be used to enable read/write on multiple sectors and DMA. Mount disks with the async and noatime options.
    • For Windows set the server to be optimized for network applications (Control Panel, Network Connections, LAN connection, Properties, File & Printer Sharing for Microsoft Networks, Properties, Optimization). You can also search the Microsoft TechNet site for optimization documents.

Performances du serveur web

Installer Firefox et 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 filesystem en:TMPFS.
  • Les performances de PHP sont meilleures s'il est installé comme un module Apache/IIS (plutôt que CGI).
  • Vérifiez également memory_limit dans php.ini, réduisez le à 16M pour les versions de Moodle jusqu'à 1.6 (See this forum discussion). A partir de Moodle 1.7 et suivant, il est recommandé que memory_limit soit à 40M.

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 la directive MaxClients correctement. Use this formula to help (which uses 80% of available memory to leave room for spare):
MaxClients = Total available memory * 80% / Max memory usage of apache process
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:
#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.
  • Use the latest version of Apache - Apache 2 has an improved memory model which reduces memory usage further.
  • 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).
  • 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.
  • 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.
  • If you do not use a .htaccess file, set the AllowOverride variable to AllowOverride None to prevent .htaccess lookups.
  • Set DirectoryIndex correctly so as to avoid content-negotiation. Here's an example from a production server:
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.
  • Leave HostnamesLookups Off (as default) to reduce DNS latency.
  • Consider reducing the value of TimeOut to between 30 to 60 (seconds).
  • For the Options directive, avoid Options Multiviews as this performs a directory scan. To reduce disk I/O further use
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:
  1. Install and enable mod_expires - refer to documentation or man pages
  2. 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):
<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>

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.

Plus d'informations : www.metaskills.net

  • Alternatively, you can increase web server performance by using the light-weight webserver 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.


Performances de IIS

All alter this location in the registry :

 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.
  • 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).
  • Change the MaxCachedFileSize to adjust the maximum size of a file cached in the file cache in bytes. Default is 262,144 (256K).
  • 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).

Performances de Base de données

Moodle contient un script qui affiche des informations clés sur les statistiques de performance à partir de ADOdb performance monitor. Lancez ce script dans votre navigateur comme ceci :

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), afin d'apporter de meilleurs performances. Pour voir les valeurs actuelles, utilisez ces commandes :

 SHOW STATUS;
 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.

  • 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.
 mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  • Définissez thread cache correctement. Adjust the value so that your thread cache utilization is as close to 100% as possible by this formula:
 thread cache utilization (%) = (threads_created / connections) * 100
  • 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:
 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 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.
  • 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.
  • 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:
 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 manuel MySQL et ce script dans le forum).
  • Maintenez la distribution principale. Chaque mois, par exemple, il serait utile d'arrêter le serveur mysql et lancer ces commandes myisamchk :
 #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. 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.
  • 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 :
http://www.monmoodle.com/admin/innodb.php

Autres liens de performance de bases de données

Paramètres d'administration de Moodle

  • In Moodle 1.7 or later, set the Cache type for your server: Site Admin -> Server -> Performance -> Cache type. There are several options available.
  • If you do not have eaccelerator or mmemcached installed, choose "internal" (which makes use of the record/internal cache - see the next bullet point).
  • If you have a single server and have compiled eaccelerator with shared memory support, set the cache type to the eaccelerator option.
  • If you have a separate memcached server, set the cache type to memcached and enter a csv list of server IP addresses.
  • 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 this Tracker entry for a full discussion.
  • 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 modedémon.
  • L'activité quiz is known to stretch database performance. Try to optimise your database server by tuning. See for a brief report on performance for 55 students simultaneously using quizzes
  • The Moodle Cron task is triggered by calling the script cron.php. If this is called over HTTP (e.g. using wget or curl) it can take a large amount of memory on large installations. If it is called by directly invoking the php command (e.g. php -f /path/to/moodle/directory/admin/cron.php) efficiency can be much improved.

Voir aussi