pcre.recursion_limit в Битрикс на CentOS 7

В CentOS 7+ и RH 7+ сервисы (в их числе и нужный нам httpd) теперь запускаются не скриптами старта, а именно как сервисы. Поэтому традиционная проблема Битрикс со значением pcre.recursion_limit требует теперь немного другого подхода.

Если для pcre.recursion_limit выставлено неверное значение, то PHP будет падать и тянуть за собой httpd. Собственно подробное описание ошибки из модуля «Проверка системы» Битрикс:

Параметр pcre.recursion_limit по умолчанию имеет значение 100000. Если он превышает системный размер стека (обычно 8 Мб), то PHP падает с ошибкой Segmentation fault при выполнении сложных регулярных выражений.

Решение проблемы в CentOS/RedHat 6

На всякий, приведу решение для старых версий. В 6-ке надо было в скрипт запуска httpd /etc/rc.d/init.d/httpd в функцию start() надо было дописать строку ulimit -s unlimited. Например так:

Решение для CentOS/Redhat 7+

Создаем папку откуда будут считываться дополнительные конфигурационные файлы для сервиса httpd:

Внутри создаем файл, например lstack.conf и в него пишем:

Перегружаем демона и сервис:

Существенное замечание

Снять ограничение на лимит стека, это рекомендация Битрикс. Скажем прямо не самая удачная, т.к. вы можете решив одну проблему заполучить проблему с постоянной нехваткой ОЗУ. И apache будет падать уже по этой причине. Поэтому лучше подобрать верхнее граничное решение, которое будет устраивать Битрикс. Вычислить его достаточно просто:

Обычно кеш равен 8 Мбайт, убедимся:

Соответственно, нам нужно немного больше, пусть это будет 9 Мбайт.

1024*1024*9 = 9 437 184 байт

пишем в наш файл:

Проверяем в «Проверке системы» — должно все быть в порядке. Обычно, я пишу 10 000 000, для простоты запоминания числа.

комментария 2
  • Дмитрий

    Вот только значение не infinity, а по старинке unlimited в моем случае сработало.
    Вообще там должно быть в байтах.

    Ответить
  • hc

    Читайте внимательно документацию: Use the string infinity to configure no limit on a specific resource.
    unlimited для systemd не работает/не применяется.

    Ответить
Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *