Работа 1С в виртуальной среде часто преподносит неприятные сюрпризы: в моменты, когда все показатели системы кажутся нормальными, выполнение простых операций (например, проведение реализации) внезапно растягивается на минуты. Рассмотрим подробно, почему возникают такие «фризы», как их диагностировать и какие настройки помогут стабилизировать работу системы 1С:Предприятие.
Прежде всего, нам необходимо понять, где именно «застревает» процесс. Если в отладчике поймать момент не удается, единственным надежным инструментом остается Технологический журнал (ТЖ). Проанализируем ситуацию: нам нужно отследить длительные операции проведения документов.
Настроим ТЖ на сбор событий DBMSSQL и CALL с длительностью более нескольких секунд. Это позволит увидеть, на чем именно уходит время — на выполнение запроса к СУБД или на исполнение кода на сервере 1С. Пример конфигурационного файла logcfg.xml:
<config xmlns="http://v8.1c.ru/7.4/puls/config">
<log location="C:\LOGS\1C" history="24">
<event>
<eq property="Name" value="DBMSSQL"/>
<gt property="Duration" value="10000000"/>
</event>
<event>
<eq property="Name" value="CALL"/>
<gt property="Duration" value="10000000"/>
</event>
<property name="All"/>
</log>
</config>
Если ТЖ показывает длительные ожидания на уровне DBMSSQL при низкой загрузке CPU, мы имеем дело с проблемами дисковой подсистемы или блокировками.
Разберем одну из самых частых причин «скачков» в виртуальной среде. Виртуальные машины (ВМ) стремятся активно использовать свободную оперативную память для кэширования дисковых операций. Выясним причину возникновения задержек: когда MSSQL Server внутри виртуалки и сам гипервизор на хосте одновременно пытаются управлять кэшем, возникает конфликт интересов.
В определенные моменты происходит так называемый «сброс кэша» на физический диск. Если объем накопленных данных велик, а физическая дисковая система занята другими задачами, ВМ буквально «замирает», ожидая завершения записи. Чтобы минимизировать этот эффект, проанализируем следующие рекомендации:
Посмотрим на настройки SQL Server. Часто системные администраторы оставляют параметр Max Server Memory по умолчанию, что позволяет SQL «отъедать» всю доступную память ВМ. Это приводит к тому, что операционной системе Windows не хватает ресурсов для системных процессов и драйверов, что вызывает свопинг (использование файла подкачки).
Выполним обязательную настройку:
Max Server Memory так, чтобы у ОС оставалось не менее 15–20% оперативной памяти (или минимум 4–8 Гб).Проанализируем ситуацию с процессором. Даже если внутри гостевой ОС загрузка ядер составляет 10%, 1С может тормозить из-за параметра CPU Ready. Это время, которое виртуальная машина проводит в очереди, ожидая доступа к физическим ядрам процессора.
Рассмотрим пример: вы выделили виртуалке 16 ядер (vCPU), а на физическом сервере всего 20 ядер и работают еще 5 мелких виртуалок. Гипервизор должен найти момент, когда одновременно освободятся 16 физических ядер, чтобы дать вашей ВМ поработать. Пока он их ищет, 1С «висит».
Решение: уменьшите количество vCPU до разумного минимума (например, до 4 или 8). Часто уменьшение количества виртуальных процессоров парадоксальным образом увеличивает скорость работы 1С в разы.
Выясним влияние энергосберегающих технологий. Для 1С критически важно, чтобы процессор работал на максимальной частоте без переключений в «спящие» режимы (C-states). Проверим два уровня настроек:
Static High Performance (Максимальная производительность). Это отключит динамическое управление частотой, которое вносит микрозадержки при выполнении кода 1С.Чтобы подтвердить теорию о дисковых тормозах, воспользуемся монитором ресурсов Windows. Нас интересуют не проценты загрузки, а параметр «Длина очереди диска» и «Время отклика (Latency)».
Если в моменты проведения документа Latency прыгает выше 10–20 мс (для SSD это уже очень много), значит, проблема в физическом хранилище или в контроллере. Проверьте состояние батарейки на RAID-контроллере (BBU) — если она вышла из строя, контроллер отключает кэш на запись, и производительность падает в десятки раз.
Подводя итог, если вы столкнулись со скачками производительности в типовой УТ на виртуалке, пройдите по шагам:
CPU Ready на уровне хоста (не более 5%).SQL Server и включите Lock Pages in Memory.Такой комплексный подход позволит вам выявить скрытую причину тормозов, которая не видна в обычном диспетчере задач.