Как устранить зависания и медленную работу 1С в файловом режиме при совместном использовании веб-сервера и Samba на Linux?

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

Рассмотрим популярный сценарий развертывания небольшой информационной базы 1С (например, 1С:Управление нашей фирмой) на сервере под управлением Linux. Для обеспечения доступа пользователей база публикуется на веб-сервере Apache, а для выполнения административных задач и обновления конфигурации каталог с файлом базы 1Cv8.1CD расшаривается по локальной сети через службу Samba. В подобной конфигурации системные администраторы часто сталкиваются с критическим падением производительности: открытие Конфигуратора с Windows-компьютера занимает десятки минут, а тонкий клиент через веб-сервер работает со значительными задержками, в то время как браузер функционирует относительно стабильно.

Проанализируем причины возникновения этой проблемы и разберем по шагам проверенные способы оптимизации и альтернативные варианты организации работы.

Выясним причины конфликта одновременного доступа к файлу базы данных

Основная причина медленной работы Конфигуратора кроется в фундаментальном конфликте механизмов файловых блокировок между ядром Linux и сетевым протоколом SMB:

  1. Конфликт системных и сетевых блокировок. Модуль расширения веб-сервера 1С (библиотека wsap24.so) запущен локально на сервере Linux и работает с файлом 1Cv8.1CD напрямую через вызовы операционной системы (POSIX fcntl). В это же время Конфигуратор, запущенный с рабочей станции Windows через сетевой диск, обращается к файлу через протокол SMB. Сервис Samba вынужден транслировать сетевые блокировки Windows в системные вызовы Linux. При параллельном доступе возникают взаимные ожидания блокировок ввода-вывода, что приводит к зависанию как Конфигуратора, так и веб-сервера.
  2. Отключение оппортунистических блокировок (oplocks). В типовых конфигурационных файлах smb.conf для 1С нередко принудительно отключают кэширование параметрами oplocks = no и level2 oplocks = no во избежание повреждения таблиц базы. Однако Конфигуратор при старте выполняет считывание сотен тысяч мелких фрагментов метаданных. При выключенных oplocks клиентская машина под Windows не кэширует структуру метаданных локально, и каждое обращение превращается в отдельный сетевой синхронный запрос к диску сервера.
  3. Постоянное удержание дескриптора веб-сервером. Процессы Apache держат файл базы открытым даже при отсутствии активных пользовательских сессий, что мешает Конфигуратору получить эксклюзивный доступ к таблицам метаданных.

Выясним причины медленной работы тонкого клиента через Apache

Если веб-клиент в обычном браузере работает стабильно, а тонкий клиент по адресу публикации http://server/Base1C тормозит, обратим внимание на следующие сетевые факторы:

  1. Отсутствие сжатия бинарного трафика. Веб-клиент получает оптимизированный для браузера код и разметку, тогда как тонкий клиент 1С непрерывно обменивается с модулем веб-сервера сериализованными бинарными и XML-пакетами. Если в Apache не включено сжатие данных с помощью модуля mod_deflate для MIME-типа application/octet-stream, объем передаваемого трафика возрастает в несколько раз.
  2. Отключение постоянных соединений KeepAlive. Тонкий клиент генерирует серию частых коротких HTTP-запросов. Если параметр KeepAlive в конфигурации веб-сервера отключен или тайм-аут занижен, на каждый запрос тратится время на повторное открытие TCP-соединения.
  3. Задержки разрешения имен и протокол IPv6. Тонкий клиент под Windows часто пытается первоначально выполнить подключение по протоколу IPv6. Если на стороне Linux-сервера стек IPv6 не настроен должным образом, клиент ожидает истечения таймаута перед переходом на IPv4.

Решение 1: Запуск Конфигуратора непосредственно на сервере Linux через XRDP

Наиболее надежный способ исключить сетевые накладные расходы Samba и конфликты блокировок — выполнять административные действия локально на сервере, где расположен файл базы данных. Для этого развернем на сервере графическую оболочку и сервер терминалов XRDP:

  1. Установим графическое окружение (например, XFCE или GNOME) и пакет xrdp на Linux-сервер.
  2. Установим платформу 1С:Предприятие для Linux (клиентские пакеты x86_64).
  3. Подключимся с рабочей станции администратора по стандартному протоколу RDP к Linux-серверу и запустим Конфигуратор локально. В этом случае Конфигуратор работает с файлом базы /pub/Base1C/1Cv8.1CD напрямую через локальную файловую систему, что обеспечивает максимальную скорость открытия метаданных и исключает сетевые задержки Samba.

Решение 2: Переход на администрирование базы через SSH в пакетном режиме

Для большинства типовых операций (создание резервных копий, тестирование и исправление, накат обновлений конфигурации) графический интерфейс Конфигуратора не требуется. Разберем выполнение этих задач через командную строку Linux по SSH с использованием пакетного режима запуска толстого клиента 1С:

  1. Перед выполнением регламентных операций обязательно временно остановим веб-сервер, чтобы освободить файл базы данных: sudo systemctl stop httpd
  2. Выполним выгрузку информационной базы в файл резервной копии:
    
    /opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /DumpIB "/pub/backups/base_backup.dt"
    
  3. Выполним обновление конфигурации из заранее подготовленного файла поставки .cf:
    
    /opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /UpdateCfg "/pub/updates/update.cf" /UpdateDBCfg
    
  4. Запустим тестирование и исправление структуры таблиц:
    
    /opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity
    
  5. После завершения обслуживания запустим веб-сервер обратно: sudo systemctl start httpd

Решение 3: Оптимизация публикации базы на веб-сервере Apache

Для ускорения работы тонкого клиента отредактируем конфигурационный файл веб-сервера (в зависимости от дистрибутива это /etc/httpd/conf/httpd.conf или /etc/apache2/apache2.conf).

Проверим и настроим параметры постоянных TCP-соединений:


KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

Включим сжатие исходящего трафика для веб-расширения 1С, добавив директивы модуля mod_deflate:


<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE application/octet-stream
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>

Публикацию базы осуществляем штатной утилитой webinst, указывая прямой локальный путь к каталогу с базой, как в исходном примере:


./webinst -apache24 -wsdir Base1C -dir '/var/www/html/Base1C/' -connStr "File=/pub/Base1C;" -confPath /etc/httpd/conf/httpd.conf

Решение 4: Корректировка параметров Samba при вынужденной работе через сеть

Если отказаться от запуска Конфигуратора через сетевой диск невозможно, приведем секцию общего ресурса в /etc/samba/smb.conf к виду, оптимизированному под современные версии SMB и минимальные сетевые задержки:


[Base1C]
    comment = 1C Enterprise Base
    path = /pub/Base1C
    read only = no
    browsable = no
    guest ok = no
    valid users = sambauser, @sambagroup
    create mask = 0777
    directory mask = 0777
    force create mode = 0777
    force directory mode = 0777

    # Оптимизация блокировок и протокола
    locking = yes
    strict locking = no
    posix locking = yes
    oplocks = yes
    level2 oplocks = yes
    smb2 leases = yes

В глобальную секцию [global] добавим директивы оптимизации сетевого сокета и ограничение устаревших протоколов:


[global]
    min protocol = SMB2
    socket options = TCP_NODELAY IPTOS_LOWDELAY

Важное предостережение: Включение параметров oplocks = yes при одновременной работе пользователей через веб-сервер Apache сопряжено с риском разрушения внутренней структуры файла 1Cv8.1CD. Настоятельно рекомендуется перед любым сеансом конфигурирования через сетевой диск останавливать службу httpd и запускать ее только после закрытия Конфигуратора.

← На главную