
В рамках одной из внутренних задач коллега занимался исследованием того, как 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 считает не производительность системы, а обратную величину среднего времени генерации страницы, да ещё и на маленькой выборке.
Поэтому:
Сравнивать разные сервера по этой метрике — ненадёжно
Любые фоновые процессы могут «уронить» попугаев
Повышение числа попугаев не всегда отражает реальный рост производительности
Если хотите объективную оценку — используйте внешние инструменты: профайлеры, нагрузочные тесты, мониторинг ресурсов. А попугаев оставьте для галочки.