Перевод терминальной инфраструктуры на более современную операционную систему часто преподносит неприятные сюрпризы системным администраторам. Ситуация, когда на старой Windows Server 2008 база 1С «летала», а после обновления до Windows Server 2016 и добавления оперативной памяти начала жутко тормозить даже при работе одного пользователя — классическая проблема. Выясним технические причины такого поведения системы и разберем комплексный план оптимизации.
Прежде чем переходить к практическим шагам, проанализируем архитектурные особенности связки файловой 1С:Предприятие 8.3 и операционной системы Windows Server 2016. Основная сложность заключается в том, что файловый движок 1С выполняет практически все критические операции в один поток. Это означает, что общая многоядерность процессора не имеет решающего значения для скорости работы отдельного пользователя. Если у вас установлен многоядерный процессор с низкой тактовой частотой (например, популярный в недорогих серверах Intel Xeon E5-2603 с частотой всего 1.6 ГГц и без поддержки технологии Intel Turbo Boost), то производительность 1С будет крайне низкой.
Дополнительно операционная система Windows Server 2016 содержит встроенные механизмы безопасности и планирования ресурсов, которые по умолчанию настроены «против» специфики работы файловой 1С. Рассмотрим подробнее пошаговый алгоритм оптимизации сервера.
---
Часто системные администраторы ограничиваются изменением плана электропитания внутри операционной системы, однако настройки энергосбережения на уровне BIOS материнской платы имеют приоритет. Если процессор постоянно сбрасывает частоту в простое, микросекундные задержки при ее повышении вызывают сильные визуальные «фризы» интерфейса 1С.
Выполним глубокую настройку электропитания:
Power Management, CPU Power Control или Power Regulator).Dynamic Power Savings (динамическое энергосбережение) или OS Control (управление операционной системой) в режим Static High Performance (максимальная производительность).Intel SpeedStep (EIST) и процессорные состояния глубокого сна C-States (C1E, C3, C6). Это заставит процессор всегда работать на своей максимальной физической частоте.---
В ядро Windows Server 2016 интегрирована программная защита от аппаратных уязвимостей процессоров Spectre и Meltdown (технология KVA Shadowing). На старых поколениях процессоров (включая семейство Intel Xeon E5 v1/v2) эта защита не имеет аппаратной поддержки и выполняется программно силами ОС. Это приводит к падению производительности дисковых операций ввода-вывода (I/O) и системных вызовов на 30–40%. Поскольку файловая 1С непрерывно считывает и записывает тысячи мелких блоков в файл базы данных, эта защита превращает работу пользователей в слайд-шоу.
Если ваш сервер находится в закрытом корпоративном контуре и защищен от внешних угроз, данные патчи безопасности рекомендуется отключить. Разберем, как сделать это через реестр:
regedit от имени администратора.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
FeatureSettingsOverride, Значение: 3FeatureSettingsOverrideMask, Значение: 3---
В Windows Server 2016 по умолчанию активна служба динамического распределения ресурсов между терминальными сессиями — Dynamic Fair Share Scheduling (DFSS). Данная технология пытается делить процессорное время, дисковую активность и сетевой поток поровну между всеми RDP-сеансами. Когда один пользователь запускает тяжелый отчет или производит проведение документов в 1С, планировщик DFSS ошибочно воспринимает этот всплеск как попытку монополизировать сервер и искусственно «зажимает» дисковые и процессорные очереди для этой сессии, вызывая зависания.
Для отключения этого механизма выполним следующие команды в консоли PowerShell, запущенной от имени администратора:
# Отключение CPU Fair Share
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System" -Name "EnableCpuQuota" -Value 0
# Отключение Disk Fair Share
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk" -Name "EnableFairShare" -Value 0
# Отключение Network Fair Share
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TSFairShare\Net" -Name "EnableFairShare" -Value 0
После выполнения команд необходимо перезагрузить терминальный сервер.
---
Файловая база 1С состоит из единого файла базы данных 1Cv8.1CD и транзакционного лога 1Cv8.1CL. Антивирусы (например, Kaspersky) и встроенный защитник Windows Defender по умолчанию проверяют файл базы при каждом обращении к нему. При работе даже 5–8 пользователей на сервере генерируется колоссальный поток дисковых запросов, и антивирус полностью парализует работу дисковой подсистемы.
Даже если сторонний антивирус отключен, встроенный Windows Defender в Windows Server 2016 продолжает автоматически работать в фоновом режиме. Настроим правила исключений:
*.1CD, *.1CL, *.cdn, *.elf.1cv8.exe, 1cv8c.exe, 1cv8s.exe.C:\Users\*\AppData\Local\Temp\C:\Users\*\AppData\Local\1C\C:\Users\*\AppData\Roaming\1C\---
Жалобы пользователей на то, что «закрытие вкладки в 1С происходит по 5 секунд», чаще всего указывают на проблему отрисовки графического интерфейса в RDP-сессиях Windows Server 2016. По умолчанию эта ОС использует современный графический драйвер WDDM для удаленных столов. На серверах без дискретной видеокарты вся отрисовка ложится на плечи центрального процессора, что при низкой частоте ядер приводит к жутким визуальным задержкам.
Переведем систему на классический облегченный драйвер XDDM через редактор локальной групповой политики:
Win + R, введите gpedit.msc и нажмите Enter.gpupdate /force.---
При переходе на новые версии платформы (например, с 8.3.12 на 8.3.14) старый пользовательский кэш начинает конфликтовать с новыми библиотеками платформы, вызывая замедление работы и падения программы. Кэш необходимо регулярно очищать.
Рассмотрим пример скрипта автоматизации на языке PowerShell, который можно запускать в планировщике задач Windows по ночам для очистки кэша всех терминальных пользователей:
# Скрипт очистки кэша 1С для всех пользователей терминала
$UsersDir = "C:\Users"
Get-ChildItem $UsersDir | Forough-Object {
$UserLocal1C = "$($_.FullName)\AppData\Local\1C\1cv8"
$UserRoaming1C = "$($_.FullName)\AppData\Roaming\1C\1cv8"
if (Test-Path $UserLocal1C) {
Remove-Item -Path "$UserLocal1C\*" -Recurse -Force -ErrorAction SilentlyContinue
}
if (Test-Path $UserRoaming1C) {
Remove-Item -Path "$UserRoaming1C\*" -Recurse -Force -ErrorAction SilentlyContinue
}
}
Также обратите внимание на известный баг брандмауэра Windows Defender в Server 2016. При каждом входе пользователя создаются тысячи неявных правил брандмауэра, которые не удаляются автоматически. Это тормозит любые сетевые операции файловой 1С. Проверьте количество правил командой в PowerShell:
(Get-NetFirewallRule).count
Если число превышает несколько тысяч, это критическая проблема. Решается она установкой последних накопительных обновлений Windows Server 2016 или периодическим скриптовым удалением устаревших правил в реестре по ветке HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\RestrictedServices\AppIso\FirewallRules.
---
Если руководство компании категорически отказывается приобретать дорогостоящую лицензию на сервер 1С (клиент-серверный вариант), но комфортная работа пользователям необходима, рассмотрим альтернативную архитектуру. Вместо запуска «тяжелых» сеансов RDP, опубликуем файловую базу данных на бесплатном веб-сервере IIS (встроенная роль Windows) или Apache прямо на этом же сервере.
Преимущества такой схемы огромны:
Рекомендуем настроить публикацию базы на веб-сервере через встроенный помощник в конфигураторе 1С (меню «Администрирование» -> «Публикация на веб-сервере») и перевести сотрудников на работу через тонкий клиент. Это позволит комфортно работать группе до 10–12 пользователей даже на относительно слабом оборудовании.