PHP-акселератори для 1С-Бітрікс: налаштування OPcache, JIT та APCu
Ви включили OPcache, поставили свіжу версію PHP, а сторінки все одно завантажуються повільно? Типова ситуація: кеш байткоду є, але Бітрікс все ще довго думає на кожному запиті. Ми стикаємося з цим на кожному другому проєкті під час аудиту продуктивності. Проблема часто в неузгодженому налаштуванні трьох механізмів: OPcache (кеш байткоду), JIT-компіляції (PHP 8.0+) та APCu (кеш даних у пам'яті). Правильна комбінація дає приріст швидкості обробки PHP до 20–40%, а іноді й більше — якщо вузьким місцем був CPU.
Чому OPcache не вирішує всі проблеми?
OPcache пришвидшує повторне виконання скриптів — парсинг і компіляція відбуваються один раз. Але Бітрікс — важкий додаток із тисячами файлів і складною логікою. Навіть з OPcache кожен запит витрачає час на ініціалізацію ядра, завантаження модулів, підключення до БД. JIT-компіляція бере на себе наступний крок: перетворює гарячий байткод у машинний код. Теоретичний приріст — до 5 разів, але на практиці для веб-сайтів з I/O-залежністю (БД, диск) JIT дає 5–15%. Однак на сторінках з інтенсивними обчисленнями (наприклад, генерація звітів, обробка кошика) ефект помітний.
Як правильно налаштувати JIT?
Ми рекомендуємо наступну конфігурацію в php.ini:
[opcache] opcache.enable = 1 opcache.memory_consumption = 192 opcache.jit = 1255 opcache.jit_buffer_size = 64M Параметр 1255 — не магія, а код, що вказує режим трасування та рівень оптимізації. Для стабільності можна використовувати tracing:
opcache.jit = tracing opcache.jit_buffer_size = 32M Tracing ефективніший для циклів, але на коротких запитах (типових для Бітрікс) виграш менший. Підбирати режим потрібно під навантажувальний профіль конкретного проєкту.
Встановлення та налаштування APCu
APCu надає сховище ключ-значення у спільній пам'яті. Бітрікс використовує його через власний шар кешування (Bitrix\Main\Data\ManagedCache). Встановлення через PECL:
pecl install apcu echo "extension=apcu.so" > /etc/php.d/40-apcu.ini Конфігурація (файл php.ini або /etc/php.d/40-apcu.ini):
[apcu] apc.enabled = 1 apc.shm_size = 128M apc.ttl = 3600 apc.user_ttl = 3600 apc.gc_ttl = 600 apc.slam_defense = 1 apc.enable_cli = 0 apc.slam_defense = 1 захищає від «dog-pile effect»: при застаріванні кешу лише один процес генерує значення, інші чекають або використовують застарілі дані.
Підключення APCu до кешування Бітрікс
У файлі /bitrix/php_interface/dbconn.php прописуємо:
define("CACHED_b_file", 3600); define("CACHED_b_agent", 3610); define("CACHED_b_lang", 3600); define("CACHED_b_option", 3600); define("CACHED_b_iblock", 3600); define("BX_CACHE_TYPE", "apc"); define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"] . "/"); Після цього Бітрікс зберігатиме кеш в APCu. Інвалідація відбувається за тегами — система записує теги в таблицю b_cache_tag і перевіряє їх при кожному запиті.
Порівняння механізмів кешування
| Механізм | Призначення | Типовий приріст | Споживання пам'яті |
|---|---|---|---|
| OPcache | Кеш байткоду | 30–50% (CPU) | 128–192 MB |
| JIT | Компіляція гарячого коду | 5–15% | 32–64 MB |
| APCu | Кеш даних (результати запитів) | 20–40% (CPU) | 128 MB |
Тонкий момент: декілька сайтів на сервері
APCu живе у shared memory процесу PHP-FPM. Два сайти на одному пулі ділять один простір APCu. Щоб кеш одного не затер кеш іншого, використовуйте різні PHP-FPM пули і задайте унікальний BX_CACHE_SID, що включає $_SERVER["DOCUMENT_ROOT"] (як у прикладі вище).
Що входить у налаштування під ключ
- Аудит поточної конфігурації PHP та сервера
- Визначення оптимальних параметрів OPcache, JIT, APCu під навантажувальний профіль
- Встановлення та налаштування розширень
- Тестування продуктивності за допомогою
abабо JMeter - Навчання команди основам моніторингу
- Письмовий звіт із рекомендаціями щодо подальшої оптимізації
Часті помилки при налаштуванні
- Забувають вимикати OPcache у режимі розробки — отримують «старий» код
- Встановлюють занадто малий
opcache.memory_consumption— кеш витискається - Не перевіряють, що APCu доступний з PHP (функція
apcu_enabled()повертає false) - Використовують Swoole або FrankenPHP без адаптації коду — це призводить до витоків пам'яті та нестабільності
Тестування результату
Вимірюємо до та після утилітою ab:
ab -n 1000 -c 10 http://site.ru/catalog/ | grep "Requests per second" Очікуваний приріст на типовій сторінці каталогу — 20–40%. Якщо приросту немає, ймовірно, вузьке місце в БД, а не в PHP.
Наш досвід: понад 50 проєктів з оптимізації Бітрікс, середнє прискорення — 30%. Гарантуємо прозорість налаштувань і навчання вашої команди. Зв'яжіться з нами для попередньої оцінки — ми проаналізуємо поточну конфігурацію та запропонуємо план робіт.
Примітка: Для глибокої оптимізації також варто розглянути кешування на рівні веб-сервера (nginx fastcgi cache), використання CDN та налаштування черг для фонових завдань (агенти Бітрікс). Докладніше про кешування в офіційній документації розробника Бітрікс.
Чек-лист налаштування акселераторів
- [ ] Перевірити версію PHP (>=8.0 для JIT)
- [ ] Встановити розширення OPcache (вбудовано) та APCu
- [ ] Налаштувати php.ini згідно з рекомендаціями
- [ ] Перевірити через phpinfo() що OPcache і APCu активні
- [ ] Виконати навантажувальне тестування до та після







