Тормозит Directum на терминальной ферме
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами методы оплаты телефона билайн, я привел вам 5 примеров описывающих 5 приложений и сервисов банков. Сегодня я хочу поговорить вновь про административные вещи, а именно мы рассмотрим по каким причинам может медленно запускаться и работать Directum 5 на терминальной ферме. Думаю с данной проблемой сталкивались многие администраторы и пользователи, так как данное ПО очень популярное.
Описание проблемы
Есть Remote Desktop Services High Availability ферма построенная на базе Windows Server 2019, там установлена система документооборота и автоматизации бизнес процессов Directum 5. Пользователи массово стали жаловаться на долгое открытие и работу в системе irectum 5. Само открытие только занимало от 40 секунд, что самое интересное, на старой RDS ферме, которая была на базе Windows Server 2012 R2, все открывалось за 5 секунд. Короче работать было невозможно.
Как ускорить работу Directum 5
Первое к чему я вас хочу отправить, это к техническим требованиям, по которым ваша система должна подходить и соответствовать:
Требования к серверам
- Тип дисков, очень рекомендуется SSD, тут думаю это требования для всех подойдет
- От 12 ГБ ОЗУ на сервере приложений с компонентами (IIS)
- Старайтесь разносить сервер приложений и SQL базу. Для сервера SQL минимум 8 ГБ ОЗУ
- Скорость локальной сети 1 ГБ
- ОС Windows Server 2008 R2 и выше, MSQ SQL 2008 и выше
Проверка ресурсов сервера и клиента
Второе, что вы должны проверить, это не упираетесь ли вы по ресурсам, как на сервере, так и на клиентских станциях. Если у вас есть система мониторинга, например Zabbix, то вы можете посмотреть данные там, если же ее нет, то стоит о ней задуматься, а пока откройте диспетчер задач, сделать это можно через нажатие CTRL+SHIFT+ESC. Тут в режиме реального времени посмотрите нагрузку на CPU и память, если показания высокие, то есть смысл в увеличении ресурсов. Например, у меня данный терминальный сервер находится на виртуальной машине, которая работает на базе гипервизора ESXI 6.5, который в свою очередь лежит на физическом сервере Dell Power Edge R740.
Если в системе явно присутствую зависания, медленное отрывание окон, то откройте "Мониторинг ресурсов"
Посмотрите на вкладке "Диск", какие процессы у вас к нему обращаются, тут нужно выделить два момента, которые будут вам говорить, о проблемах со скоростью дисковой подсистемы:
- Время ответа у процессов - если оно очень высокое, более 100 для HDD и более 20 для SSD, то ваш диск вероятнее всего загружен, что вызывает медленную работу приложений и Directum.
- Второй момент это длина очереди, которая не должна превышать 1, если более, то плохо.
Проверка опции DFSS
Ранее я вам рассказывал про функционал Dynamic Fair Share Scheduling (DFSS), который помогал сделать честное распределение ресурсов между пользователями терминалов, но как показала практика, это может приводить и к нехорошим последствиям, когда при запуске приложения ему не хватает ресурсов, в следствии чего вы наблюдаете тормоза, зависания и медленную работу приложений.
После дискуссии с разработчиками Directum (ЕСУД) было выяснено, что лучше отключать Dynamic Fair Share Scheduling (DFSS), так как он сильно влияет на работу приложения. Напоминаю, что там двум ключам EnableCpuQuota и EnableFairShare нужно выставить значение "0".
Быстро проверить статус на ваших RDSH хостах или другом списке серверов, можно скриптом PowerShell.
"$(Date) Quering computers from AD"
$out_file = "C:\Temp\\IS_1112.csv"
"ComputerName;EnableCpuQuota;EnableFairShare" | Out-File $out_file -Force
$comps_file = "C:\Temp\comps.txt"
$comps = Get-Content $comps_file
"$(Date) Going to process $($comps.Length) computer records"
foreach ($comp in $comps) # | sort DNSHostName
{
if (Test-Connection $comp -Count 1 -Quiet)
{
"$(Date) $comp is online"
"$(Date) Checking for Fair Share CPU Scheduling"
$RegKey1 = $RegKey2 = $EnableCpuQuota = $EnableFairShare = $null
try {
# $EnableDFSS = (Get-WmiObject -ComputerName $comp.DNSHostName -Class win32_terminalservicesetting -Namespace "root\cimv2\TerminalServices").EnableDFSS
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp)
$RegKey1 = $Reg.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Quota System")
$EnableCpuQuota = $RegKey1.GetValue("EnableCpuQuota")
$RegKey2 = $Reg.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\TSFairShare\\Disk")
$EnableFairShare = $RegKey2.GetValue("EnableFairShare")
}
catch {
"$(Date) $($_.exception.message)"
}
# "$comp;$EnableCpuQuota;$EnableFairShare"
"$comp;$EnableCpuQuota;$EnableFairShare" | Out-File $out_file -Append -Force
}
else
{
"$(Date) $comp is offline"
}
}
В результате у вас будет CSV файл с таким содержимым, где видно значение нужных ключей реестра.
Или можно вот так:
foreach ($Server in $Servers) {
$EnabledFss = gwmi win32_terminalservicesetting -ComputerName $Server -Namespace "root\cimv2\terminalservices" | Select-Object enabledfss
$Table = New-Object -TypeName PSObject
$Table | Add-Member -MemberType NoteProperty -Name "Server" -Value $Server
$Table | Add-Member -MemberType NoteProperty -Name "EnabledFss" -Value $EnabledFss.enabledfss
$Table | Format-Table -AutoSize
}
После применения данных изменений вам даже не потребуется перезагрузка системы, все изменения вступят сразу в силу, после чего я запустил DIRECTUM и о чудо он стал запускаться за 6-7 секунд вместо 40-50, эврика. В результате чего вся медленная работа превратилась в быструю.
Дополнительно
Еще накидаю возможных вариантов почему может тормозить Directum на Windows Server 2016-2019:
- Антивирусное решение - попробуйте его отключить или добавить папку приложения в исключение
- DEP - как его отключить смотрите по ссылке
На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.