Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Setting up xhprof on Moodle: Difference between revisions

From MoodleDocs
m (Text replacement - "</code>" to "</syntaxhighlight>")
(23 intermediate revisions by 9 users not shown)
Line 1: Line 1:
The following instructions are for setting up xhprof for Moodle under a Ubuntu/Debian environment. The process should be similar for other linux enviroments, but will need some tweaking if you wish to do this under windows. Please update this document if you find any major problems.
The following instructions are for setting up tideways (the modern replacement for xhprof) for Moodle under a Ubuntu/Debian environment. The process should be similar for other linux enviroments, but will need some tweaking if you wish to do this under windows. Please update this document if you find any major problems.


==Installing xhprof with Linux==
==Installing tideways with Linux==


<code bash>
=== Tideways ===
mkdir ~/src/
cd ~/src/
wget http://pecl.php.net/get/xhprof-0.9.2.tgz
tar xvf xhprof-0.9.2.tgz
cd xhprof-0.9.2/extension/
phpize
./configure
make
sudo make install
</code>


Note: The version downloaded via these instructions is not compatible with PHP 5.4 - instead you should download the latest version of the code from https://github.com/facebook/xhprof (before following the instructions from 'cd xhprof-0.9.2/extension/' onwards).
Latest version:


Note: It is available now, the 0.9.3 version from the pecl website. You can run wget http://pecl.php.net/get/xhprof-0.9.3.tgz, if you have PHP 5.4 version.
sudo apt-get install php-tideways
sudo apt-get install graphviz


Add the following to the apache version of you php.ini file
Older version


<code ini>
sudo apt-get install tideways-php
[xhprof]
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
</code>


Restart Apache
===Build manually===
<code bash>
sudo service apache2 restart
</code>


Create a file in your web root that makes a call to phpinfo(); and then view the result in your browser to make sure that xhprof is enabled in PHP. Checking the output of '''php -m''' would also work if you are sure that the command line version of PHP uses the same php.ini file as your web server.
There were outdated instructions here, you will need to follow the Tideways-supplied build instructions if you want do do this.
 
===Troubleshooting===
 
==== Graph isn't generated ====
 
If you see a '''failed to shell execute cmd=" dot -Tpng''' error when you follow the '''View Full Callgraph''' link you may need to install graphviz:
 
sudo apt-get install graphviz
 
Into Windows environment this error can be caused by a path hardcoded into "\lib\xhprof\xhprof_lib\utils\callgraph_utils.php", you must replace one parameter of the proc_open function which is a Linux path "/tmp" by a Windows one, like "c:/temp".
 
==== Call to undefined function tideways_enable ====
 
Verion 5 of tideways was renamed which broke things:
 
<syntaxhighlight lang="php">
Exception - Call to undefined function tideways_enable()
Debug info:
Error code: generalexceptionmessage
Stack trace:
line 168 of /lib/xhprof/xhprof_moodle.php: Error thrown
line 819 of /lib/setup.php: call to profiling_start()
line 53 of /config.php: call to require_once()
line 37 of /my/index.php: call to require_once()</syntaxhighlight>
 
One solution is to update everything to the latest, or you can force downgrade tideways to v4:
 
sudo apt install tideways-php=4.1.6
 
See also for more details
 
https://tideways.com/profiler/blog/tideways-no-5
 
https://tracker.moodle.org/browse/MDL-62280


==Installing xhprof with Windows==
==Installing xhprof with Windows==
'''This section needs to be updated for Tideways/PHP 7'''


You will need to download PHP extensions compiled for your version of PHP. [http://dev.freshsite.pl/php-extensions/xhprof.html Here is one source...]
You will need to download PHP extensions compiled for your version of PHP. [http://dev.freshsite.pl/php-extensions/xhprof.html Here is one source...]
Line 42: Line 62:
Add a line to your php.ini file that matches dll filename you are using. This goes in the Dynamic Extensions section.
Add a line to your php.ini file that matches dll filename you are using. This goes in the Dynamic Extensions section.


<code>
<syntaxhighlight lang="php">
extension=xhprof_0.10.3_php54_vc9.dll
extension=xhprof_0.10.3_php54_vc9.dll
</code>
</syntaxhighlight>


Stop and restart Apache through your server control interface. If it complains, you probably don't have the correct extension for your version of PHP, or the extension entry in your php.ini file doesn't match the dll file.
Stop and restart Apache through your server control interface. If it complains, you probably don't have the correct extension for your version of PHP, or the extension entry in your php.ini file doesn't match the dll file.
Line 51: Line 71:


==Configuring Moodle to use xhprof==
==Configuring Moodle to use xhprof==
[[Image:profilingOption.png|thumb|left|The profiling option is displayed when the php xhprof extension is installed]]
[[Image:profilingOption.png|thumb|left|The profiling option is displayed when the php xhprof extension is installed]]
[[Image:profilingOutput.png|thumb|right|Tabular profiling output produced by xhprof]]
[[Image:profilingOutput.png|thumb|right|Tabular profiling output produced by xhprof]]
Line 56: Line 77:
Once the xhprof php extension is correctly installed you will find a new "Profiling" option available under Settings > Site administration > Development
Once the xhprof php extension is correctly installed you will find a new "Profiling" option available under Settings > Site administration > Development


When you load the profiling settings page you are confronted with several options. In order to get xhprof up and running with minimal fuss you mearly need to check the "Enable profiling" box and set a path that you wish to be profiled. You can simply set this to a wildcard using the asterisk symbol ('''*''') while you are testing profiling. Afterwards you can come back and set this to a more restrictive setting once you know profiling is working. Note the paths need to be specified relative to your Moodle directory and not the web root.
When you load the profiling settings page you are confronted with several options. In order to get xhprof up and running with minimal fuss you merely need to check the "Enable profiling" box and set a path that you wish to be profiled. You can simply set this to a wildcard using the asterisk symbol ('''*''') while you are testing profiling. Afterwards you can come back and set this to a more restrictive setting once you know profiling is working. Note the paths need to be specified relative to your Moodle directory and not the web root.


After you have enabled profiling you should load some pages within the "Profile these" filter that you set in the step above. Once you have done these go to Settings > Site administration > Development > Profiling runs and you should see a list of the pages you visited. Clicking on one of these and then clicking on the "View profiling details" will take you to a profiling table full of helpful stats for tracking down slow pages and functions. You can get an even more ineresting breakdown of this by then clicking on the "View Full Callgraph" link. This callgraph makes it easy to see where the slow parts of each particular run are and functions which individually may not take a long time to run but which are run thousands of times and thus resulting in a great deal of slowdown.
After you have enabled profiling you should load some pages within the "Profile these" filter that you set in the step above. Once you have done these go to Settings > Site administration > Development > Profiling runs and you should see a list of the pages you visited. Clicking on one of these and then clicking on the "View profiling details" will take you to a profiling table full of helpful stats for tracking down slow pages and functions. You can get an even more interesting breakdown of this by then clicking on the "View Full Callgraph" link. This callgraph makes it easy to see where the slow parts of each particular run are and functions which individually may not take a long time to run but which are run thousands of times and thus resulting in a great deal of slowdown.
[[Image:profilingSettings.png|frame|center|Enabling profiling and setting it to run on all pages via a wildcard]]
[[Image:profilingSettings.png|frame|center|Enabling profiling and setting it to run on all pages via a wildcard]]
[[Image:profilingRuns.png|frame|left|A profiling runs option can be seen after enabling profiling]]
[[Image:profilingRuns.png|frame|left|A profiling runs option can be seen after enabling profiling]]


==Using XHProf==
==Using Tideways/XHProf==


MDL-39443 shows the kind of thing that can be done using XHProf.
MDL-39443 shows the kind of thing that can be done using XHProf.


[http://tjhunt.blogspot.co.uk/2013/05/performance-testing-moodle.html This blog post] talks about the process.
[http://tjhunt.blogspot.co.uk/2013/05/performance-testing-moodle.html This blog post] talks about the process.
Since Moodle 2.5.1 it's possible to export and import any profiling run. That enables some interesting uses like, comparisons along the time, between different systems and sharing or runs in other systems like the Tracker when optimization issues are being fixed.
In order to make a comparison between runs, you can follow the following steps:
# Go to the "base" (before) run, clicking on its date.
# Mark it as "reference" run and Save changes.
# Go to the "after" run.
# Click the profile run in the "View profiling differences with...." section.
# Click "View profiling diff details" link to compare both versions.
# The "View Regressions/Improvements using Callgraph Diff" graph is also useful because it shows exactly where the differences are, following the yellow thread.

Revision as of 20:20, 14 July 2021

The following instructions are for setting up tideways (the modern replacement for xhprof) for Moodle under a Ubuntu/Debian environment. The process should be similar for other linux enviroments, but will need some tweaking if you wish to do this under windows. Please update this document if you find any major problems.

Installing tideways with Linux

Tideways

Latest version:

sudo apt-get install php-tideways
sudo apt-get install graphviz

Older version

sudo apt-get install tideways-php

Build manually

There were outdated instructions here, you will need to follow the Tideways-supplied build instructions if you want do do this.

Troubleshooting

Graph isn't generated

If you see a failed to shell execute cmd=" dot -Tpng error when you follow the View Full Callgraph link you may need to install graphviz:

sudo apt-get install graphviz

Into Windows environment this error can be caused by a path hardcoded into "\lib\xhprof\xhprof_lib\utils\callgraph_utils.php", you must replace one parameter of the proc_open function which is a Linux path "/tmp" by a Windows one, like "c:/temp".

Call to undefined function tideways_enable

Verion 5 of tideways was renamed which broke things:

Exception - Call to undefined function tideways_enable()
Debug info: 
Error code: generalexceptionmessage
Stack trace:
line 168 of /lib/xhprof/xhprof_moodle.php: Error thrown
line 819 of /lib/setup.php: call to profiling_start()
line 53 of /config.php: call to require_once()
line 37 of /my/index.php: call to require_once()

One solution is to update everything to the latest, or you can force downgrade tideways to v4:

sudo apt install tideways-php=4.1.6

See also for more details

https://tideways.com/profiler/blog/tideways-no-5

https://tracker.moodle.org/browse/MDL-62280

Installing xhprof with Windows

This section needs to be updated for Tideways/PHP 7

You will need to download PHP extensions compiled for your version of PHP. Here is one source...

Extract the contained dll file to the ext directory of your server. With XAMPP this is in xampp\php\ext

Add a line to your php.ini file that matches dll filename you are using. This goes in the Dynamic Extensions section.

extension=xhprof_0.10.3_php54_vc9.dll

Stop and restart Apache through your server control interface. If it complains, you probably don't have the correct extension for your version of PHP, or the extension entry in your php.ini file doesn't match the dll file.

To test that the extension is installed, log in to Moodle as an administrator and navigate to Administration > Site administration > Server > PHP info. Search for information about the xhprof extension. It should be present and enabled.

Configuring Moodle to use xhprof

The profiling option is displayed when the php xhprof extension is installed
Tabular profiling output produced by xhprof
An example call graph showing slow parts of the profiled run

Once the xhprof php extension is correctly installed you will find a new "Profiling" option available under Settings > Site administration > Development

When you load the profiling settings page you are confronted with several options. In order to get xhprof up and running with minimal fuss you merely need to check the "Enable profiling" box and set a path that you wish to be profiled. You can simply set this to a wildcard using the asterisk symbol (*) while you are testing profiling. Afterwards you can come back and set this to a more restrictive setting once you know profiling is working. Note the paths need to be specified relative to your Moodle directory and not the web root.

After you have enabled profiling you should load some pages within the "Profile these" filter that you set in the step above. Once you have done these go to Settings > Site administration > Development > Profiling runs and you should see a list of the pages you visited. Clicking on one of these and then clicking on the "View profiling details" will take you to a profiling table full of helpful stats for tracking down slow pages and functions. You can get an even more interesting breakdown of this by then clicking on the "View Full Callgraph" link. This callgraph makes it easy to see where the slow parts of each particular run are and functions which individually may not take a long time to run but which are run thousands of times and thus resulting in a great deal of slowdown.

Enabling profiling and setting it to run on all pages via a wildcard
A profiling runs option can be seen after enabling profiling

Using Tideways/XHProf

MDL-39443 shows the kind of thing that can be done using XHProf.

This blog post talks about the process.

Since Moodle 2.5.1 it's possible to export and import any profiling run. That enables some interesting uses like, comparisons along the time, between different systems and sharing or runs in other systems like the Tracker when optimization issues are being fixed.

In order to make a comparison between runs, you can follow the following steps:

  1. Go to the "base" (before) run, clicking on its date.
  2. Mark it as "reference" run and Save changes.
  3. Go to the "after" run.
  4. Click the profile run in the "View profiling differences with...." section.
  5. Click "View profiling diff details" link to compare both versions.
  6. The "View Regressions/Improvements using Callgraph Diff" graph is also useful because it shows exactly where the differences are, following the yellow thread.