Рассмотрим популярный сценарий развертывания небольшой информационной базы 1С (например, 1С:Управление нашей фирмой) на сервере под управлением Linux. Для обеспечения доступа пользователей база публикуется на веб-сервере Apache, а для выполнения административных задач и обновления конфигурации каталог с файлом базы 1Cv8.1CD расшаривается по локальной сети через службу Samba. В подобной конфигурации системные администраторы часто сталкиваются с критическим падением производительности: открытие Конфигуратора с Windows-компьютера занимает десятки минут, а тонкий клиент через веб-сервер работает со значительными задержками, в то время как браузер функционирует относительно стабильно.
Проанализируем причины возникновения этой проблемы и разберем по шагам проверенные способы оптимизации и альтернативные варианты организации работы.
Основная причина медленной работы Конфигуратора кроется в фундаментальном конфликте механизмов файловых блокировок между ядром Linux и сетевым протоколом SMB:
wsap24.so) запущен локально на сервере Linux и работает с файлом 1Cv8.1CD напрямую через вызовы операционной системы (POSIX fcntl). В это же время Конфигуратор, запущенный с рабочей станции Windows через сетевой диск, обращается к файлу через протокол SMB. Сервис Samba вынужден транслировать сетевые блокировки Windows в системные вызовы Linux. При параллельном доступе возникают взаимные ожидания блокировок ввода-вывода, что приводит к зависанию как Конфигуратора, так и веб-сервера.smb.conf для 1С нередко принудительно отключают кэширование параметрами oplocks = no и level2 oplocks = no во избежание повреждения таблиц базы. Однако Конфигуратор при старте выполняет считывание сотен тысяч мелких фрагментов метаданных. При выключенных oplocks клиентская машина под Windows не кэширует структуру метаданных локально, и каждое обращение превращается в отдельный сетевой синхронный запрос к диску сервера.Если веб-клиент в обычном браузере работает стабильно, а тонкий клиент по адресу публикации http://server/Base1C тормозит, обратим внимание на следующие сетевые факторы:
mod_deflate для MIME-типа application/octet-stream, объем передаваемого трафика возрастает в несколько раз.KeepAlive в конфигурации веб-сервера отключен или тайм-аут занижен, на каждый запрос тратится время на повторное открытие TCP-соединения.Наиболее надежный способ исключить сетевые накладные расходы Samba и конфликты блокировок — выполнять административные действия локально на сервере, где расположен файл базы данных. Для этого развернем на сервере графическую оболочку и сервер терминалов XRDP:
xrdp на Linux-сервер./pub/Base1C/1Cv8.1CD напрямую через локальную файловую систему, что обеспечивает максимальную скорость открытия метаданных и исключает сетевые задержки Samba.Для большинства типовых операций (создание резервных копий, тестирование и исправление, накат обновлений конфигурации) графический интерфейс Конфигуратора не требуется. Разберем выполнение этих задач через командную строку Linux по SSH с использованием пакетного режима запуска толстого клиента 1С:
sudo systemctl stop httpd
/opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /DumpIB "/pub/backups/base_backup.dt"
.cf:
/opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /UpdateCfg "/pub/updates/update.cf" /UpdateDBCfg
/opt/1C/v8.3/x86_64/1cv8 DESIGNER /F "/pub/Base1C" /IBCheckAndRepair -ReIndex -LogAndRefsIntegrity
sudo systemctl start httpd
Для ускорения работы тонкого клиента отредактируем конфигурационный файл веб-сервера (в зависимости от дистрибутива это /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
Если отказаться от запуска Конфигуратора через сетевой диск невозможно, приведем секцию общего ресурса в /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 и запускать ее только после закрытия Конфигуратора.