Příručka:Profilování
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
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
- ↑ Chcete-li se dozvědět více o ProfilerOutputDump, podívejte se na git #750e4eb9
Správce kódu
- Spravováno MediaWiki Platform Team.
- Živý chat (IRC): #mediawiki-core připojit se
- Nástroj pro sledování problémů: Phabricator MediaWiki-Core-Profiler (nahlášení problému)