Значения PHP по умолчанию рассчитаны на скромный сайт. Битрикс к таким не относится: админка потребляет много памяти, обмен с 1С работает долго, а формы настроек передают сотни полей за раз.
Разберём параметры, которые приходится менять почти всегда, и отдельно — OPcache: расширение, дающее заметный прирост скорости практически бесплатно.
Основные параметры
| Параметр | По умолчанию | Для Битрикс | Что ломается при нехватке |
|---|---|---|---|
memory_limit |
128M | 256M и выше | Белый экран на каталоге и в админке |
max_execution_time |
30 | 300 | Обрыв импорта и обмена |
max_input_time |
60 | 300 | Обрыв загрузки больших файлов |
upload_max_filesize |
2M | 64M | Не загружаются изображения и архивы |
post_max_size |
8M | 64M | То же, обрезается тело запроса |
max_input_vars |
1000 | 10000 | Формы админки сохраняются частично |
Три уточнения к таблице.
post_max_size должен быть не меньше upload_max_filesize.
Иначе файл нужного размера всё равно не пройдёт: ограничение на тело запроса
сработает раньше.
max_input_vars — коварный параметр. При превышении лимита
PHP молча отбрасывает лишние поля. Внешне это выглядит так: настройки инфоблока
с сотней свойств сохранились, но часть значений пропала. Ошибки при этом нет.
Нехватка памяти проявляется как белый экран. Диагностика описана в статье Белый экран в Битрикс, а сама ошибка — в материале Allowed memory size exhausted.
Где менять
| Способ | Когда подходит |
|---|---|
php.ini | Свой сервер, глобальные значения |
| Пул PHP-FPM | Разные настройки для разных сайтов |
.htaccess | Apache или связка Nginx + Apache |
| Панель хостинга | Виртуальный хостинг |
ini_set() в коде | Точечно для одной операции |
На чистом Nginx с PHP-FPM директивы в .htaccess не работают —
это регулярный источник недоумения при переезде с Apache.
Проверить действующие значения проще всего из административной части — там же, где проверка системы. Из кода:
<?php
echo ini_get('memory_limit');
echo ini_get('max_execution_time');
echo ini_get('max_input_vars');
Нужна помощь с Битрикс?
OPcache
PHP компилирует код при каждом запросе. OPcache сохраняет результат компиляции в памяти, и при следующем обращении этот шаг пропускается.
Для Битрикс с его тысячами файлов ядра эффект особенно заметен: время генерации страницы сокращается ощутимо, а настройка занимает пять минут.
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 100000
opcache.revalidate_freq = 60
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.fast_shutdown = 1
Разбор ключевых параметров:
| Параметр | Смысл |
|---|---|
memory_consumption |
Память под кеш. Для Битрикс 256 МБ — разумный минимум |
max_accelerated_files |
Сколько файлов кешировать. У Битрикс их десятки тысяч |
validate_timestamps |
Проверять ли изменения файлов |
revalidate_freq |
Как часто проверять, в секундах |
save_comments |
Сохранять комментарии — Битрикс их использует |
Параметр save_comments обязателен: часть механизмов Битрикс читает
аннотации в комментариях. При его отключении появляются странные сбои,
причину которых искать очень трудно.
Проверка изменений файлов
Значение validate_timestamps = 1 означает, что PHP периодически
сверяет время изменения файлов. Отключение даёт дополнительный прирост,
но тогда любое изменение кода потребует перезапуска PHP-FPM.
Практический вывод: на боевом сервере со стабильным кодом отключение оправдано, на сервере, где ведётся разработка, — категорически нет. Правки просто не будут применяться, а причина неочевидна.
Мало памяти под кеш
Если выделенной памяти не хватает, OPcache начинает вытеснять файлы, и прирост исчезает. Признак — низкий процент попаданий в кеш. Для Битрикс с большим числом файлов 256 МБ обычно достаточно, для крупных проектов с множеством модулей — стоит увеличить.
Настройки пула PHP-FPM
Отдельно от самого PHP настраивается количество рабочих процессов:
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
Число max_children считают из доступной памяти: делят её на средний
расход одного процесса. Если поставить слишком много, при наплыве посетителей
сервер уйдёт в своп и станет медленнее, чем при меньшем значении.
Параметр max_requests перезапускает процесс после указанного числа
запросов — это страхует от постепенного роста потребления памяти.
Проверка результата
- Убедитесь, что новые значения применились.
- Запустите проверку системы — она подсветит несоответствия.
- Замерьте время генерации страницы до и после включения OPcache.
- Сохраните большую форму настроек инфоблока и проверьте, что всё сохранилось.
- Загрузите крупный файл через админку.
- Запустите обмен с 1С и убедитесь, что он проходит целиком.
Сравнение времени генерации удобно делать монитором производительности — он разобран в статье Монитор производительности Битрикс.
Частые ошибки
- OPcache не включён. Заметное ускорение доступно бесплатно и не используется.
-
save_commentsотключён. Часть механизмов Битрикс ломается непредсказуемым образом. -
validate_timestamps = 0на рабочем сервере. Правки кода не применяются, разработчик ищет причину часами. -
post_max_sizeменьшеupload_max_filesize. Загрузка файлов не работает несмотря на увеличенный лимит. -
Низкий
max_input_vars. Настройки сохраняются частично, без единого сообщения об ошибке. -
Правки в
.htaccessна Nginx. Не применяются вообще. -
Слишком большой
max_children. Сервер уходит в своп под нагрузкой.
Итог
Для сайта на 1С-Битрикс шесть параметров PHP почти всегда требуют увеличения
относительно значений по умолчанию, причём max_input_vars опаснее
остальных: при его нехватке данные теряются молча.
OPcache — самая выгодная настройка по соотношению усилий и результата.
Два условия обязательны: save_comments должен быть включён,
а validate_timestamps нельзя отключать на сервере, где кто-то
правит код.
