Manuel:Profilage

This page is a translated version of the page Manual:Profiling and the translation is 100% complete.

Le profilage (profiling) suit l'exécution du code pendant l'action sur une page et fournit le pourcentage relatif du temps d'exécution dans chaque fonction spécifique. Le profilage est une tâche avancée pour les développeurs et les administrateurs système pour tracer les sources de ralentissement dans MediaWiki à optimiser.

Profilage PHP

Vous pouvez utiliser Tideways ou XDebug. Ces extensions PHP fournissent les possibilités de trace et de profilage.

Tideways dispose aussi d'une interface utilisateur propriétaire pour visualiser les résultats, mais elle ne vous est pas nécessaire.

Installez le paquetage php-tideways sous Debian / Ubuntu, ou Homebrew sous macOS.

Pour XDebug, voir la documentation du profiling XDebug. Pour les scripts en mode ligne de commande, vous pouvez utiliser php -d xdebug.mode=profile maintenance/{script}. Webgrind peut ensuite être utilisé pour afficher les résultats du profile.

Profilage personnalisé MediaWiki

Les appels personnalisés de profilage dans MediaWiki (wfProfileIn/wfProfileOut) sont obsolètes et non opérationels depuis MediaWiki 1.25; ils ont été supprimés en 1.31.
Version de MediaWiki :
1.25

En MediaWiki 1.25 le profilage a été complètement réécrit et beaucoup de paramètres qui avant étaient relatifs au profilage, ont été supprimés en faveur de leur consolidation comme paramètres de $wgProfiler. Notamment, la sortie a été séparée des types de classes. Pour la documentation concernant le profilage avant la version 1.25, voir une ancienne version de cette page.

Exemple de configuration $wgProfiler  :

<?php
$wgProfiler['class'] = 'ProfilerXhprof';
$wgProfiler['output'] = [ 'ProfilerOutputText' ];
$wgProfiler['visible'] = true;

Chacun de ces paramètres (et plus) est décrit en détails :

class
'ProfilerXhprof'. ProfilerXhprof est nouveau en MediaWiki 1.25 et fournit un profileur de type Xhprof qui capture des données de profilage pour toutes les fonctions et les sous-unités fonctionnelles. Les anciennes valeurs telles que ProfilerStandard, ProfilerUDP, ProfilerDB, etc ne fonctionnent pas. Même si vous utilisez Tideways, spécifiez encore la classe ProfilerXhprof.
output
Une ou plusieurs valeurs parmi 'ProfilerOutputText', 'ProfilerOutputDump', 'ProfilerOutputStats'[1]. text génère l'information soit sous forme de commentaires HTML ou après l'habillage. udp est un format d'envoi pour un démon udpprofile. dump vide les données de profilage pour être utilisées avec l'interface graphique utilisateur xhprof (rôle xhprofgui dans les paramètres Vagrant).
outputDir
Ne s'applique qu'au format 'ProfilerOutputDump'. Nécessaire pour spécifier où les fichiers de vidage seront enregistrés.
visible
Ne s'applique qu'au format 'ProfilerOutputText'. Indique si le texte est affiché après l'habillage ou dans un commentaire HTML.

Scripts de maintenance

Les scripts de maintenance reconnaissent l'option --profiler. Cela modifie la méthode de sortie du profileur et assure en même temps son activation dans le CLI. Parce que cela ne change que la méthode de sortie et non la classe du profileur, vous devez encore avoir une sorte de configuration de profilage dans $wgProfiler.

Résolution des problèmes

Si vous obtenez l' « Erreur fatale : Exception non récupérée : ni xhprof ni tideways ne sont installés » alors voici ce que vous devez faire :

$ sudo apt install php-tideways
$ sudo service apache2 restart

Si vous obtenez encore une erreur, allez sur https://tideways.com/profiler/xhprof-for-php7

Sortie

La sortie texte ressemble à :

100.00% 508.972      1 - main()
 96.67% 492.003      1 - MediaWiki::run
 96.61% 491.699      1 - MediaWiki::main
 87.12% 443.434      1 - MediaWiki::performRequest
 84.16% 428.356      1 - SpecialPageFactory::executePath
 84.11% 428.073      1 - SpecialPage::run
 84.10% 428.058      1 - SpecialRecentChanges::execute
 63.82% 324.838      1 - ChangesListSpecialPage::execute
 57.07% 290.495      1 - ChangesListSpecialPage::webOutput
 51.06% 259.877      1 - SpecialRecentChanges::outputChangesList
 44.72% 227.633    397 - Wikimedia\Rdbms\Database::query
 31.07% 158.155    922 - Message::fetchMessage
 30.61% 155.788    865 - MessageCache::get
 29.55% 150.398    398 - Wikimedia\Rdbms\Database::doProfiledQuery
 29.39% 149.570    865 - MessageCache::getMessageFromFallbackChain
 29.26% 148.923    869 - MessageCache::getMessageForLang
 29.06% 147.931    393 - Wikimedia\Rdbms\Database::select
 27.30% 138.962      1 - EnhancedChangesList::endRecentChangesList
 27.30% 138.960      1 - EnhancedChangesList::recentChangesBlock
...

La première colonne est le pourcentage du temps; la seconde représente le temps passé (en ms); la troisième est le coût; et la quatrième est le nom de la méthode.

Voir aussi

Notes de bas de page

Code steward