
В рамках одной из внутренних задач коллега занимался исследованием того, как Bitrix измеряет общую производительность системы. Пользователи часто ссылаются на эти цифры как на аргумент в пользу «медленных серверов». Мы решили разобраться, что стоит за этой метрикой на самом деле. Эта небольшая статья — адаптированный вариант проведённого исследования.
Что под капотом
В административной панели Bitrix есть кнопка «Тестировать конфигурацию».

При её нажатии запускается набор тестов — от CPU и файловой системы до базы данных и сессий. Каждый тест выполняется по отдельному URL с соответствующим параметром:
url для сбора "Среднее время отклика" test=Y url для сбора остальных параметров test=cpu test=files test=mail test=session test=php test=db_read test=ddb_update test=db_insert test=session&last=Y Остальные параметры считаются функциями ниже и еще некоторыми другими grep 'public static function' modules/perfmon/classes/general/measure.php public static function GetPHPCPUMark() public static function GetPHPFilesMark() public static function GetPHPMailMark() public static function GetDBMark($type) public static function GetAccelerator() public static function GetAllAccelerators() public static function unformat($str)
Отдельно от всего этого вызывается test=Y, и именно он единственный влияет на итоговую оценку, которая выводится в строке «Конфигурация» — то самое число «попугаев».
Что измеряет test=Y
Этот параметр запускает обычную PHP-страницу Bitrix без искусственной нагрузки. Она выполняет базовую работу: несколько файловых операций, пара простых SQL-запросов и стандартные вызовы ядра Bitrix.

Процесс замера устроен так: на странице установлен хук OnAfterEpilog, который фиксирует время выполнения скрипта через microtime() и сохраняет его в сессии:
AddEventHandler('main', 'OnAfterEpilog', function() { $main_exec_time = round(microtime(true) - START_EXEC_TIME, 4); $_SESSION['PERFMON_TIMES'][] = $main_exec_time; });
Bitrix делает 9 последовательных запросов с test=Y и собирает 9 значений времени выполнения.
Пример результата:
["PERFMON_TIMES"] => array( 0 => 0.0452, 1 => 0.0452, 2 => 0.0479, ... 8 => 0.0389 )
Как из времени получаются «попугаи»
Здесь всё просто: количество измерений делится на сумму времени всех запусков. Формула:
$result = number_format( count($_SESSION['PERFMON_TIMES']) / array_sum($_SESSION['PERFMON_TIMES']), 2, '.', ' ' );
Если в среднем страница генерируется за 0.09 секунды, результат будет около 100 попугаев. Если за 0.15 — уже 60. Функция обратная, и это важный момент.

Проблема такой метрики
Главная проблема — гиперчувствительность этой метрики при малом времени отклика. Например:
-
На CPU AMD EPYC средняя генерация страницы = 0.09 сек → 100 попугаев
-
Незначительная нагрузка добавляет 2–3 мс → результат падает до 83
-
При увеличении времени до 0.15 сек → остаётся 60 попугаев
На медленных серверах таких скачков не видно — изменения в миллисекунды тонут в общем времени. А вот на современных машинах даже минимальные флуктуации — будь то активность крона или фоновые процессы — могут резко сбросить оценку производительности без заметного эффекта для пользователя сайта.
Эпилог
Метрика производительности в Bitrix не учитывает CPU, файловую подсистему или поведение БД напрямую. Все параметры кроме test=Y служат только для информации и не влияют на итоговое число попугаев.
Формально, Bitrix считает не производительность системы, а обратную величину среднего времени генерации страницы, да ещё и на маленькой выборке.
Поэтому:
-
Сравнивать разные сервера по этой метрике — ненадёжно
-
Любые фоновые процессы могут «уронить» попугаев
-
Повышение числа попугаев не всегда отражает реальный рост производительности
Если хотите объективную оценку — используйте внешние инструменты: профайлеры, нагрузочные тесты, мониторинг ресурсов. А попугаев оставьте для галочки.
ссылка на оригинал статьи https://habr.com/ru/articles/934836/
Добавить комментарий