Режим серверный сжатие усиленное 1с отключить
Эта статья — результат длительных наблюдений за работой высоконагруженных систем разной архитектуры. Задача статьи — дать пищу для размышлений и показать пример, когда типовое поведение информационной системы по умолчанию не всегда является оптимальным.
Тонкая настройка и обслуживание кластера 1С могут существенно влиять на общую производительность системы и на время отклика сервера для отдельных групп пользователей. Такая настройка может быть полезна для высоконагруженных внедрений и для внедрений, содержащих в своих конфигурациях недочеты. Например, циклические ссылки или избыточные сеансовые данные. Расследование и исправление таких недочетов в прикладном решении является трудоемкой задачей, которую сложно выполнить в короткие сроки. Поэтому эксплуатацию прикладного решения зачастую приходится производить в сложившихся условиях.
В статье рассмотрены нестандартные подходы к настройке и обслуживанию сервера кластера 1С. Такие подходы могут дать ощутимый результат при эксплуатации высоконагруженного сервера 1С. Под высоконагруженными серверами будем полагать более 300–400 одновременных активных сеансов, независимо от используемой лицензии — КОРП или обычная лицензия.
Особенности лицензий «1С:Предприятие КОРП»
Лицензия КОРП предоставляет дополнительные возможности по настройкам, которые позволяют повысить стабильность работы кластера. В качестве примера можно отметить следующие возможности:
- Вынос тяжелых сеансов, например, регламентных заданий, на отдельный сервер с помощью настройки требований назначения функциональности. Это может повысить отзывчивость рабочих процессов рабочего сервера, которые обслуживают сеансы пользователей.
- Ограничение на расход памяти одного вызова. Позволяет снизить общий расход памяти кластером, а также, теоретически, может снизить скорость деградации производительности рабочих процессов.
При этом версия КОРП, так же как и обычная лицензия, имеет ограниченное количество сценариев для перезапуска рабочих процессов (РП):
- Регулярный перезапуск РП через заданный интервал времени.
- Перезапуск РП превысивших временно допустимый объем памяти рабочих процессов.
Поэтому возникает желание еще гибче, чем предлагается управлять рабочими процессами в кластере, поскольку именно они «изнашиваются» быстрее других компонентов в кластере.
Стоит принимать во внимание тот факт, что лицензия КОРП стоит существенно больше обычной лицензии.
Необходимые сведения об устройстве сервера 1С
На рисунке представлены элементы, которые задействованы в работе кластера серверов, а именно:
- Процессы кластера серверов:
- ragent.exe;
- rmngr.exe;
- rphost.exe.
- список кластеров;
- реестр кластера.
Функционирование компьютера в составе кластера обеспечивается процессом ragent.exe, который называется агентом сервера. Компьютер, на котором запущен агент сервера, называется рабочим сервером. Одной из функций агента сервера является ведение списка кластеров, расположенных на данном рабочем сервере.
Непосредственно кластер серверов включает в себя следующие элементы:
- один или несколько процессов rmngr.exe;
- реестр кластера;
- один или несколько процессов rphost.exe.
Процесс rmngr.exe называется менеджером кластера. Этот процесс управляет функционированием сервера в кластере.
Процесс rphost.exe называется рабочим процессом. Рабочий процесс обслуживает непосредственно клиентские приложения, взаимодействует с сервером баз данных и в нем, в частности, могут исполняться процедуры серверных модулей конфигурации.
Влияние количества рабочих процессов на производительность и потребление памяти сервера 1С
Давайте разберемся, какие гиперпараметры оказывают влияние на устойчивость и производительность работы кластера.
При настройке кластера эксперт оперирует следующими параметрами:
- количество рабочих процессов;
- количество соединений на процесс;
- объем памяти на процесс;
- интервал перезапуска рабочих процессов.
Почему хочется назвать данные параметры гиперпараметрами? Такое желание наступает вследствие того, что эксперт не оказывает влияние на алгоритмы распределения памяти и тому подобных вещей на низком уровне, а может лишь косвенно оказывать воздействие.
Установить непосредственно можно только «Количество соединений на процесс» и «Интервал перезапуска РП». Остальные параметры можно регулировать только опосредованно.
Например, чтобы увеличить количество рабочих процессов (РП), можно уменьшить количество соединений на процесс, при этом объем памяти на один рабочий процесс станет меньше. Также можно уменьшить объем памяти на процесс настроив более частый перезапуск РП.
Универсальной рекомендации по настройке этих параметров не существует, поскольку они очень сильно зависят от конкретной конфигурации информационной базы, активности сеансов и объема оперативной памяти доступной кластеру. Есть так называемые «параметры по умолчанию», которые устанавливаются при создании нового кластера.
Параметр «Количество соединений на процесс»
В современных версиях «1С:Предприятие» устанавливается количество соединений на процесс 256, хотя в более ранних релизах этот параметр был равен 128.
Логика установки данного параметра такая: при уменьшении количества соединений на процесс мы тем самым увеличиваем количество рабочих процессов. С одной стороны, это приводит к повышению стабильности работы кластера и уменьшению времени реакции сервера на запросы клиентов. С другой стороны, при большем количестве РП система тратит больше времени на межпроцессное взаимодействие и как следствие ведет к увеличению времени реакции сервера на запросы и снижению производительности.
- Снижение затрат кластера на межпроцессное взаимодействие.
- Уменьшение суммарного объема потребляемой памяти кластером и, как следствие, уменьшение вероятности жесткого завершения РП самим кластером.
- Снижение стабильности работы кластера при внезапном падении или перезапуске одного из РП.
- Увеличение скорости деградации каждого РП в отдельности т. к. то же количество вызовов обслуживаются меньшим числом РП.
- Перезапуск одного из РП происходит более затратно для сервера, т. к. На одном РП больше сеансовых данных.
- Повышение стабильности работы кластера при внезапном падении или перезапуске одного из РП.
- Снижение скорости деградации каждого РП в отдельности, т. к. то же количество вызовов обслуживаются бо́льшим числом РП.
- Перезапуск одного из РП происходит менее затратно для сервера, т. к. на одном РП меньше сеансовых данных.
- Увеличение затрат кластера на межпроцессное взаимодействие.
- Повышенный риск нехватки свободных портов в случае внезапного перезапуска всех РП.
- Увеличение суммарного объема потребляемой памяти кластером и, как следствие, увеличение вероятности жесткого завершения РП самим кластером.
Таблица: Сравнительный анализ по изменению количества рабочих процессов
Таким образом, универсального решения здесь нет и нужно искать некий баланс между этими двумя крайностями.
Из нашего опыта и опыта коллег, участвовавших в крупных внедрениях (более тысячи пользователей), на текущий момент времени мы пришли к заключению, что баланс обычно находится в районе 7–15 рабочих процессов.
Из интересных особенностей управления параметром «Временно допустимый объем памяти процессов» можно отметить тот факт, что в документации ИТС указана возможность использования данного параметра только для лицензии КОРП. При этом установка параметра все же работает (он не игнорируется) с обычной лицензией в версиях платформы 8.3.15 (начиная с 8.3.15.1700), 8.3.17, 8.3.18. А, например, в версиях 8.3.16 он игнорируется.
Параметр «Интервал перезапуска РП»
Интервал перезапуска РП по умолчанию не установлен. Применительно к высоконагруженным системам это со временем ухудшает параметры быстродействия сервера. Можно было бы рекомендовать перезапускать РП каждые несколько часов. Но и здесь все не так очевидно, как кажется на первый взгляд.
Поскольку пользователи заходят в прикладное решение в основном в одно и то же время, то и процессы оказываются запущены практически одновременно и поэтому их перезапуск происходит практически одновременно. Такое поведение системы приводит к повышенному времени отклика сервера во время таких массовых перезапусков РП. А у конечных пользователей это выглядит как «подвисание» клиентского приложения на десятки секунд.
Параметр «Принудительно завершать проблемные процессы»
Еще один интересный и неоднозначный параметр — это «Принудительно завершать проблемные процессы». Здесь под процессами подразумеваются не только рабочие процессы, но и другие компоненты кластера. При его включении система анализирует такие показатели, как:
- проверка соединения с процессом;
- проверка объема памяти занимаемой процессом (применимо для менеджера кластера и рабочего процесса);
- отслеживание рабочих процессов, удаленных из реестра кластера;
- избыточное число ошибок или исключений.
Если на основании анализа этих показателей процесс признается проблемным, то возможно принудительное завершение проблемного процесса (с формированием дампа аварийного завершения). Формально правила признания процесса проблемным описаны в документации, но на практике часто встречаются ситуации, когда процесс признается проблемным ошибочно. Такое поведение системы может зависеть от конкретной версии платформы. Таким образом, мы не стали бы рекомендовать всем в обязательном порядке использовать принудительное завершение проблемных процессов.
Деградация рабочих процессов
В процессе своей работы рабочий процесс (РП) со временем потребляет все больше памяти, что в конечном счете приводит к увеличению времени отклика рабочих процессов и падению производительности сервера в целом.
В сообществе специалистов 1С такое явление назвали «деградацией рабочих процессов». Гипотетически деградация РП может происходить по разным причинам:
- фрагментация памяти рабочего процесса;
- избыточное кэширование объектных данных платформой 1С;
- наличие циклических ссылок объектов друг на друга;
- наличие избыточных сеансовых данных.
Степень деградации РП мы не можем измерить никаким объективным критерием или метрикой. Однако, известно, что степень деградации РП в некоторой степени коррелирует с:
- Объемом оперативной памяти, занимаемым РП.
Объем оперативной памяти нельзя считать объективным показателем деградации, поскольку он сильно зависит от эксплуатируемой конфигурации ИБ, количества сеансов, размера сеансовых данных, количества соединений на РП. - Временем реакции РП на клиентские запросы.
Время реакции является всего лишь средним временем, затраченным РП на обслуживание одного клиентского вызова. Поэтому РП недавно обслуживший заведомо тяжелый вызов будет иметь повышенное время реакции сервера.
Таким образом, эти показатели можно считать лишь косвенным показателем степени деградации рабочего процесса.
Влияние деградации РП на пользователей может носить неожиданный характер. Например, когда сильно деградировал только один РП, большинство пользователей вообще не заметит негативных эффектов, а часть пользователей (в нашем случае это КоличествоПользователей/КоличествоРП) предъявляет жалобы на общее замедление работы системы. При чем такое замедление наблюдается буквально во всем: открытие форм объектов, формирование отчетов, проведение документов и т. п.
Способы решения проблемы деградации рабочих процессов
Увеличение количества рабочих процессов
При каком-то определенном сценарии работы пользователей кластер обслуживает некое среднее количество вызовов. Эти вызовы делятся между рабочими процессами. Таким образом, увеличение количества рабочих процессов может замедлить скорость деградации каждого отдельно взятого РП, поскольку каждый из них будет обслуживать меньше вызовов. Увеличение количества РП необходимо делать в разумных пределах и с четким пониманием возможных негативных последствий, описанных выше.
Разделение нагрузки на несколько рабочих серверов
Вынос тяжелых сеансов, например, регламентных заданий или построение отчетов, на отдельный рабочий сервер может позитивно сказаться на отзывчивости РП, обслуживающих сеансы пользователей и снизить скорость деградации этих РП. Это реализуется с помощью настройки требований назначения функциональности. Но доступно только с лицензией КОРП и поэтому имеет смысл только на очень больших внедрениях.
Своевременный перезапуск РП
Как уже писалось выше, независимо от используемой лицензии, кластер сервера 1С:Предприятия имеет ограниченное количество сценариев для перезапуска рабочих процессов, и у всех них есть недостатки.
- Регулярный перезапуск РП через заданный интервал времени.
Настройка этого параметра часто приводит к массовому перезапуску рабочих процессов запущенных одновременно. Что не всегда хорошо сказывается на времени реакции сервера в момент такого перезапуска. - Перезапуск РП превысивших временно допустимый объем памяти рабочих процессов.
По умолчанию данный параметр установлен в «0». Это значит, что перезапуск РП будет осуществляться при превышении 80% памяти доступной кластеру. Поскольку рост потребления памяти происходит неравномерно между рабочими процессами и лишь косвенно указывает на степень деградации, то настроить своевременный перезапуск РП с помощью статичного указания временно допустимого объема памяти достаточно сложно.
Потребление памяти рабочими процессами зависит от характера нагрузки, которая сильно меняется внутри рабочего дня. Ни один из показанных на графике лимитов не подойдет для своевременного перезапуска РП во всех сценариях работы.
Сценарий 1 Сценарий 2 Лимит 1 Есть явно деградировавший РП, но перезапуск его не происходит. Деградировали уже все РП, но перезапустится только один. А хотелось бы не доводить ситуацию до такого состояния и перезапускать заранее. Лимит 2 Есть явно деградировавший РП, есть его перезапуск. Слишком низкий лимит приводит к частому аварийному перезапуску множества РП сразу. Мы реализовали свой способ перезапуска РП, который делает своевременный перезапуск деградировавших РП. Он основан на регулярном перезапуске РП через заданный интервал времени, но не приводит к массовому перезапуску рабочих процессов, запущенных одновременно, поскольку перезапускает лишь один РП в единицу времени (например, раз в 10–20 минут).
Логика работы скрипта
Раз в 10 минут производится суммирование объема памяти всех рабочих процессов, устанавливается параметр «временно допустимый объем памяти рабочих процессов» в значение равное полученной сумме за вычетом 512Мб, чтобы получить гарантированное превышение по памяти.
Далее скрипт ожидает, пока один из рабочих процессов перейдет в выключенное состояние, и устанавливает параметр «временно допустимый объем памяти рабочих процессов» в ноль. Опционально, можно пропускать перезапуск РП если в текущий момент явно нет ни одного деградировавшего РП — память самого крупного РП не превышает некоего заведомо низкого значения, при котором перезапуск точно не нужен, например, 8ГБ.
За счет этого достигается равномерный перезапуск рабочих процессов. Причем перезапуск рабочих процессов делается строго по одному и перезапускается рабочий процесс, занимающий самый большой объем памяти.
В качестве дополнительного бонуса к статье мы приводим примеры скриптов перезапуска рабочих процессов в двух вариантах: для Windows на PowerShell с использованием COM-объектов и для Linux на скрипте Bash с использованием RAC.
Хотелось бы обратить внимание на то, что эти скрипты не претендуют на какую бы то ни было эталонность, а просто являются демонстрацией того, как можно программно управлять рассмотренными в статье настройками кластера. Для этого можно использовать RAC или COM-объекты и по вкусу завернуть все это в программу на любом понравившемся языке. Подробнее о настройке и запуске 1С под Linux читайте тут.
DeleteWorkingProcess
ByMemory.shСкрипт для bash (в качестве параметра принимает номер порта кластера):
УдалитьРППоПамяти.ps1
Скрипт для PowerShell:
Вместо заключения
Почему раздел называется не «Заключение», а «Вместо заключения»? Причина кроется в том, что статья посвящена не тому, чтобы дать набор готовых инструкций, рекомендаций, рецептов, а настроить эксперта-читателя на тон размыслительный.
Показать, что важно понимать логику функционирования системы, точки воздействия. Что необходимо внимательно следить за поведением системы в условиях разных настроек, не бояться ставить эксперименты и порой приходить к парадоксальным выводам.
Под парадоксальностью мы полагаем тут настройки системы отличающихся от рекомендованных, но хорошо подходящих именно вашему проекту. И в ряде случаев это может помочь не только в части устойчивости и производительности функционирования, но и сэкономить деньги.
4. Вводим ключ: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX .
6. Ждем. Выбираем способ активации, а именно "Использовать телефонную связь для активации".
7. Выбираете свой регион.
- Девушка робот начнет перечислять варианты активации.
- Жмем 1(активировать продукт майкрософт).
- На вопрос на скольких компьютерах установлен продукт, нажимаем 1. Если пожадничать, то не получиться.
- Затем вас попросят ввести код. Код видите на экране. Вводите, в ответ другая девушка-робот продиктует 8 блоков по 6 цифр (каждый блок дважды для проверки). ИМХО код лучше сразу записать, а потом уже спокойно ввести.
- Вносим цифры в окно активации.
14. Жмем Далее. Интернет, может быть отключен (без разницы). Windows 7 активирована.
15. Снова идем Пуск — правой кнопкой мыши по Компьютер — Свойства. Или Панель управленияВсе элементы панели управленияСистема в самом низу видим "Активация Windows". И видим следующее
Что означает что мы успешно активировали Вашу систему.P.S. Звонить лучше после 20-00, так как нет шанса попасть на оператора и пообщаться с ним вживую.
Спасибо за помощь в создании инструкции anddoc, AlexLat07 и остальным умельцам с группы DG Win&Soft.Не нашли то, что искали? Воспользуйтесь поиском:
Лучшие изречения: Увлечёшься девушкой-вырастут хвосты, займёшься учебой-вырастут рога 9826 — | 7691 — или читать все.
Отключите adBlock!
и обновите страницу (F5)
очень нужноИтак, для начала хочу рассказать о преимуществах лицензионного Windows. Любое лицензионное программное обеспечение в том числе и операционная система обладают большим количеством различных преимуществ, например если у вас в системе что начало работать не так как должно вы можете написать в техническую поддержку компании, которая занималась разработкой данного программного обеспечения и они вам помогут, а если программа не лицензионная то вам уже никто не поможет.
К тому же любое лицензионное ПО можно обновить до более новой версии, а в любом другом случае такое не возможно. Многие пользователи уверены в том, что сборки Windows 7 работают также корректно и без ошибок как и лицензионные версии, в этом они очень сильно ошибаются. Лицензионный Windows 7 всегда работает стабильно и никак не может испортить компьютер, поэтому если вы ходите чтобы ваш ПК стабильно работал многие годы то вам обязательно нужно устанавливать лицензионную версию Windows 7.
На данный момент существует два способа активации, это активация Windows 7 по телефону и также активация Windows 7 с помощью ключа о котором я уже писал в прошлой статье. Для тех кто желает активировать Windows 7 по телефону я подготовил инструкцию с которой вы сможете ознакомиться чуть ниже.
Инструкция по активации Windows 7 по телефону
Прежде чем приступить к процессу обязательно отключаем доступ компьютера к интернету иначе у вас меню активации по телефону не появится. Далее наводим курсор мышки на ярлык «Мой компьютер», который расположен на рабочем столе и нажимаем правую кнопку мыши.
Переходим в меню свойства и у вас откроется такое вот окошко, там внизу вы увидите пункт «Изменить ключ продукта».
Нажимаете на него, а потом должно открыться окно с таким вот содержимым:
Если оно у вас немного отличается от того, который отображен на скрине, то значит вы забыли отключить доступ к сети интернет.
Здесь выбираете «Показать другие способы активации» и новом открывшемся окне вводите свой ключ. Далее в следующем шаге вам необходимо кликнуть по пункту «Использовать телефонную систему» и выбираете свой регион.
После нажатия на кнопку «Далее» вы получите список номеров телефонов. Вам нужно позвонить на тот номер, который начинаете с 8 800 … А дальше думаю вы сами справитесь нужно лишь следовать подсказкам оператора.
Всем удачи, вопросы как обычно задаем в комментариях…
Выключаем интернет, проще всего это сделать выдернув кабель, по которому Вы получаете интернет.
Идем Пуск – правой кнопкой мыши по Компьютер – Свойства. Или Панель управленияВсе элементы панели управленияСистема в самом низу видим “Активация Windows”.
Жмем – Изменить ключ продукта.
Вводим ключ: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX .
Ждем…. Выбираем способ активации, а именно “Использовать телефонную связь для активации”.
Если стационарный телефон в тональном режиме, то просто нажимаем 1, 2, и тд, если в импульсном, тогда “звездочка”1, “звездочка”2 и т.п.
Девушка робот начнет перечислять варианты активации.
Жмем 1(активировать продукт майкрософт).
На вопрос на скольких компьютерах установлен продукт, нажимаем 1. Если пожадничать, то не получиться.
Затем вас попросят ввести код. Код видите на экране. Вводите, в ответ другая девушка-робот продиктует 8 блоков по 6 цифр (каждый блок дважды для проверки). ИМХО код лучше сразу записать, а потом уже спокойно ввести.
Вносим цифры в окно активации.
Жмем Далее. Интернет, может быть отключен (без разницы). Windows 7 активирована.
Снова идем Пуск – правой кнопкой мыши по Компьютер – Свойства. Или Панель управленияВсе элементы панели управленияСистема в самом низу видим “Активация
Windows”. И видим надпись об успешной активации!
Что означает что мы успешно активировали Вашу систему.
P.S. Звонить лучше после 20-00, так как нет шанса попасть на оператора и пообщаться с ним вживую.
Похожие материалы
Доброго времени суток! Представляю вашему вниманию ключи для office 2007 бесплатно. Пользуйтесь! Для активации рекомендуется выключить…
Когда один пользователь проводит документ, а другой - тоже пытается проводить документ, то этот второй пользователь загружает сервер непрерывным опросом блокировки. Проблема характерна для 1С:Предприятие 7.7 (DBF и SQL) и файл-серверной версии 8.0. Подробнее:
Книга знаний: Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировкиПотеря производительности при подключении второго пользователя
При подключении второго (и последующего) пользователя к сетевой (не SQL!) базе 1С резко возрастает "торможение" 1С:Предприятие 7.7 при работе по сети. Причем, при отключении второго пользователя торможение сохраняется, до перезагрузки сервера.
- Установить сеть NetWare (где кэш работает нормально)
- Установить программу SuperCache (для некоторых конфигураций обещается ускорение в несколько десятков раз)
- Использовать жесткий диск со встроенным кэш-буфером и повышенной пропускной способностью (обычно – относительно дорогие модели SCSI)
Разрастается журнал транзакций SQL
Долго стартует 1С
Проблема может быть связана с включенным антивирусом Касперского, который (в старых версиях) стремится проверить файл конфигурации (MD) 1С:Предприятие 7.7, причем, делает это несколько минут. Имеет смысл отключить проверку антивирусом файлов с расширениями MD, DD, DDS, DBF, CDX, LST, TMP.
Отключить сохранение времени последнего доступа к файлам
Кеширование при записи
В проводнике выбрать диск -> Properties -> Hardware -> Properties ->Policies установить галку Enable write caching on the disk
Только если есть UPS!Временная папка пользователя на локальном диске
Промежуточные результаты запросов 1С сохраняет в виде файлов DBF во временной папке пользователя (которая указана в настройках пользователя в Конфигураторе 1С).
Достаточно указать c:\temp или аналогичную папку, а не папку на сетевом ресурсе, чтобы промежуточные результаты сохранялись и использовались быстрее.Отключение QoS
Сетевая карта Realtek
Оптимизация распределения памяти Windows
Дополнительные действия в XP
Удаление 1cv7.cfg
При разрастании этого файла до нескольких мегабайт наблюдается торможение при работе пользователей в 1С.
Что в файл 1Cv7.CFG в 7.7 записывается?Использование терминального режима
Если узкое место системы - сеть, то использование терминального режима - на машине пользователей стоят только терминальные клиенты, вся работа происходит на сервере. Ходят слухи, что для имеет смысл делать терминалку только для файлового варианта DBF, не SQL.
(Замечание от romix'a: Не рекомендуют смешивать на одном физическом сервере SQL и терминал. Если же сервера разные, то очень даже можно. Единственная проблема - 100% загрузка процессора при ожидании блокировки - успешно решается патчем [2] и, возможно, будет исправлена в релизах 1С 7.7 выше 25-го.)
Аналогично, если требуется запустить серьезную обработку (перепроведение, переиндексация), лучше это делать на сервере - будет работать быстрее.
Использование компоненты TURBOBL
Снижение транзакционной нагрузки
Некоторым образом можно снизить транзакционную нагрузку, если рассчитывать все движения документа и сохранять их в списке значений (каждому элементу соответствует таблица значений с движениями) в момент, когда пользователь нажимает кнопку ОК или Провести в форме. А при проведении документа брать движения из этой таблицы и записывать их в базу. Можно предусмотреть такую фичу и в программном проведении документа, не только в интерактивном.
Достоинства: снижается длина транзакции.
Недостатки: на время расчета не блокируется база, что может повлечь за собой неточности в движениях, например спишется один и тот же резерв.Отключение FlushFileBuffers для DBF-варианта
ildus
14 - 18.11.06 - 14:52
(13) самый простой способ включить кэширование записи для всех файлов- отключить вызов FlushFileBuffers(hFile). для этого для платформы 7.70.025 надо пропатчить файлик dbeng32.dll: ищем последовательность "50 FF 15 40 C0 11 1F", заменяем на "B8 FF FF FF FF 90 90". Теперь 1С не будет делать принудительный сброс файловых буферов на диск при каждой записи, т.е. запись на диск будет кэшироваться и сброс файловых буферов будет делаться средствами самой ОС (для NTFS каждые несколько секунд). Значительно уменьшается фрагментация файлов на диске и отпадает необходимость помещать временные файлы на RAM-диск. Этот метод дает очень хорошие результаты для локального и терминального режимов. Использовать это для сетевого режима не рекомендую, т.к. не тестил и вероятно может привести к повреждению базы.
более продвинутый способ - выборочное кэширование файлов. для этого делается перехват вызова FlushFileBuffers() с помощью ВК или подменой dll и проверяется хэндл файла- если например это временный файл или *.CDX базы, то файл кэшируется, если *.DBF базы, то происходит вызов FlushFileBuffers().В финансовых решениях консолидационного класса или класса ERP предлагается функциональность, связанная с составлением оперативных или мастер-бюджетов, например, работа с бюджетом доходов и расходов.
Экземпляр бюджета — это хрестоматийный пример сложной формы, где есть:
- данные в разрезе каждого месяца года (в колонках);
- группировка по настраиваемой структуре разделов и статей (в строках);
- возможность внесения изменений онлайн;
- автоматический пересчет сумм зависимых формул;
- отрисовка плана и факта рядом на пересечении месяца и статьи;
- вывод в будущих месяцах плановых значений в ячейках факта.
Как видно, логика работы достаточно нагруженная и, как следствие, данных на форме много.
Руководитель подразделения открывает форму экземпляра бюджета и долго ждет ее открытия. Если время ожидания слишком велико, то в конечном итоге менеджер переходит для осуществления процесса бюджетирования в табличный инструмент класса Excel.
После разработки и включения в рабочую базу оказалось, что открытие формы бюджета в терминах структур разделов и статей компании занимает 1,5 минуты и более. Это неприемлемо, тем более что основные пользователи системы — руководители подразделений, и без того сталкивающиеся с нехваткой времени.
Мы поставили перед собой задачу сократить открытие такой формы до времени
Программная и аппаратная инфраструктура
- Нетиповая конфигурация собственной разработки.
Замечание: подобные проблемы могут также быть актуальны для иных систем класса ERP, например:
Используется трехзвенная клиент-серверная архитектура с доступом тонкого клиента через веб-сервер. Сервер СУБД и Сервер 1С:Предприятия совмещены на одной машине.
Сервер СУБД
- Процессор: Intel Xeon CPU E5-2637 v2, 2 процессора 3,5 Ghz.
- Память: 96 GB (разрешено потреблять СУБД не более 73728 MB).
- Жесткий диск SSD.
- MSSQLServer 2014 (12.0.4237.0).
- MS Windows NT 6.1 (7601).
Сервер «1С:Предприятие»
- Тот же сервер, что и сервер СУБД.
- Память: доступна вся свободная память, то есть, не менее 24576 MB.
Веб-сервер
- Процессор: Intel core 2 DUO E7500 2,93 GHz.
- Память: 4 GB.
- MS Internet Information Services 8.5.96.
- MS Windows Server 2012 R2.
Тонкий клиент
- Процессор: Intel Core i5.
- Память: 16 GB.
- Диск SSD.
- 1С 8.3.14.1694 — тонкий клиент.
- MS Windows 10.
Ищем причину медленного открытия формы и устраняем ее в «1С»
1. Для начала расследования снимаем замер производительности в «1С» процесса открытия формы
В замере видно, что лидер по абсолютному времени выполнения — метод «ОткрытьФорму».
Из 104 секунд открытия 64 приходятся на этот метод.
При этом сделать вывод о причинах медленного открытия из этого замера невозможно.
2. Соберем технологический журнал для анализа медленного открытия
Какие события собираем
Собираем события CALL и SCALL.
Выдержка из документации по платформе:
- SCALL — исходящий удаленный вызов (исходящий вызов на стороне источника вызова).
- CALL — входящий удаленный вызов (удаленный вызов на стороне приемника вызова).
Эти события возникают при клиент-серверном взаимодействии.
Бытует мнение, что SCALL всегда возникает при обращении с клиента на сервер, а CALL — при приходе этого обращения на сервер.
Нередко это так и есть, например, когда клиент обращается к серверу.
Однако это не всегда так. Например, могут быть обращения внутри сервера между менеджером кластера и рабочим процессом, между сервером и клиентом и так далее.
Пример иного случая возникновения событий CALL и SCALL.
Цели сбора
Преследуем 2 цели:
- посмотреть длинные по времени вызовы;
- найти «лаги» в технологическом журнале.
С длинными вызовами вопросов не возникает: есть оператор программы, который длится слишком долго, и это можно в явном виде обнаружить в ТЖ. По сути, хотим увидеть то же, что в замере производительности.
Что такое «лаг технологического журнала»? Под ним понимается ситуация, когда в явном виде событий с большим временем исполнения в журнале нет, но косвенно об этом догадываемся за счет присутствия большой паузы между двумя соседними событиями в журнале по одной сессии.
Метод сбора
Метод сбора технологического журнала (далее — ТЖ) — обычный:
- в папке C:\Program Files\1cv8\conf создаем файл logcfg.xml (структура файла ниже);
- ждем, пока в папке с логами, указанной в logcfg, появятся подпапки с именами процессов сервера;
- выполняем открытие формы;
- убираем файл logcfg.xml из папки;
- ждем не более 5 минут, пока система завершит запись файлов журнала;
- забираем файлы технологического журнала из подпапки rphost_.
В нем настроено:
- папка для сбора логов C:\logs;
- отбор по событиям CALL и SCALL;
- отбор по имени базы rarus_fb.
Анализируем данные собранного лога технологического журнала. Нехитрым скриптом посмотрим наиболее долгие вызовы.
Примечание по скрипту
По сути, скрипт отбирает из ТЖ события, с длительностью от 2 знаков (с 10 секунд и более). Т. к. время в ТЖ 8.3 — в микросекундах, то нам нужен отбор по времени > 8 разрядов; чтобы не писать много букв в регулярном выражении, используем синтаксис расширенных регулярных выражений: , который включается ключом -E.
Видим, что существует долгое событие CALL длительностью 85 секунд, на котором происходит большое потребление памяти 554 Мб, а в пике 701 Мб и оно возникает на методе ПолучитьФорму.
Соберем лаги ТЖ.
Сделаем это более сложным скриптом, суть которого в том, чтобы сравнить по времени 2 соседних события ТЖ и найти среди них наибольшие паузы.
- в скрипте делаем отбор по t:clientID, равному ID нашего клиента, чтобы учесть только события по текущему пользователю.
В результате получаем:
В первой колонке — время лага в микросекундах, далее — время старта двух соседних событий.
Видно, что первым номером идет лаг, сопоставимый по времени с временем открытия формы.
Делаем предположение, о том, что тяжелая форма долго загружается с сервера на клиент.
3. Посмотрим на форму в конфигураторе
Что же такое разработчик заложил на форме? Может быть данные формы перегружены избыточной информацией?
Важный элемент расследования — просто посмотреть на творение рук разработчика глазами в конфигураторе «1С».
Видим несколько таблиц значений на форме. Отладчиком посмотрим для реального бюджета, какое количество строк в них.
А строк совсем немало. И всё это при открытии перегружается с сервера на клиент.
Убедимся в этом тезисе.
4. Используем Fiddler в режиме ReverseProxy
Чтобы окончательно убедиться в том, что медленная работа обусловлена «большими» данными формы и понять, что именно это за данные, перехватим их.
Режим Reverse proxy позволяет «вставить Fiddler в разрыв» между веб-сервером и клиентом и проанализировать пакеты обмена.
Настройка Fiddler в режиме ReverseProxy
Настройку будем производить на копии рабочей базы, которая развернута в той же инфраструктуре.
Настройка режима состоит на верхнем уровне из двух этапов:
- настроить на веб-сервере переадресацию url-rewrite на сервер с Fiddler’ом;
- настроить сам Fiddler.
Для настройки веб-сервера вводим правило url-rewrite на сервер finsrv, порт 8888, на котором будет слушать Fiddler.
Устанавливаем на отдельный сервер наш Fiddler и настраиваем в режиме Reverse proxy, как описано здесь.
-
Проверяем в опциях, что установлен флаг «Allow remote computers to connect».
-
if (oSession.host.toLowerCase() == "webserver:8888") oSession.host = "webserver:80";
Отслеживаем взаимодействие между веб-сервером и клиентом «1С»
Зайдем в копию базы и дойдем до открытия формы экземпляра бюджета, но открывать не будем. Перейдем в Fiddler, посмотрим, пакет с каким номером был получен последним, и запомним его номер. Теперь откроем форму бюджета, дождемся окончания открытия и посмотрим все пакеты от запомненного до самого последнего.
Видим входящий запрос с большим объемом данных.
Предполагаем, что это и есть данные формы. Смотрим подробности данных в правом окне:
Обращаем внимание, что прочитать можно только заголовки, а данные, похоже, сжаты, о чем также свидетельствует надпись 1C‑SDCversion и далее — MZ, что соответствует началу сжатой части.
- По 1C-SDCversion — ищем на партнерском форуме «1С» и встречаем упоминание о том, что это метод сжатия deflate.
Вспоминаем, что по умолчанию клиент «1С» запрашивает работу со сжатием данных между клиентом и сервером.
С помощью запуска тонкого клиента со специальным параметром отключаем этот режим.
Делаем повторное открытие формы и видим в Fiddler’е уже вполне читаемую картину.
Обращаем внимание, что без сжатия данные формы весят более 1 Мб, что немало.
Наконец справа видим данные формы:
Переходим на представление «TextView», копируем в буфер и сохраняем как xml.
Обращаем внимание на наличие больших блоков в ветке props c внушительным количеством строк, которое сопоставимо с числом строк таблиц значений на форме:
а также со свойством fullChanged="true". Последнее скорее всего означает разрешение на изменение строк объекта на клиенте.
Выдвигаем предположение о том, что в данных формы на клиента приходят с сервера служебные таблицы значений.
С точки зрения функционирования алгоритма они не требуются на клиенте. Принимаем решение избавиться от таблиц значений на клиенте.
5. Разгружаем форму в «1С»
Что тяжелее всего?
- На форме есть таблицы значений с большим числом строк.
- Обработка объект содержит табличные части с большим числом строк.
Отказываемся от использования таблиц значений на форме и табличных частей в пользу такого подхода:
- на сервере создаем таблицы значений;
- при переходе на клиента помещаем их во временное хранилище, а на форме храним только его адрес;
- после возврата на сервер получаем таблицы значений из временного хранилища.
6. Смотрим в Fiddler результат «разгрузки» формы
Видно, что объем данных формы сократился более чем в 5 раз.
7. Делаем повторный замер производительности и смотрим потребление памяти и лаги в ТЖ
Накатываем изменения на рабочую базу, собираем замер производительности «1С».
Видим, что теперь открытие формы экземпляра бюджета составляет 25 секунд, а метод ОткрытьФорму — всего 2,1 секунды.
Замедление работы «1С:Управление торговлей» через 6 часов после запуска сервера «1С»
Большое предприятие ведет свою деятельность в клиент-серверной базе основанной на «1С:Управление торговлей» ред.11.2. При длительной работе более 6 часов с момента запуска сервера от пользователей стали поступать жалобы об общем замедлении работы системы. При этом замедление наблюдалось буквально во всем: открытие форм объектов, формирование отчетов, проведение документов и так далее.
В рамках статьи рассмотрены причины такого поведения системы, возможные варианты настройки сервера типовыми средствами «1С», а также представлен авторский альтернативный подход к решению проблемы.
Оглавление
Необходимые сведения об устройстве сервера «1С»
На рисунке представлены элементы, которые задействованы в работе кластера серверов, а именно:
- процессы кластера серверов:
- ragent.exe,
- rmngr.exe,
- rphost.exe.
- список кластеров,
- реестр кластера.
Функционирование компьютера в составе кластера обеспечивается процессом ragent.exe, который называется агентом сервера. Соответственно компьютер, на котором запущен агент сервера, называется рабочим сервером. Одной из функций агента сервера является ведение списка кластеров, расположенных на данном рабочем сервере.
Непосредственно кластер серверов включает в себя следующие элементы:
- один или несколько процессов rmngr.exe;
- реестр кластера;
- один или несколько процессов rphost.exe.
Процесс rmngr.exe называется менеджером кластера. Этот процесс управляет функционированием всего кластера.
Процесс rphost.exe называется рабочим процессом. Рабочий процесс обслуживает непосредственно клиентские приложения, взаимодействует с сервером баз данных и в нем, в частности, могут исполняться процедуры серверных модулей конфигурации.
В процессе своей работы рабочий процесс со временем потребляет все больше памяти, что в конечном счете приводит к падению производительности сервера. Таким образом, объем памяти занимаемый рабочим процессом в некоторой степени коррелирует со степенью его деградации.
Параметры стенда
Будет рассматриваться поведение платформы на примере доработанной конфигурации основанной на «1С:Управление торговлей» ред. 11.2.
- Сервер 1С под Windows.
- Одновременно работающих пользователей около 800.
- ОЗУ 192Гб. Абсолютное значение памяти не так существенно. Важно, что через какое-то время рабочие процессы замедляются (деградируют) даже при видимом свободном объеме памяти.
- Остальные параметры также не существенны.
Расследование
Повышенный расход памяти и возможные причины
Повышенное потребление памяти происходит по разными причинам, например, избыточное кэширование данных платформой «1С» или наличие недочетов в самом прикладном решении. Как примеры таких недочетов можно назвать наличие циклических ссылок объектов друг на друга, наличие избыточных сеансовых данных.
Расследование и исправление таких недочетов в прикладном решении является трудоемкой задачей, которую сложно выполнить в короткие сроки. Поэтому эксплуатацию прикладного решения приходится производить в сложившихся условиях.
Штатные возможности по оптимизации платформы «1С:Предприятие»
Для отказоустойчивой и производительной работы кластер серверов «1С:Предприятие» предусматривает возможность перезапуска рабочих процессов. Однако, настройки условий перезапуска рабочих процессов могут быть сильно ограничены в разных версиях платформы.
Например, в версии ПРОФ платформы 8.3.15 можно настроить перезапуск рабочих процессов либо по времени, например, каждый час, либо при превышении объема памяти всех рабочих процессов заданного лимита, что не всегда является оптимальным.
Поиск решения
В сервере «1С:Предприятие» есть некий пул соединений, которые могут использоваться разными сеансами по мере необходимости. В то время как сеанс бездействует у него нет соединения. Лишние соединения закрываются не сразу, а примерно через 15–20 минут.
При перезапуске рабочего процесса все сеансы находящиеся на нем необходимо переместить на другой рабочий процесс, при этом в процессе переноса открывается соединение. Именно поэтому перезапуск рабочих процессов наглядно видно на графике количества соединений.
Поскольку пользователи заходят в прикладное решение в основном в одно и то же время, то и процессы оказываются запущены практически одновременно и поэтому их перезапуск происходит практически одновременно (при настройке перезапуска каждый час).
Удобно видеть перезапуск, отслеживая загрузку процессора, а также количество соединений.
На графике ниже показана загрузка ЦП сервера за тот же период. Перезапуск даже одного рабочего процесса это весьма трудозатратная операция для сервера, а если происходит одновременный перезапуск всех рабочих процессов, то это приводит к повышенной нагрузке на сервер.
В рассматриваемом прикладном решении процесс перезапуска всех рабочих процессов мог длиться до 20 минут, при этом средняя загрузка ЦП поднималась выше 60%. Длительность операции перезапуска рабочего процесса зависит от количества сеансов и размера сеансовых данных в каждом из них, а также от степени деградации процесса, чем дольше он не перезапускался, тем дольше будет длиться его перезапуск. Из-за этого несколько раз в день отзывчивость сервера значительно падала, что сопровождалось жалобами пользователей.
После перехода прикладного решения на 8.3.15.1830 появилась возможность использовать параметр не только в КОРП, но и в версии ПРОФ. Однако, попытки использовать его не привели к желаемому результату. Поскольку параметр ограничивает общий объем памяти всех рабочих процессов.
Если задать его слишком маленьким, то перезапуск рабочих процессов будет слишком частым и сервер будет вести себя также, как и при перезапуске по времени. Если задать его побольше, то перезапуск рабочих процессов не будет производиться до тех пор, пока в сумме все они не превысят лимит, а в это время будет происходить их деградация и снижение производительности.
Когда же лимит будет превышен начнется перезапуск рабочих процессов, но процесс будет слишком частый, как и в предыдущем случае.
Очевидно, для того чтобы реализовать регулярный, но не слишком частый перезапуск деградировавших рабочих процессов параметр необходимо постоянно изменять в зависимости от количества сеансов или количества активных рабочих процессов. Но как вычислить эту зависимость не совсем ясно.
Читайте также: