Перехват медленных хитов в Битрикс и их анализ в Xhprof

08.06.2017
Написал такую маленькую, но очень полезную штуку для отлова всех тормозных страниц на сайте.
На сервере должен быть установлен и настроен Xhprof. Как это сделать - погуглите :) Ну или здесь почитайте.
Скрипты интерфейса Xhprof у меня лежат в директории /xhprof-0.9.4/ в корне сайта. Можете вынести в свою директорию или вообще в отдельный домен можно это все разместить, чтобы все секьюрно и правильно было.
Вот, собственно, код который размещаем в /bitrix/php_interface/dbconn.php:
define('ENABLE_XHPROF',true);
if(ENABLE_XHPROF && function_exists('xhprof_enable'))
{
   global $getMicrotime;
   $getMicrotime = function(){
      list($usec,$sec) = explode(' ', microtime());
      return doubleval($usec) + doubleval($sec);
   };
   xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
   $GLOBALS['xhprof_start_time'] = $getMicrotime();
   register_shutdown_function(function() {
      global $getMicrotime;
      $xhprof_data = xhprof_disable();
      $tStart = $GLOBALS['xhprof_start_time'];
      $diffTime = $getMicrotime()-$tStart;
      if($diffTime > 1)
      {
         $timeF = round($diffTime, 3) . "";
         $timeF = str_replace('.', '-', $timeF);
         $client = $_SERVER['SHELL']?'shell':'http';
         $uri = $_SERVER['REQUEST_URI']?$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']:$_SERVER['PHP_SELF'];
         $uri = explode('/', $uri);
         $uri = implode('|',$uri);
         $xhprofCode = $client.'__'.$uri.'__'.$timeF.'s';
         $xhprofCode = preg_replace('#[^a-z0-9_|-]#i', '_', $xhprofCode);
         $pathXhprof = $_SERVER['DOCUMENT_ROOT'].'/xhprof-0.9.4';
         include_once $pathXhprof.'/xhprof_lib/utils/xhprof_lib.php';
         include_once $pathXhprof.'/xhprof_lib/utils/xhprof_runs.php';
         $xhprof_runs = new XHProfRuns_Default();
         $run_id = $xhprof_runs->save_run($xhprof_data, $xhprofCode);
      }
   });
}
Данный код отлавливает все хиты, работающие больше 1 сек, и заносит их в лог xhprof. В результате в логах Xhprof'а увидим вот такие записи:
Дааа, работы капец как много))
В имени каждого файла отмечается тип запроса к скрипту (http или shell), путь до скрипта и время работы скрипта.
Затем, попивая чай/кофе, можно спокойно проанализировать какие участки кода вам нужно доработать по вот таким наглядным графам вызова функций:

Еще один момент. Чтобы не было вот такого

нужно установить в PHP настройку mbstring.func_overload=0. Соответственно для Битрикса это будет плохо, поэтому интерфейс просмотра логов xhprof желательно вынести на отдельный хост.

Всё. Всем удачной охоты :)

Заметки по интеграции сайта на Битриксе с 1С

04.02.2016

Про DDoS

23.01.2016
Тут буду собирать информацию по методам DDoS-атак и защиты от них.

Особенности работы с BitrixVM

06.11.2015
Если в MySQL меняете пароль для root-пользователя, то его нужно так же прописать в файлах:
/etc/ansible/group_vars/bitrix-mysql 
/etc/ansible/group_vars/bitrix-web 
/root/.my.cnf

Настройки отправки email для всех сайтов лежат в файле /home/bitrix/.msmtprc. Без настройки параметров msmtp для конкретного сайта почта на этом сайте может не отправляться.

Поднимаем Битрикс на VDS на связке CentOS 7, nginx, php-fpm, MariaDB

23.10.2015
Заметка будет постепенно пополняться новыми деталями и корректироваться.

Работа со списком задач cron

16.08.2015
Посмотреть все выполняемые задачи пользователя "userLogin":
crontab -u userLogin -l
Чтобы отредактировать файл задач crontab сначала переключим редактор с vi на более удобный mcedit:
export EDITOR=mcedit
Затем отредактируем задачи cron, которые запускаются под пользователем "userLogin":
crontab -u userLogin -e

Установка memcached в BitrixVM и настройка работы в Битрикс

07.07.2015
Устанавливаем memcached на сервер. Так как BitrixVM основан на CentOS, то команда установки выглядит так:
yum -y install memcached
В файле /etc/sysconfig/memcached заменяем строку OPTIONS на:
OPTIONS="-l 127.0.0.1"
Добавляем memcached в автозагрузку:
service memcached start
chkconfig memcached on
Ставим библиотеку PHP-memcache:
yum -y install php-pecl-memcache
Последнее возможно не понадобится, т.к. в виртуальной машине Битрикс этот модуль есть по-умолчанию.
С установкой всё. Можно еще перезапустить apache.

Настройка Битрикса на использование кеширования в memcache сводится к редактированию файла /bitrix/.settings.php. В массиве настроек нужно прописать следующие параметры кеширования:
'cache' => array(
    'value' => array (
        'type' => 'memcache',
        'sid' => $_SERVER["DOCUMENT_ROOT"]."#site01",
        'memcache' => array(
            'host' => '127.0.0.1',
            'port' => '11211',
        ),
    ),
    'readonly' => false,
),
Всё. Теперь в панели производительности Битрикс (http://site.com/bitrix/admin/perfmon_panel.php) должны увидеть:
Записи 1 - 10 из 34
Начало | Пред. | 1 2 3 4 | След. | Конец