При совместной работе пользователей с файловой базой 1Cv8.1CD, размещенной в общей сетевой папке (SMB-ресурсе), нередко возникает ошибка «Недостаточно свободной памяти». Пользователи теряют возможность подключиться к базе, при этом перезагрузка файлового сервера временно устраняет проблему. Разберем детально, почему возникает данный сбой и как его устранить на уровне операционной системы, платформы 1С и архитектуры решения.
Проанализируем технические факторы, приводящие к нехватке памяти:
LanmanServer накладывает множество байтовых блокировок (byte-range locks) на монолитный файл базы данных. На серверах с небольшим объемом оперативной памяти или слабой конфигурацией драйвер srv2.sys исчерпывает невыгружаемый пул памяти. Отказ сетевого стека Windows выдать очередной дескриптор блокировки транслируется клиенту 1С как ошибка памяти.lsass.exe / ntds.dit) агрессивно кэширует данные в оперативной памяти и отключает дисковое кэширование записи. В результате для обработки файловых транзакций по протоколу SMB остается критически мало свободных системных ресурсов.1cv8.exe ограничен непрерывным адресным пространством в 2 ГБ. Механизм проецирования файла базы в память (MapViewOfFile) при размере базы около 2 ГБ и фрагментации виртуальной памяти не может выделить непрерывный блок памяти.Для предотвращения блокировок сетевого стека и оптимизации файлового доступа выполним ряд настроек операционной системы на сервере:
Set-SmbShare -Name "crm" -LeasingMode None
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters и скорректируем параметры:Size (тип DWORD) — установим значение 3 (оптимизация сервера для максимальной пропускной способности сети и работы с файлами).MaxMpxCt (тип DWORD) — установим значение 2048 (увеличение лимита одновременно обрабатываемых команд SMB на сессию).*.1cd, *.cfl, *.1ch, *.log, *.tmp, а также саму сетевую папку. Обязательно отключим службу индексирования поиска Windows (Windows Search) для диска с базой.Внутренняя фрагментация таблиц приводит к искусственному разрастанию файла 1Cv8.1CD. Разберем по шагам регламентное обслуживание файла базы:
chdbfl.exe (находится в каталоге bin установленной платформы 1С) и выполним диагностику с установленным флагом исправления ошибок..dt), после чего загрузим его в новую пустую базу. Это пересоздаст внутреннюю структуру файла и существенно снизит его размер.Рассмотрим действия на рабочих станциях пользователей:
1cv8.exe.
bcdedit /set increaseuserva 3072
%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8.Прямая работа с монолитным файлом 1С через общую сетевую папку Windows является наименее надежным сценарием для многопользовательской среды. Рассмотрим правильные варианты организации доступа:
1Cv8.1CD локально без сетевых SMB-блокировок, а клиенты обмениваются с ним легковесным HTTP/HTTPS-трафиком.