Настройка профайлера XHprof для универсального использования

03.12.2011
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

В моей предыдущей статье рассматривались возможности профайлера PHP кода XHprof от веб разработчиков Facebook-а, а именно затрагивались вопросы установки, настройки и использования.

Поставлена задача настроить профайлер для универсального использования в виде:

/mysite/page?debug

То есть, чтобы для каждой страницы можно было использовать профайлер одним универсальным способом.

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

Итак:

0) определяем девелопмент-сервер, на котором мы хотим профилировать и делать анализ веб-приложений

1) создаем домен . В директорию  домена копируем папки xhprof_html и xhprof_lib из оригинальной папки XHprof .

2)  в корне домена создаем папку xhprof_log.

3) в корне домена создаем файл xhprof.php с следующим содержанием:

function my_xhprof_enable() {
  if (extension_loaded('xhprof')) {
    switch ($_GET['debug']) {
      case 'simple':
        define('DEBUG_MICROTIME_START', microtime(1));
        break;
      
      case 'all':
        xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
        break;
      
      case 'cpu':
        xhprof_enable(XHPROF_FLAGS_CPU);
        break;
      
      case 'memory':
        xhprof_enable(XHPROF_FLAGS_MEMORY);
        break;
      
      case 'time':
      default:
        xhprof_enable();
    }
  }
}

function my_xhprof_disable() {
  if ($_GET['debug'] == 'simple') {
    $time = number_format(microtime(1) - DEBUG_MICROTIME_START, 4);
    $cur  = number_format(memory_get_usage() / 1024, 3);
    $peak = number_format(memory_get_peak_usage() / 1024, 3);
    print "\ntime = {$time} seconds
\nmemory_get_usage = {$cur} kb
\nmemory_get_peak_usage = {$peak} kb"; } elseif (extension_loaded('xhprof')) { include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_lib.php'; include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_runs.php'; $profiler_namespace = isset($_GET['namespace']) ? $_GET['namespace'] : $_SERVER['SERVER_NAME']; $xhprof_data = xhprof_disable(); $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace); $profiler_url = sprintf('/xhprof_html/index.php?run=%s&source=%s', $run_id, $profiler_namespace); print ''; } } if (isset($_GET['debug'])) { my_xhprof_enable(); register_shutdown_function('my_xhprof_disable'); }

4) в php.ini немного подправляем строки, не забываем после этого перезапустить вебсервер:

extension=xhprof.so
xhprof.output_dir=/path/to/your//on/server/xhprof_log
auto_prepend_file=/path/to/your//on/server/xhprof.php

5) Enjoy IT! Наслаждаемся результатом!

На любой страничке любого домена на сервере дописываем в адресную строку GET-параметр «?debug» (или ?debug=time, или ?debug=memory, или ?debug=cpu, или ?debug=all) и смотрим на результат :)

   

 

Здесь следует учесть важный момент: при полноценном использовании XHprof время генерации странички возрастает в среднем на 2.5-4.5 мс, поэтому на очень легких страницах данные не соответствуют действительности. Например на страницах время генерации которых очень мало, надо понимать что есть погрешность в 2.5-4.5 мс. Иногда это важно.

В таком случае пользуемся упрощенным режимом “?debug=simple”. Теперь XHprof не подключается вообще, и мы видим системный вывод реальных данных о ресурсах в упрощенном виде внизу страницы:

 time = 0.0020 seconds

 memory_get_usage = 143.156 kb

 memory_get_peak_usage = 183.211 kb

1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

В наши дни все знают о таких интернет-магазинах как eBay, Amazon и.т.д. Но мало...

2

Не все знают, что модуль Views предоставляет довольно обширный ...

3

В продолжение двух предыдущих статьей (тыцьтыць) о профайлерах и, в...

4

Иногда возникает необходимость для удобства ввода данных создавать поля с автозаполнением (autocomplete field). Примерами таких полей могут быть виджеты для cck-полей Node reference и User...

5

CCK-форматтеры - это куски кода, позволяющие выводить поля так, как мы пожелаем. Часто возникает ситуация, когда существующих форматтеров для...

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join the people who have already subscribed!

Want to be aware of important and interesting things happening? We will inform you about new blog posts on Drupal development, design, QA testing and more, as well news about Drupal events.

No charge. Unsubscribe anytime