Каждый системный администратор и специалист по внедрению «1С:Предприятия» рано или поздно сталкивается с ситуацией, когда сервер приложений 1С внезапно начинает утилизировать 100% мощности процессора. При этом пользователи жалуются на критические зависания, а классические методы диагностики (например, анализ загрузки СУБД или простых фоновых заданий) не показывают никаких аномалий. В этой статье мы подробно разберем реальный практический кейс, выясним скрытые механизмы этого поведения и выработаем комплекс мер для стабилизации системы.
Проанализируем ситуацию, описанную администратором на форуме. На виртуальной машине под управлением Hyper-V выделено всего 24 Гб оперативной памяти под сервер 1С. Периодически загрузка процессора подскакивает до 100%, причем нагрузка «размазана» по множеству рабочих процессов rphost, и явного процесса-лидера в диспетчере задач нет. Как только администратор вернул частый (каждые 2 часа) перезапуск рабочих процессов, нагрузка на ЦП снизилась до 60%, а потребление памяти упало.
На первый взгляд это кажется парадоксом: частый перезапуск процессов и миграция сеансов пользователей должны создавать дополнительную нагрузку на процессор. Однако здесь мы имеем дело с классическим эффектом виртуального буксования памяти (Memory Thrashing). Разберем его механику по шагам:
rphost. Объем используемой ОЗУ постепенно растет.pagefile.sys на жестком диске.rphost, хотя реальные вычисления в базах данных практически стоят.Таким образом, перезапуск rphost каждые 2 часа выступал в роли «костыля», который просто высвобождал забитую оперативную память до того, как операционная система уходила в жесткий свопинг. Как только интервал перезапуска увеличили до 24 часов, память забилась, и сервер мгновенно ушел в пике.
Выясним причину столь быстрого расхода оперативной памяти. В кластере автора настроено обслуживание по схеме «1 информационная база на 1 рабочий процесс». При наличии 22 рабочих процессов на сервере с 24 Гб ОЗУ это является грубейшей системной ошибкой.
Рассмотрим подробнее накладные расходы на содержание инфраструктуры кластера 1С:
rphost, даже при отсутствии активных пользователей в базе, требует для своей инициализации от 500 до 800 Мб оперативной памяти. Эти ресурсы уходят на хранение кэша метаданных конфигурации, загрузку программных модулей и инициализацию внутренних структур платформы.rphost только на поддержание «холостого» хода кластера тратится от 11 до 17 Гб оперативной памяти.Для стабильной работы 100–200 сеансов пользователей оптимальным является наличие всего 2–3 рабочих процессов rphost (примерно один процесс на 50–70 активных сеансов). Это позволит сэкономить более 10 Гб драгоценной оперативной памяти, полностью предотвратит свопинг и снизит паразитную нагрузку на процессор.
В рассматриваемом кейсе используется сервер на базе процессора Intel Xeon X5650. Это архитектура Westmere, выпущенная в 2010 году. Использование виртуализации на столь старом оборудовании накладывает дополнительные жесткие ограничения:
NUMA-архитектура: Процессоры этого поколения критически чувствительны к локальности памяти. Если виртуальной машине выделяется объем оперативной памяти, выходящий за пределы одного физического узла NUMA (или если включена динамическая память), задержки обращения к ОЗУ возрастают лавинообразно. В сочетании с нехваткой памяти это моментально парализует работу сервера приложений.
Сетевой стек виртуализации: Сервер 1С находится внутри виртуальной машины, а СУБД MS SQL Server — на физическом хосте. Общение между ними происходит через виртуальный сетевой адаптер по протоколу TCP/IP. Это создает колоссальные накладные расходы на процессор виртуальной машины, который вынужден постоянно упаковывать и распаковывать сетевые пакеты. Если перенести сервер приложений 1С на физический хост к СУБД, они смогут взаимодействовать по сверхбыстрому протоколу Shared Memory (общая память), минуя сетевые протоколы. Это не только высвободит ресурсы ЦП, но и увеличит общую производительность системы в разы.
Стоит обратить внимание, что тонкая настройка параметров рабочих процессов (таких как количество информационных баз на процесс, лимиты памяти на процесс и т.д.) начиная с платформы версии 8.3.15 требует наличия лицензий уровня КОРП. На лицензиях уровня ПРОФ данные параметры игнорируются платформой или принудительно сбрасываются к дефолтным значениям (не более 8 ИБ на один процесс rphost). Попытка искусственно обойти эти ограничения может приводить к непредсказуемой и нестабильной работе кластера.
Автор темы пытался диагностировать проблему с помощью Технологического журнала (ТЖ), настроив его на события DBMSSQL. Поскольку проблема крылась не в СУБД, а на самом сервере приложений (из-за дефицита памяти и CPU), этот сбор логов ничего не показал.
Для выявления реальных причин высокой нагрузки на стороне 1С необходимо действовать следующим образом:
Шаг 1. Настройка Технологического журнала на сбор процессорного времени. Нам необходимо собирать события CALL и SDBL с фильтрацией по длительности использования процессора CpuTime. Создадим файл конфигурации logcfg.xml следующего содержания:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\v8_logs\cpu_heavy" history="24">
<event filter="CALL">
<eq property="Name" value="v8.1c.ru/v8/tech-log/CALL"/>
<gt property="CpuTime" value="10000000"/> <!-- Более 10 секунд CPU -->
</event>
<event filter="SDBL">
<gt property="CpuTime" value="10000000"/>
</event>
<property name="all"/>
</log>
</config>
Этот лог покажет нам конкретные методы встроенного языка 1С или неоптимальные запросы СУБД, которые выполняются непосредственно в оперативной памяти сервера приложений и нагружают процессор.
Шаг 2. Анализ системных счетчиков ОС (Performance Monitor). Нам понадобятся следующие показатели:
Memory\Pages/sec — количество страниц в секунду, считываемых или записываемых на диск для разрешения конфликтов виртуальной памяти. Если значение стабильно превышает 100-200, ваша система находится в режиме жесткого свопинга.Paging File\% Usage — процент использования файла подкачки. Поможет оценить реальный дефицит физической ОЗУ.Processor Queue Length — длина очереди процессора. Значение, систематически превышающее удвоенное количество ядер процессора, однозначно указывает на нехватку вычислительной мощности.Для того чтобы полностью избавить сервер от периодических 100% зависаний, необходимо выполнить следующий комплекс мероприятий:
rphost до 2–3 штук и сэкономит более 10 Гб ОЗУ.Shared Memory.