Свеже-варимое ядро 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 и разместил в папке проекта.
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 в картинках:
«Успеть за будущим!» Даже название клуба, где прошла конференция, словно кричало об этом — «Солярис». Как известно, одноименная книга Лема рассказывает о непростых отношениях мира людей и разумного океана, в котором без труда можно увидеть интернет.
И когда Сергей Рыжиков начал конференцию с рассуждений о судьбоностности стратегических решений и в целом «геополитике» — мысли в моей голове зажили самостоятельной жизнью. Я не стал им мешать и дал волю воображению.
И так, в результате рефлексии оформились следующие мысли:
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С-Битрикс» представляют заметную долю интернет-рынка (по объемам продаж), но не представляют собой целостную силу, способную непосредственно изменять рынок.
Партнеры! Давайте объединятся и пусть нашими совместными усилиями «этот мир прогнется под нас».
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».