Jump to content

Příručka:Profilování

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

Profilování sleduje provádění kódu během akce na stránce a hlásí procento celkového provedení kódu, které bylo stráveno v jakékoli konkrétní funkci. Profilování je pokročilý úkol určený pro vývojáře a systémové administrátory ke sledování zdrojů pomalosti v MediaWiki, které by měly být optimalizovány.

Example of profile outputs can be call tree and memory stats in plaintext or flame graphs. There are many tools you can use for PHP profiling such as Excimer , XHProf or XDebug.

For profiling configuration in Docker see flame graphs or plaintext recipes in MediaWiki-Docker/Configuration recipes/Profiling

Profilování PHP

Můžete použít XHProf nebo XDebug. Tato rozšíření PHP poskytují možnosti trasování a profilování. (Všimněte si, že rozvětvení tideways_xhprof, který přidává podporu PHP8, bylo od té doby opuštěno. Původní XHProf nyní také podporuje PHP8.)

Nainstalujte balíček xhprof z PECL.

Informace o XDebugu naleznete na stránce Dokumentace profilování XDebugu. Pro skripty příkazového řádku můžete použít php -d xdebug.mode=profile maintenance/{script}. Webgrind pak lze použít k zobrazení výsledků profilu.

Vlastní profilovač MediaWiki

Volání vlastních profilů MediaWiki (wfProfileIn/wfProfileOut) jsou zastaralá, od verze MediaWiki 1.25+ byla nefunkční a ve verzi 1.31 byla odstraněna.
Verze MediaWiki:
1.25

V MediaWiki 1.25 bylo profilování kompletně přepsáno a mnoho nastavení týkajících se profilování bylo odstraněno ve prospěch jejich konsolidace jako parametrů do $wgProfiler. Je pozoruhodné, že výstup byl oddělen od typů tříd. Dokumentaci o profilování před verzí 1.25 naleznete ve starší verzi této stránky.

Příklad konfigurace $wgProfiler :

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

Každý z těchto parametrů (a další) je podrobně popsán:

class
'ProfilerXhprof'. ProfilerXhprof je novinkou v MediaWiki 1.25 a poskytuje profiler podporovaný Xhprofem, který zachycuje profilovací data pro všechny funkce i dílčí funkční jednotky. Staré hodnoty jako ProfilerStandard, ProfilerUDP, ProfilerDB atd. nefungují.
output
Jeden nebo více z 'ProfilerOutputText', 'ProfilerOutputDump', 'ProfilerOutputStats'.[1] Text vypisuje informace buď v HTML komentářích, nebo ve vzhledu. UDP je formát odesílaný démonovi udpprofile. Výpis vytvoří výpis profilovacích informací pro použití s ​​grafickým uživatelským rozhraním xhprof (role xhprofgui v nastavení Vagrant).
outputDir
Platí pouze pro formát 'ProfilerOutputDump'. Vyžaduje se určení, kam budou uloženy soubory s výpisem.
visible
Platí pouze pro formát 'ProfilerOutputText'. Zda se text zobrazí se vzhledem nebo v HTML komentáři.

Skripty údržby

Skripty údržby podporují možnost --profiler. Tím se změní výstupní metoda profileru a zároveň se zajistí jeho povolení v CLI. Protože se tím změní pouze výstupní metoda a nikoli třída profileru, musíte mít v $wgProfiler stále nějaké nastavení profilování.

Řešení problémů

Pokud se vám zobrazí chyba "Fatal error: Uncaught Exception: Neither xhprof nor tideways are installed" (Fatální chyba: Nezachycená výjimka: Není nainstalován xhprof ani tideways), musíte nainstalovat a povolit php-xhprof. Můžete jej nainstalovat od PECL na macOS/Linux/Windows, nebo pro Linux (Debian/Ubuntu) od deb.sury.org, nebo pro Fedora Linux od remirepo.net. Pokud používáte Debian 11 Bullseye nebo starší, použijte místo toho sudo apt install php-tideways.

Výstup

Textový výstup vypadá takto:

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
...

První sloupec uvádí procentuální hodnotu času; druhý sloupec uvádí hodnotu času (v ms); třetí sloupec uvádí hodnotu počtu; a čtvrtý sloupec uvádí hodnotu názvu metody.

Související odkazy

Poznámky pod čarou

  1. Chcete-li se dozvědět více o ProfilerOutputDump, podívejte se na git #750e4eb9

Správce kódu