Как устранить частые вылеты и ошибку Сеанс отсутствует или удален при публикации 1С на РЕД ОС 8 и Apache

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет IT и автоматизация бизнеса
← На главную

При работе с файловыми информационными базами 1С:Предприятие, опубликованными на веб-сервере Apache в среде РЕД ОС 8 (или других RPM-ориентированных дистрибутивах Linux), администраторы часто сталкиваются с нестабильностью работы. Пользователи тонких клиентов получают ошибку "Сеанс отсутствует или удален ID=...", а в консоли сервера наблюдаются аварийные завершения процессов. Рассмотрим подробно, как диагностировать и устранить причины этой проблемы, начиная от настройки прав доступа и заканчивая глубокой оптимизацией параметров операционной системы.

Анализируем логи и выявляем влияние SELinux

Первым делом проанализируем системный журнал journalctl и лог аудита. В логах часто встречаются записи вида AVC avc: denied { read } for pid=... comm="httpd" name="1Cv8Temp". Это явный признак того, что система безопасности SELinux блокирует доступ веб-сервера к временным файлам 1С.

Даже если SELinux переведен в режим Permissive, система продолжает фиксировать нарушения, а в некоторых конфигурациях это может приводить к микрозадержкам при работе с блокировками файловой базы. Проверим текущий статус командой:

sestatus

Если режим Enforcing, попробуем временно переключить его для проверки гипотезы:

sudo setenforce 0

Разберем, как создать корректирующую политику, чтобы не отключать безопасность полностью. Выясним причину отказа и сгенерируем модуль политики с помощью утилиты audit2allow:


sudo ausearch -m avc -c httpd -ts recent --raw | sudo audit2allow -M my_1c_apache
sudo semodule -i my_1c_apache.pp

Также крайне важно установить правильный контекст безопасности на каталог с информационной базой и временными файлами. Для Apache это должен быть httpd_sys_rw_content_t, разрешающий чтение и запись:


sudo chcon -R -t httpd_sys_rw_content_t /путь/к/вашей/базе
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/путь/к/вашей/базе(/.*)?"
sudo restorecon -Rv /путь/к/вашей/базе

Исправляем ошибки Fontconfig и кэша шрифтов

Проанализируем error_log веб-сервера Apache. Часто там встречается сообщение Fontconfig error: No writable cache directories. Платформа 1С при формировании печатных форм и отрисовке интерфейса активно использует шрифты. Если у пользователя apache нет прав на запись в кэш, процесс может упасть.

Выясним домашнюю директорию пользователя, под которым работает сервер:

grep apache /etc/passwd

Создадим необходимые каталоги и назначим права, чтобы система могла корректно кэшировать шрифты:


sudo mkdir -p /usr/share/httpd/.cache/fontconfig
sudo chown -R apache:apache /usr/share/httpd/.cache

Дополнительно в файле конфигурации /etc/sysconfig/httpd можно явно указать переменную окружения:

XDG_CACHE_HOME=/usr/share/httpd/.cache

Настраиваем изоляцию временных файлов в Systemd

В РЕД ОС 8 служба Apache по умолчанию может использовать изолированный каталог /tmp. Это регулируется параметром PrivateTmp. Для файловой 1С это критично, так как механизмы блокировок LFL (Local File Locks) могут работать некорректно, если разные потоки или процессы по-разному видят временные директории.

Отредактируем конфигурацию службы:

sudo systemctl edit httpd.service

В открывшемся окне добавим секцию:


[Service]
PrivateTmp=false

После этого выполним перечитывание конфигурации и перезапуск:


sudo systemctl daemon-reload
sudo systemctl restart httpd

Оптимизируем модуль Apache MPM: Prefork против Event

Современные веб-серверы по умолчанию используют mpm_event, который работает с потоками. Однако библиотека расширения 1С wsap24.so для работы с файловыми базами исторически стабильнее ведет себя в многопроцессном режиме mpm_prefork. В режиме event сбой в одном потоке может привести к аннулированию всей группы сеансов.

Переключим режим работы. Для этого в файле /etc/httpd/conf.modules.d/00-mpm.conf закомментируем строку с event и раскомментируем prefork:


# LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Для режима prefork настроим лимиты, чтобы сервер не "задохнулся" при росте числа пользователей. Добавим или изменим параметры в основном конфиге:


<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      150
    MaxConnectionsPerChild   0
</IfModule>

Увеличиваем лимиты открытых файлов (ulimit)

Файловая 1С открывает огромное количество мелких файлов (индексы, временные таблицы, блокировки). Стандартный лимит в 1024 файла для пользователя apache часто оказывается недостаточным, что приводит к внезапному обрыву соединения.

Проанализируем текущий лимит:

sudo -u apache bash -c "ulimit -n"

Чтобы увеличить его, отредактируем файл /etc/security/limits.conf, добавив строки:


apache soft nofile 65536
apache hard nofile 65536

Тонкая настройка файла публикации default.vrd

Проанализируем содержимое файла default.vrd, который находится в каталоге публикации базы. Для стабильной работы в Linux-среде стоит обратить внимание на параметры пула соединений. Рассмотрим пример конфигурации:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
        base="/BaseName"
        ib="File="/var/www/1c/base";">
    <httpServices>
        <service name="MobileApp" rootUrl="mobile" enable="true"/>
    </httpServices>
    <standardOdata enable="true"/>
    <pool capacity="10" 
          maxAge="1800" 
          timeout="5"/>
</point>

Здесь параметр timeout определяет время ожидания в пуле. Для файловых баз не рекомендуется устанавливать слишком большие значения, так как это может блокировать доступ другим пользователям при зависании одного сеанса.

Проверка работы системного OOM Killer

Если сервер располагает небольшим объемом оперативной памяти, сеансы могут вылетать из-за нехватки ресурсов. В Linux существует механизм OOM Killer, который принудительно завершает самые "прожорливые" процессы при дефиците памяти. Проверим, не становился ли httpd жертвой этого механизма:

dmesg | grep -i oom

Если вы видите сообщения об уничтожении процессов httpd, необходимо увеличить объем оперативной памяти сервера или настроить Swap. Также убедитесь, что в базе не запускаются тяжелые регламентные задания в моменты пиковой нагрузки пользователей.

Подводя итог, отметим, что стабильная работа 1С на Apache в РЕД ОС 8 достигается только комплексным подходом: от настройки прав в SELinux до смены модели работы самого веб-сервера. Последовательное выполнение этих шагов позволит избавиться от большинства проблем с "исчезающими" сеансами.

← На главную