Profiling tracks code execution during a page action and reports back the percentage of total code execution that was spent in any specific function. Profiling is an advanced task intended for developers and system administrators to track sources of slowness in MediaWiki that should be optimized.
Tideways also advertises a proprietary UI to visualize results, but you don't need that.
php-tideways package on Debian/Ubuntu, or Homebrew on macOS.
MediaWiki custom profiler
wfProfileOut) are deprecated, were no-ops since MediaWiki 1.25+, and were removed in 1.31.
In MediaWiki 1.25 profiling was completely rewritten and many settings previous relating to profiling were removed in favor of consolidating them as parameters to $wgProfiler. Notably, output has been separated from class types. For documentation about profiling prior to 1.25, see an older version of this page.
Example $wgProfiler configuration:
<?php $wgProfiler['class'] = 'ProfilerXhprof'; $wgProfiler['output'] = [ 'ProfilerOutputText' ]; $wgProfiler['visible'] = true;
Each of these parameters (and more) are described in detail:
- 'ProfilerXhprof'. ProfilerXhprof is new in MediaWiki 1.25 and provides an Xhprof-backed profiler that captures profiling data for all functions as well as sub-functional units. Old values such as ProfilerStandard, ProfilerUDP, ProfilerDB, etc do not work. Even if you are using Tideways, still specify the ProfilerXhprof class.
- One or more of 'ProfilerOutputText', 'ProfilerOutputDump', 'ProfilerOutputStats'. Text outputs the information in either HTML comments or after the skin. UDP is a format send to a udpprofile daemon. Dump produces a dump of the profiling info for use with xhprof GUI (xhprofgui role on Vagrant setup).
- Only applies to 'ProfilerOutputDump' format. Required to specify where the dump files will be stored.
- Only applies to 'ProfilerOutputText' format. Whether text is shown after the skin or in an HTML comment.
If you get "Fatal error: Uncaught Exception: Neither xhprof nor tideways are installed" then you need to do:
$ sudo apt install php-tideways $ sudo service apache2 restart
If the package can't be found then take a look at https://tideways.com/profiler/xhprof-for-php7
Text output looks like:
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 ...
- See git #750e4eb9