Профилирование c помощью xhprof.

Устанавливаем расширение к php — xhprof. Расширение есть в PECL, но там оно уже не обновляется, при этом имеет баг. Так что устанавливаем ручками. Переходим в папку assets/components/

wget https://github.com/facebook/xhprof/archive/master.zip
unzip master.zip
cd xhprof-master/extension/
phpize
./configure
make
sudo make install

Могут полезть ошибки что не хватает php5-dev итп. Что просит ставим.

Дописываем в php.ini

[xhprof]
extension=xhprof.so

Для отрисовки графов нужен Graphiz

sudo apt-get update
sudo apt-get install graphviz

Перезагружаем апач или что там у вас.

sudo service apache2 restart

И немного почистим папку xhprof-master переименовываем в xhprof Оставляем только папки xhprof_html и xhprof_lib остальное удаляем. Создаем папку xhprof/reports для отчетов

Переходим к профилированию. Первое что нужно сделать это поправить некоторые пути. В папке xhprof_html открываем файлы callgraph.php, index.php и typeahead.php. Ищем

$xhprof_runs_impl = new XHProfRuns_Default( );

заменяем на

$xhprof_runs_impl = new XHProfRuns_Default( dirname(dirname(__FILE__)).'/reports');

Теперь создаем отчеты В консоли.

<?php
print '<pre>';
ini_set('display_errors', 1);
$modx->setLogLevel(3);
$namespace = 'modxsite';

// Инициализируем профайлер - будем считать и процессорное время и потребление памяти
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

if(!$response = $modx->runProcessor('web/getdata', 
array(
    
), array(
    'processors_path'   => $modx->getObject('modNamespace', $namespace)->getCorePath().'processors/',        
))){
    print "Не удалось выполнить процессор";    
    return;
} 
print_r($response->getResponse());

// Останавливаем профайлер
$xhprof_data = xhprof_disable();

// Сохраняем отчет и генерируем ссылку для его просмотра
include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_lib.php";
include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default(MODX_BASE_PATH."assets/components/xhprof/reports");
$run_id = $xhprof_runs->save_run($xhprof_data, "console");

echo "Report: assets/components/xhprof/xhprof_html/index.php?run=$run_id&source=console";

На экран выведется относительная ссылка с адресом для просмотра отчета.

Через плагин. Создаем плагин на OnInitCultur и OnWebPagePrerender

switch($modx->event->name){
    
    case 'OnInitCulture':
        
        // Инициализируем профайлер - будем считать и процессорное время и потребление памяти
        xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

        break;
    case 'OnWebPagePrerender':
        
        // Останавливаем профайлер
        $xhprof_data = xhprof_disable();

        // Сохраняем отчет и генерируем ссылку для его просмотра
        include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_lib.php";
        include_once MODX_BASE_PATH."assets/components/xhprof/xhprof_lib/utils/xhprof_runs.php";
        $xhprof_runs = new XHProfRuns_Default(MODX_BASE_PATH."assets/components/xhprof/reports");
        $run_id = $xhprof_runs->save_run($xhprof_data, "full_site");

        $modx->log(xPDO::LOG_LEVEL_ERROR,"Report: assets/components/xhprof/xhprof_html/index.php?run=$run_id&source=full_site",'xhprof');
        
        break;        
    
}

Ссылка будет в логах. В плагин можно добавить условие чтобы срабатывал только на админах.