bitrix-code
Производительность

Коробочная версия Битрикс24: как тюнить производительность

Алексей Завьялов, Tech Lead20 мин

За 8 лет мы работали с инсталляциями от 50 до 10 000 пользователей. Вот самые частые проблемы, которые убивают производительность коробки, и конкретные способы их решить.

1. PHP opcache не настроен

Типичная ошибка: дефолтные настройки opcache. Для production нужны:

opcache.memory_consumption=512
opcache.max_accelerated_files=30000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.enable=1

После этих настроек скорость выполнения PHP вырастает в 2–3 раза.

2. Slow query в MySQL

Включите slow_query_log и посмотрите запросы длиннее 1 секунды. Обычно проблема в недостающих индексах. Особенно в кастомных модулях, где забывают про индексы.

3. MySQL не настроен под ваш объём данных

innodb_buffer_pool_size по умолчанию 128MB. Для продакшена нужно 50-70% от RAM сервера. При 32GB RAM — минимум 20GB. Это кардинально ускоряет чтение.

4. Живая лента засорена событиями

Каждое действие в CRM создаёт событие в ленте. За годы работы лента вырастает до сотен миллионов записей. Чистка через штатный функционал или прямо в БД.

5. Много записей в агенте

Регулярные агенты могут накопиться в тысячах. Одни выполняются, другие висят. Проверьте b_agents, отключите ненужные.

6. Sphinx не используется для поиска

Поиск в Битрикс24 должен идти через Sphinx/Manticore, а не по MySQL LIKE. При больших объёмах данных разница в скорости — в сотни раз.

7. Redis для кеширования — обязателен

На среднем и крупном объёме Redis обязателен как кеш. Memcached отходит в прошлое. Настроить через /bitrix/.settings.php раздел cache.

8. FastCGI / PHP-FPM пулы недостаточны

При 500 активных пользователях pm.max_children = 50 — мало. Нужно 100–200 в зависимости от RAM. Формула: RAM для PHP / средний размер процесса PHP.

9. nginx без кеширования статики

Статические файлы должны кешироваться nginx с expires 1y на /upload/ и /bitrix/js/, /bitrix/css/. И не лишним будет gzip/brotli сжатие.

10. Мониторинг отсутствует

Без метрик оптимизировать вслепую бессмысленно. Поставьте Prometheus + Grafana, смотрите p95 ответа, RPS, ошибки. Разберитесь, где именно у вас узкое место.