Медленная работа 1С на терминальной ферме

Обновлено 29.11.2020

1С лого

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлой статье я вам подробно рассказал и показал, что такое виртуальная машина, на каких типах гипервизора она может работать и какого ее вообще назначение. Двигаемся дальше, и поговорим про наверное одну из популярнейших программ, которую использую почти в каждой организации, я говорю про "1С Предприятие". Мы рассмотрим по какой причине может очень медленно загружаться и работать конфигуратор 1С Предприятия.

Описание проблемы

Не так давно я развернул новую RDS ферму на базе Windows Server 2016 и мигрировал на нее пользователей с RDS фермы 2012 R2. Все было замечательно, пока основная масса людей полностью не перешла на новые сервера, по ситу это все те же виртуальные машины на базе ESXI 6.5. В какой-то момент стали поступать обращения в техническую поддержку, о том что конфигуратор 1С и сама 1Ска долго открывается и подтормаживает. Секунд по 30-40 висело вот такое окно конфигуратора, после чего открывалось и пользователи продолжали работу, кого-то это напрягало, а кого-то нет, в любом случае на прошлой RDS ферме этой проблемы не было. Давайте смотреть причины данной ситуации.

Медленная работа 1С на терминальной ферме

Почему может тормозить 1С на RDSH сервере

Основными причинами, которые могут на прямую или косвенно влиять на производительность приложений 1С можно выделить:

  • Нехватка ресурсов у системы (Скорости дисков, процессорных мощностей, памяти и другого)
  • Работа механизма распределения ресурсов в Windows под названием Dynamic Fair Share Scheduling (DFSS)
  • Влияние антивируса
  • У вас установлена устаревшая версия 1С
  • Слишком большое количество одновременных подключений

1С и динамическое планирование долевого распределения

Когда я разбирался с медленной работой приложения Directum на терминальном сервере, то выяснил, что в ряде случаев в качестве причины может выступать с виду полезная функция "Динамическое планирование долевого распределения" которая не должна давать одному пользователю выедать все ресурсы, это можно сравнить с умной фильтрацией ALG трафика, которая то же должна улучшать голос, но по факту она же и вызывала проблемы. Поэтому я настоятельно рекомендую, когда вы делаете рабочие места 1С на RDS ферме, то на всех RDSH хостах отключайте Dynamic Fair Share Scheduling (DFSS), как это делать смотрите по ссылке, тут я лишь напомню в общих чертах.

Первое, что вы должны сделать, это открыть PowerShell в режиме администратора и проверить, работает ли DFSS или нет. Если будет стоять 1, то значит работает и вам нужно его менять на 0, при ноле делать больше ничего не нужно.

(gwmi win32_terminalservicesetting -N "root\cimv2\terminalservices").enabledfss

Медленно работает 1с из-за Dynamic Fair Share Scheduling (DFSS)

Так как мы получили 1, то вам нужно у двух ключей EnableCpuQuota и EnableFairShare нужно выставить значение "0". Я приводил выше ссылки, где лежат ключи, как вариант вы можете это сделать через групповую политику или скриптом. Если будите делать через GPO, то не забудьте ее потом обновить вручную.

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

Проверка достаточности ресурсов

На терминальных серверах очень часто может не хватать ресурсов, в виду того, что системный администратор не правильно оценил масштабы нагрузки на один хост. Напоминаю, что на одном RDSH сервере могут одновременно спокойно сидеть и по 40 и по 100 человек, тут важна балансировка и понимание, какие данные и ПО создают нагрузку. Первое на что я вам советую обратить внимание, это на загрузку CPU, в идеале у вас должна быть своя система мониторинга, которая следит за всеми показателями и где потом легко понять почему сервер и приложение 1С тормозили. Например у меня на работе используется Zabbix.

Запустите диспетчер задач, сделать это можно через одновременное нажатие CTRL+SHIFT+ESC. Переходим на вкладку производительность и смотрим нагрузку на CPU в реальном времени. Если она высокая, то сразу переходим в мониторинг ресурсов.

Проверка достаточности ресурсов

В мониторе ресурсов откройте вкладку ЦП и посмотрите самые нагруженные процессы, вы там легко можете увидеть ваш антивирус, который я предложу удалить в следующем пункте. Хочу отметить, что если будет загружен процессор под 100%, то у вас могут теряться сетевые пакеты и сервер может быть не доступен по сети, это особенно чувствуется, когда вы используете виртуальные машины с устаревшими сетевыми интерфейсами E1000.

ТакМонитор ресурсов, вкладка CPU

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

  • Время ответа у процессов - для SSD этот показатель не более 30-40, для HDD не более 100-120
  • Длина очереди к диску - Если она больше 1, например 5, то это плохо и есть проблемы с производительностью

Монитор ресурсов проверка нагрузки дисков

Нагрузку на диски, память и дисковую подсистему вы можете уменьшить или убрать, путем миграции на другой ESXI хост, уменьшить количество одновременно работающих пользователей за RDSH хостом, это делается через оснастку управления RDS. Так же убедитесь, что у вас сам хост гипервизора не нагружен под 100%, такое то же бывает и могут легко быть предупреждения "Host CPU usage и host memory usage". Рассмотрите вариант расширения ресурсов у данного сервера или добавление еще одного и распределение нагрузки пользователей между ними.

Удаление антивируса

Понятно, что не хорошо такое советовать, но в момент поиска причины медленной работы 1С, я советую не отключить, а именно удалить ваше антивирусное решение, чтобы точно удостовериться, что причина не в нем, так как я очень часто с этим сталкивался. Потом если понятно, что дело в нем нужно реализовывать совместную работу. Основная идея в том, что нужно добавить компоненты 1С:Предприятия (например, папку C:\Program Files\1cv8\BIN и C:\Program Files\1cv8\server) и C:\Program Files (x86)\1cv8 в исключения. Также добавить в исключения рабочие (1Cv8*.1C?  — маска для (1Cv8.1CD \ 1Cv8tmp.1CD \ 1Cv8.1CL \ 1Cv8tmp.1CL)

  • 1Cv8.pfl
  • 1Cv8.log
  • *.epf
  • *.dt
  • *.cf
  • *.cfu)
  • и временные файлы, используемые 1С:Предприятие.

Дополнительные методы решения

  • Постарайтесь перейти на более свежую версию программы, очень часто, что в новых версиях исправляют ряд проблем и оптимизируют скорость работы
  • Для сверхбольшого (тысячи) одновременных соединений к серверу 1С необходимо отредактировать сетевой стек Windows. Откройте реестр Windows и переудите в ветки:

HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

Там ключи:

  1. MaxFreeTcbs = 100000
  2. TcpTimedWaitDelay = 30
  3. MaxUserPort = 65535

HKLM\System\CurrentControlSet\Services\AFD\Parameters

Там ключи:

  1. EnableDynamicBacklog = 1
  2. MinimumDynamicBacklog = 20
  3. MaximumDynamicBacklog = 20000
  4. DynamicBacklogGrowthDelta = 10

В командной строке от имени администратора установите диапазон исходящих портов (1025; 65535)

netsh int ipv4 set dynamicport tcp start=1025 num=64510

netsh int ipv4 set dynamicport udp start=1025 num=64510

  • Если вы используете подключение USB ключа 1С по сети, через DIGI, SEH, DongleServer, то рассмотрите вариант обновления драйверов на сервере 1С и прошивок на самом оборудовании
  • Еще одной из причин может служить проблема с самим кодом 1С
  • Проверьте производительность сервера БД
  • Постарайтесь перевести 1С на SQL Server (Серверный режим), там работа будет выглядеть вот так, когда пользователь сделает запрос, то он будет обрабатываться программой на самом сервере, и обратившемуся будет представлена только та информация, что соответствует его запросу и не больше. То есть с места хранения базы (сервера) тянется не вся информация, а только та, что требуется для пользователя. Это увеличивает производительность 1С в разы. Так же это позволяет избежать блокировок. Когда пользователь проводит документ, для обеспечения корректности анализируемых алгоритмом проведения данных блокируются на изменение таблицы БД (регистры накопления, хранящие, например, остатки товаров). Если другой пользователь в этот же момент попытается провести свой схожий документ, то программа не даст ему это сделать – «зависнет» и будет ожидать завершения проведения первого документа (и разблокировки для изменения необходимых таблиц). Серверный режим это поправит.

На этом у меня все, в данной публикации я постарался ответить на вопрос, почему тормозит 1С на терминальном сервере. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *