показать полностью
Пользователь 2276  -> Всем
20 Апрель, 2014 19:05
Используем XHProf для анализа "темных узких" мест
Свеже-варимое ядро D7 и активно развивающийся корпоративный портал регулярно приводят к ситуациям, когда возникают "тормоза" с открытием тех или иных страниц портала. Композитный сайт до портала доберется еще не скоро, а решать вопросы производительности надо прямо сейчас.

Первое что пришло в голову - xdebug и модуль bitrix.xdebug от Дениса Шаромова. Отличный вариант, но под реальной нагрузкой в "стесненных" условиях сервера попытка снять трейс проблемного кода приводит к OutOfMemory и иным неприятным сюрпризам.
Особенно когда требуется отловить 1 из 30-50 запросов к странице.

Следующим шагом стал совет Александра Сербула - использовать XHProf, который ощутимо легче в ресурсах и позволяет использовать его в боевых условиях под нагрузкой.

Итогом стал небольшой скрипт, позволяющий облегчить применение XHProf в проектах на битрикс.

Настройка:

$xhprof_path = '/home/bitrix/www/xhprof/'; // Путь к GUI XHProf, слэш на конце обязателен
$xhprof_url = 'http://vhost/xhprof/xhprof_html/index.php'; // Базовая ссылка на GUI XHPro
$xhprof_namespace = 'cp'; // Расширение файлов профиля (используется для агрегации и сравнительного анализа)

Ньанс - не всегда получается найти GUI в дебрях /usr/,
поэтому я просто отдельно скачал его здесь pecl.php.net/get/xhprof-0.9.2.tgz
и разместил в папке проекта.

Использование:
include_once('.../bitrix/php_interface/include/xhprof.php');
xhprof_start(time_limit,user_id);
...проблемный код...
xhprof_stop();

Параметры xhprof_start:

time_limit:
максимальное время выполнения страницы, для которой выполняется профилирование
если 0, профилируются все запросы.

sendUser:
если указан пользователь, то ссылка отправляется сообщением социальной сети интранет (требуется модуль Веб-мессенджер)
если 0, формируется popup-окно для текущего пользователя.

Информация по установке XHProf:
- VMBitrix: модуль доступен сразу, достаточно переименовать /etc/php.d/xhprof.ini.disabled в xhprof.ini
- CentOS: yum install php-xhprof
- другие системы - гугль в помощь...

// Путь к GUI XHProf, слэш на конце обязателен
$xhprof_path = '/home/bitrix/www/xhprof/';

// Базовая ссылка на GUI XHProf
$xhprof_url = 'http://vhost/xhprof/xhprof_html/index.php';

// Расширение файлов профиля (используется для агрегации и сравнительного анализа
$xhprof_namespace = 'cp';

$xhprof_start_time = 0;
$xhprof_time_limit = 0;
$xhprof_user = 0;

if (extension_loaded('xhprof')) {
   include_once $xhprof_path.'xhprof_lib/utils/xhprof_lib.php';
   include_once $xhprof_path.'xhprof_lib/utils/xhprof_runs.php';
}   

/*
* time_limit: максимальное время выполнения страницы, для которой выполняется профилирование
* sendUser: если указан пользователь, то ссылка отправляется сообщением социальной сети интранет
*/
function xhprof_start($time_limit = 0, $sendUser = 0) {
   global $xhprof_start_time;
   global $xhprof_time_limit;
   global $xhprof_user;
   $xhprof_user = $sendUser;
   $xhprof_start_time = time();
   $xhprof_time_limit = $time_limit;
   if (extension_loaded('xhprof'))
      xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}

function xhprof_stop() {
   global $xhprof_namespace;
   global $xhprof_url;
   global $xhprof_start_time;
   global $xhprof_time_limit;
   global $xhprof_user;
   global $APPLICATION;
   
   $run_time = (time() - $xhprof_start_time);

   if ($xhprof_time_limit == 0 || ($run_time >= $xhprof_time_limit)) {

      if (extension_loaded('xhprof')) {
         $xhprof_data = xhprof_disable();
         $xhprof_runs = new XHProfRuns_Default();
         $run_id = $xhprof_runs->save_run($xhprof_data, $xhprof_namespace);
         $profiler_url = sprintf($xhprof_url.'?run=%s&source=%s', $run_id, $xhprof_namespace);

         if ($xhprof_user>0) {
            $arMessageFields = array(
               "TO_USER_ID" => $xhprof_user,
               "FROM_USER_ID" => 0, 
               "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, 
               "NOTIFY_MODULE" => "im", 
               "NOTIFY_MESSAGE" =>
                  "XHProf: (".$run_time.">=".$xhprof_time_limit."): <a target=_blank href=\"".$profiler_url."\">".$run_id.".".$xhprof_namespace."</a>\n".
                  "URL: <a target=\"_blank\" href=\"".$APPLICATION->GetCurUri()."\">".$APPLICATION->GetCurUri()."</a>"
            );
            CIMNotify::Add($arMessageFields);
         }
         else {
            ?><div style="
               margin: 5px;
               width: 300px;
               font-size: 11px;
               padding: 5px;
               line-height: normal;
               font-weight: normal;   
               position: fixed;
               top: 10px;
               left: 10px;
               z-index: 999;
               opacity: 1;
               border: 1px solid blue;   
               font-family: Verdana,Arial;
               font-size: 10px;
               color: black;
               background-color: white;
               margin: 0px;
               padding: 2px;
               font-weight: normal;
               line-height: normal;
               text-align: left;
               background-image: none;">
            <b>XHProf</b> (<?=$run_time?>>=<?=$xhprof_time_limit?>): <a target=_blank href="<?=$profiler_url?>"><?=$run_id?>.<?=$xhprof_namespace?></a>
            </div><?
         }
      }
   }
}

?>
 
Примеры уведомлений и пример отчета XHProf в картинках:
Фото:
Тыртов Владимир
Платонов Дмитрий, да убрали, потому что официальный модуль не поддерживает php7 - точнее так, разработчики забили на проект.

Можно по ссылке выше найти форк, который поддерживает php7, но ставить надо руками.
1 Ещё
Платонов Дмитрий
Тыртов Владимир, руками не умею, попробую xdebug.ом обойтись)
спасибо !
0 Ещё
Пилецкий Антон
Мои 5 копеек на эту тему https://pilezkiy.com/blog/bitrix-xhprof/
1 Ещё
показать полностью
Пользователь 2276  -> Всем
7 Июль, 2009 12:05
"Успеть за будущим" — рефлексия из провинции по партнерской конференции
Обгоняя безумие ветров хмельных
Эскадрон моих мыслей шальных (с)


«Успеть за будущим!» Даже название клуба, где прошла конференция, словно кричало об этом — «Солярис». Как известно, одноименная книга Лема рассказывает о непростых отношениях мира людей и разумного океана, в котором без труда можно увидеть интернет.

И когда Сергей Рыжиков начал конференцию с рассуждений о судьбоностности стратегических решений и в целом «геополитике» — мысли в моей голове зажили самостоятельной жизнью. Я не стал им мешать и дал волю воображению.

И так, в результате рефлексии оформились следующие мысли:

1. Презентация «Bitrix Communication Suite»  —  как оказываемый в сети сервис и при этом уходящий в тень SaaS. Растущий рынок онлайн-сервисов для совместной работы представляет лакомый кусок. В очень ближайшем будущем мы увидим целую линейку продуктов «1С-Битрикс» для онлайн-работы и предоставляемых за абонентскую плату.

2. Разделение портфеля «1С-Битрикс» на коробочные и онлайновые, развитие онлайн-возможностей продажи и обновление продуктов приведет к новой классификации партнеров:
  • Обслуживающие партнеры. В эту группы попадут большинство из 80% партнеров, численность которых не превышает 5-7 человек. Основными функциям станет настройка и адаптация онлайн-сервисов под нужды конкретного заказчика, техническая поддержка, консультации, работа над контентом и другие виды обслуживания. Выгода очевидна — партнер продает по большей части консалтинг, не неся издержек на трудоемкие процессы разработки и дизайна. Партнеры будут проходить сертификацию по уровню «Поддержки». В итоге «1С-Битрикс» откажется от непосредственной поддержки конечных пользователей своими силами.
  • Партнеры — разработчики сервисов. Эти партнеры будут иметь сертификацию «1С-Битрикс» и выполнять прямую публикацию модулей и сервисов. Численность компаний от 10 до 25 человек. Эта группа уйдет с рынка заказных услуг и полностью сосредоточится на продуктах. Часть из них будет оказывать сервис-хостерные услуги. При этом техподдержка конечного клиента будет на стороне «Обслуживающего партнера».
  • Сервис-хостеры — партнеры, предоставляющие онлайн-сервисы конечному потребителю.
  • Продавцы продукта — другие партнеры, решившие сохранить традиционную модель бизнеса заказных услуг и продажи коробочных продуктов. В основном это большие компании, занимающиеся комплексными ИТ-услугами для серьезных заказчиков.
3. Регулярное присутствие «1С-Битрикс» там, где присутствует «Microsoft». И наоборот. Обмен «любезностями». Активные действия «1С-Битрикс» на платформе .NET. «1С» 23 июня официально объявило о желании выйти на рынок IPO и находится в поиске инвесторов (по информации в сети, Фонд Baring Vostok проводит due diligence «1С»).  «Microsoft» проспала сервисы в сети и OpenSource (в частности, php). Немного воображения и смотрите на экранах ноутбуков — «Bitrix-MS» представляет!»

Отдельно хочу проиллюстрировать мысль о партнерстве — как продукте, озвученной мной на блиц-выступлениях партнеров в конце официальной части конференции. Показанный интерес к картингу и витание в воздухе терминов «поулпозишен», «время круга», «апекс», «внутренний радиус», «квалификация» показали, что партнерам не чужда королева автоспорта — Формула 1.

И так, немного ассоциаций:
  • FIA – регулирующий орган автоспорта, фактически олицетворяет собой отрасль как таковую. В нашем случае — интернет как бизнес.
  • F1 и Берни — коммерческий проект автоспорта. В нашем случае - «1С-Битрикс» и Сергей Рыжиков.
  • Команды F1 – участники гонок. В нашем случае — партнеры «1С-Битрикс» - участники рынка.
  • FOTA – ассоциация автопроизводителей – участников F1, способная влиять на FIA и не только. В нашем случае — увы, пока нет.
В результате: FOTA смогла оказать воздействие на FIA, доказав свою значимость и способность влиять на будущее автоспорта. На сейчас партнеры «1С-Битрикс» представляют заметную долю интернет-рынка (по объемам продаж), но не представляют собой целостную силу, способную непосредственно изменять рынок.

Партнеры! Давайте объединятся и пусть нашими совместными усилиями «этот мир прогнется под нас».
Погорелый Андрей
Мало что понял, но понравилось)
0 Ещё

Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».