Profiling memory usage
This documentation needs review. See "Help improve this page" in the sidebar.
Original article is here, follow that for most of the process: http://derickrethans.nl/xdebug_and_tracing_memory_usage.php
Alternatively you can get the tracefile-analyser.php file from xdebug/xdebug github repo.
This below settings in only applicable if you are using xdebug v2.*
zend_extension="/usr/lib/php5/20060613/xdebug.so"
xdebug.profiler_enable_trigger = on
xdebug.profiler_output_dir = /home/catch/www/cachegrind
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_host = localhost
xdebug.profiler_output_name = cachegrind.out.%R
xdebug.profiler_append = TRUE
xdebug.auto_trace = 1
xdebug.trace_format = 1
If you are using xdebug v3.* or above then use the below settings.
xdebug.client_host=localhost # host.docker.internal if you are using ddev.
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.mode=trace
xdebug.output_dir=/var/www/html/xdebug-profiler
xdebug.trace_output_name=trace.%R.out
xdebug.trace_format=1
Please note the following settings has been removed or renamed in xdebu V3.*.
Xdebug V2.* | Xdebug V3.* |
---|---|
xdebug.profiler_enable_trigger | xdebug.start_with_request |
xdebug.profiler_output_dir | xdebug.output_dir |
xdebug.remote_enable | xdebug.mode # With differernt values |
xdebug.remote_port | xdebug.client_port |
xdebug.remote_host | xdebug.client_host |
xdebug.auto_trace | xdebug.start_with_request |
When you run the script sorting by 'memory own' - i.e. how much memory each function consumes, you'll get a table like this:
Showing the 30 most costly calls sorted by 'memory-own'.
Inclusive Own
function #calls time memory time memory
-------------------------------------------------------------------------------
drupal_load 37 0.0140 799248 0.0055 535792
_registry_check_code 7 0.0032 475792 0.0010 321200
_drupal_bootstrap_full 1 0.0414 1721632 0.0016 303904
has_krumo 1 0.0038 301152 0.0033 300848
drupal_bootstrap 3 0.0717 3154272 0.0012 295224
_drupal_bootstrap_database 1 0.0006 258424 0.0005 248528
module_load_include 7 0.0024 196928 0.0012 194248
require_once 31 0.0055 437816 0.0026 114032
unserialize 8 0.0004 86696 0.0004 86696
Database::openConnection 1 0.0012 80344 0.0003 73944
system_list 3 0.0092 64296 0.0016 51344
ob_start 1 0.0000 41016 0.0000 41016
drupal_static 63 0.0041 31560 0.0028 31560
require 4 0.0007 149464 0.0002 19848
module_implements 8 0.0032 86808 0.0006 13824
PDOStatement->fetchObject 6 0.0002 10760 0.0002 10760
PDOStatement->execute 11 0.0056 10592 0.0056 10592
include_once 34 0.0066 212480 0.0024 10344
module_list 4 0.0097 74128 0.0002 9560
_drupal_bootstrap_variables 1 0.0058 131056 0.0002 8552
_drupal_bootstrap_page_cache 1 0.0088 402848 0.0003 8496
variable_get 39 0.0009 8320 0.0009 8320
drupal_get_filename 85 0.0039 7408 0.0029 7408
PDO->prepare 7 0.0008 6784 0.0003 5920
MergeQuery_mysql->__toString 1 0.0002 7552 0.0001 5744
drupal_environment_initialize 1 0.0005 7312 0.0002 5416
DatabaseConnection->prefixTables 11 0.0011 10304 0.0006 5248
define 174 0.0035 5200 0.0035 5200
strtr 11 0.0003 5056 0.0003 5056
drupal_settings_initialize 1 0.0018 12600 0.0004 4784
I've also attached a patch to xdebug/api which makes it work on PHP5.2 - only works with memory-own sorting, but that's good enough for our purposes.
Help improve this page
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion