Чтобы понять реальную нагрузку на оборудование, необходимо было провести тест производительности терминального сервера 1С в продакшене, чем я и занимался совсем недавно, а теперь хочу представить результаты на всеобщее обозрение.
Подробнее читайте в статье.
Другие статьи об 1С вы найдете в соответствующей рубрике – 1С.
Содержание
Тест производительности терминального сервера 1С
В нескольких предыдущих статьях по 1С я занимался расчетами конфигурации серверов под различные нагрузки, генерируемые стараниями главных пользователей 1С, а именно сотрудниками бухгалтерии и отделов продаж. Задачи бухгалтеров упираются не только в составление отчетов и внесение данных в программу и потому для них более предпочтительным является полноценный терминальный доступ и уже работа со всем необходимым оттуда (Терминальный сервер 1С). Для менеджеров все значительно проще и для них вполне приемлемым сценарием использования является публикация приложения (Терминальный сервер 1С RemoteApp).
Выводить сервер в продакшн без проведения реального тестирования я не рискнул и потому было организовано масштабное тестирование. Его плюсом лично для меня являлось ещё и то, что я мог бы подкрепить (или опровергнуть) на практике свои теоретические расчеты, основой для которых были весьма субъективные показатели производительности рабочих станций сотрудников.
Тестовая среда
Итак, для тестирования был взят сервер с ЦП Intel Xeon E5-1650 v3 @ 3.50GHz, 128 ГБ RAM, 2*SSD в RAID 1. На этом сервере развернута виртуальная машина, представляющая из себя как раз терминальный сервер, с установленными на нем приложениями 1С 8.2, 1С 8.3, MS Office 2013 Pro.
Сразу скажу, что характер нагрузки был смешанный, то есть были клиенты, работающие через RemoteApp и были те, кто заходил полноценно по RDP и использовал необходимые для своей работы программы (не только 1С, но и Office). Распределение было примерно следующим: 24 сессии RemoteApp, 5 клиентов RDP.
Перед пользователями стояла задача в течение двух часов каждые 30 минут заходить в приложения и выполнять в них повседневные задачи – строить отчеты, выводить данные на печать, делать проводки документов, экспорт данных в другие форматы и т.п. Главное то, что не было цели положить сервер, была цель дать реальную среднестатистическую повседневную нагрузку.
Результаты тестирования
Началось все как обычно – пользователи с третьего пинка уже от руководителей отделов и выше все же начали заходить в 1С и выполнять рутинные задачи. Это все продолжалось недолго и у меня был всего один шанс, чтобы снять показатели производительности сервера максимально приближенные к реальной нагрузке. Вот что я получил в итоге:
ЦП:
Оперативка (на виртуальном сервере была выставлена динамически выделяемая память, поэтому при необходимости текущий объем RAM постоянно изменялся в большую сторону):
Диски:
Теперь необходимо проанализировать результаты и подвести итоги.
Анализ данных
Надо отметить, что расчеты по процессору оказались на редкость точными.
В статье Терминальный сервер 1С RemoteApp эмпирическим путем я установил, что потребление ресурсов ЦП одной сессией 1С RemoteApp составляет в среднем 122,775 единиц производительности процессора (данные о производительности взяты с сайта www.cpubenchmark.net 1). В другой статье – Терминальный сервер 1С – я подсчитал ресурсы, необходимые для работы полноценной сессии RDP и они составили 4% от Core i5 4460, то есть это 0,04*6622 (данные все также с www.cpubenchmark.net) = 264,88.
Итого получаем:
- полноценная сессия RDP съедает 264,88 единиц производительности ЦП;
- сессия 1C RemoteApp потребляет 122,775 единиц.
Вверху я упоминал, что было 24 пользователя RemoteApp и 5 RDP. Считаем:
24 * 122,775 + 5 * 264,88 = 4271
Относительный индекс производительности Intel Xeon E5-1650 v3 составляет 13477 единиц. То есть теоретически нагрузка на ЦП должна составлять в районе 32% (4271 / 13477 * 100).
На графике загрузки ЦП видно, что на интервале времени 10:30 – 10:50 ЦП загружен на 25 – 40% (пики не в счет). Конечно прямой линии нагрузки ЦП в 32% вы не получите, все равно будут колебания от минимумов к относительным максимумам, но в целом можно считать, что реальные данные согласуются с теоретическими. Кстати, чем больше будет пользователей на вашем сервере, тем более равномерным будет загрузка.
На самом деле более ценными оказались данные по оперативной памяти. По расчетам из прошлых статей у меня было:
- 2ГБ на сессию RDP;
- 100МБ на сессию RemoteApp.
То есть объем занятой памяти должен был составить максимум 12,4 ГБ + немного для ОС. Но, как выяснилось и как я в принципе и предчувствовал, это значение на практике представляло из себя совсем другую цифру. 1С оказалась очень жадной до оперативки, к моему сожалению. Более того, приложение ведет себя таким образом, что заняв однажды какой-либо объем, оно не считает нужным его освободить в тот момент, когда потребности в нем больше нет:
Ну разве нормально сожрать под 2ГБ оперативки и при этом сидеть ничего не делать (загрузка ЦП сессии 0%). Современные программисты абсолютно не заботятся об оптимальном использовании ресурсов. Лично меня, когда я учился в вузе, заставляли переписывать код приложения, если он был написан нерационально с точки зрения использования вычислительных ресурсов. Видимо квалификация современных прогеров упала ниже плинтуса, а может это просто подход – зачем оптимизировать уже написанный код, когда лучше заниматься разработкой нового функционала. В общем не суть, бомбануло да и ладно.
Из выделенных серверу 16ГБ “динамики”, он съел их все и вероятнее всего требовал больше. По идее при нехватке оперативки ОС свопит на диск и в этом случае начинается сильная просадка по производительности. В моем случае такого не было и вероятнее всего это заслуга SSD, который вообще не показал практически никакой нагрузки – только два кратковременных пика за весь период теста (с 10:00 до 12:00). Тем не менее, как показывает практика, не советую экономить на оперативной памяти терминальных серверов.
Notes: