Вступление
Наверное, все владельцы терминал-серверов рано или поздно сталкиваются с проблемой постоянной и полной загрузки процессора (процессоров) и существенного замедления работы всех пользователей. Причин этому может быть несколько. Это и большое количество пользователей в целом, и несовершенство 1С в части механизма транзакций, и "тяжелые" отчеты. Решений проблемы тоже может быть несколько. Оптимизация сервера в целом (апгрейд, настройка ОС), разнесение отдельных баз на разные терминал-сервера, оптимизация алгоритмов отчетов и модулей, хранение баз на SQL-сервере. Как оказалось, есть еще один способ продлить жизнь вашей технике - задание квот на использование процессорного времени.
Поиски истины
Мысль эта мне пришла давно. Полгода я мучился вопросом: почему нельзя сделать квотирование процессорного времени на Windows 2000 Server в то время, когда на UNIX-системах это делается без проблем? Копал интернет, спрашивал системных администраторов. В ответ одно - нельзя этого сделать принципиально, можно лишь задавать приоритеты процессам. Однажды наткнулся на статью, где оговаривалось, что возможно задание процессорных квот с использованием продуктов сторонних производителей. Больше никакой информации не давалось, указывался лишь перечень программных продуктов, справляющихся с этой задачей, и предлагалось опробовать каждый из них, чтобы выбрать для себя подходящий. На всякий случай приведу этот перечень:
- Appsense Optimizer ( http://www.appsense.com )
- RES PowerFuse CPUShield ( http://www.respowerfuse.com )
- TAME ( http://www.tamedos.com )
- TMuLimit ( http://www.tmurgent.com/TMuLimit.htm )
- ThreadMaster ( http://threadmaster.tripod.com )
Лично я опробовал все программы из этого списка. Одни из них были чересчур тяжелыми пакетами-монстрами типа MS Office, весьма сложными в освоении и настройке, другие решали узконаправленную задачу и не позволяли решить проблему "на корню". А самое главное - все они были платными, без поддержки отечественными дилерами и без русской документации. Очень жаль, что та программа, которая действительно оказалась нужной, стояла в самом конце списка. Иначе бы я сумел сэкономить уйму времени. Ну что же, надеюсь, эта статья поможет сэкономить время вам.
Период удивлений
Итак, в итоге я остановился на программе ThreadMaster. Скачивание программы с сайта разработчика ввело меня поначалу в состояние ступора. Уже привыкший к дистрибутивам размером несколько десятков мегабайт, я не мог поверить в эффективность программы, чей архив занимал 27 килобайт. Я даже не заметил, как она скачалась - очень уж быстро промелькнуло окошко загрузки. Но ничего, глянув на диск, я обнаружил, что там действительно лежит маленький архив, а в нем - желанный плод. Вторая стадия удивления настала после рассмотрения фразы "Freeware License". Как оказалось, не все, что бесплатно - плохо. Linux и материалы сайта 1c.proclub.ru яркий тому пример. Ну и наконец, третья стадия настала тогда, когда я понял, что инсталлятора и GUI-интерфейса у этой программы нет и не предвидется.
Установка
Программа ThreadMaster устанавливается после распаковки архива запуском командного файла "Install.cmd". При этом создается папка программы в каталоге "System32", создаются ключи реестра и сразу же запускается служба "ThreadMast.exe". Никакой перезагрузки компьютера при этом не требуется. Для того, чтобы остановить работу программы, достаточно остановить соответствующую службу. Для деинсталляции программы необходимо запустить командный файл "Uninst.cmd", который можно скачать с сайта разработчика.
Настройка
Так как ThreadMaster не имеет GUI-интерфейса, все настройки производятся изменением тех или иных ключей реестра в ветке "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMaster" . Все изменения вступают в силу только после перезапуска службы. Рассмотрим наиболее важные настройки.
Глобальные настройки.
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterParametersCPUThresholdPct"
Этот ключ задает отрезок времени, в течение которого будет производиться усредненный анализ загрузки процессора процессом. Значение параметра определяется в интервале от 10 до 100 (секунды).
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterParametersThreadOverloadActionStart"
Этот ключ задает команду (приложение, командный файл), которая будет выполняться в случае принудительного снижения процента загрузки процессом. Можно применять для создания своих систем статистики, для настройки оповещений, для принудительного снятия или перезагрузки процесса и в других случаях. Пример создания командных файлов с использованием переменных контекста ThreadMaster (простите за такое изложение понятий - по другому не могу, слишком долго с 1С работаю) можно посмотреть в файлах "ThreadSaveLog.cmd" и "ThreadLog.cmd".
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterParametersThreadOverloadActionStop"
Этот ключ задает команду (приложение, командный файл), которая будет выполняться в случае снятия процесса с принудительного снижения процента загрузки.
Локальные настройки.
Производятся путем создания дополнительных ключей строкового типа в ветке реестра "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterParametersApplications". Каждый новый ключ определяется именем значения, представляющего собой имя процесса (например "1cv7.exe"), и самим значением, определяющим максимально допустимый процент загрузки процессора этим процессом (аналогично глобальным настройкам). Значение параметра определяется в интервале от 1 до 100 (проценты).
Исключения.
Производятся путем создания дополнительных ключей строкового типа в ветке реестра "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterParametersExceptions". На процессы, перечисленные в данной ветке реестра, не будут распространятся квоты. Изначально эта ветка уже содержит ряд ключей, соответствующих системным процессам. Но можно добавлять и свои. Ключ задается только именем значения, представляющего собой имя процесса (например "Termsrv.exe").
Статистика
При своей работе программа ThreadMaster собирает статистическую информацию о количестве примененных к каждому процессу ограничений, а также о времени, которое процесс провел в состоянии ограничения. Эту информацию можно использовать для того, чтобы разобраться, какие пользователи и какими процессами наиболее грузят сервер, и принять соответствующие меры. Опишу те ветки реестра, где эта статистика хранится.
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterStatisticsCount"
В этой ветке хранятся счетчики ограничений для каждого процесса.
"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesThreadMasterStatisticsTime"
В этой ветке хранятся счетчики времени, которое процесс провел в состоянии ограничения.
Хитрости
Вот чего нет в программе ThreadMaster, так это разделение настроек на разные категории пользователей. Возможность классического определения настроек для конкретного пользователя тоже отсутствует. Возникает вопрос: как быть? Я все-таки нашел способ осуществить эту операцию. И пусть меня назовут извращенцем, пусть твердят, что это неправильно и криво, но все таки это СПОСОБ. А те неудобства, которые возникают вследствие использования этого метода, это лишь малая плата за бесплатность и уникальный функционал программы. Объясню суть.
Задача: Установить пользователю "П1" , который активно пользуется "тяжелыми" отчетами, квоту 10%, пользователю "П2", который интенсивно проводит документы, квоту 50%, а пользователю "П3", который занимается конфигурированием 1С, отменить квоту на 1С.
Решение: Создаем 3 копии файла "1cv7.exe" для каждого пользователя в том же каталоге, где находятся программные файлы 1С. Первую копию переименуем в "1cv7_П1.exe", вторую - в "1cv7_П2.exe", третью - в "1cv7_П3.exe". При необходимости установим соответствующие права на доступ пользователей к этим файлам. Ярлыки запуска 1С настроим для каждого пользователя свои, ведущие к тому или иному файлу. А дальше все просто - в ветке "Applications" добавляем ключи для первой и второй копий, устанавливаем им значения 10 и 50 соответственно, а в ветку "Exceptions" добавляем ключ для третьей копии. Таким образом можно устанавливать квоты как для конкретного пользователя, так и для групп пользователей.
Заключение
Использование процессорных квот, к сожалению, не является универсальным и единственно правильным способом стабилизировать работу терминал-сервера. Как я уже говорил во вступлении, существует целый ряд методов увеличить быстродействие 1С и решить проблему "узких мест". Но квотирование процессорного времени поможет на первых порах тем, кто уже начал задумываться о вложении денежных средств в апгрейд техники и программного обеспечения, и тем самым обеспечить большую отдачу капитальным вложениям в информационные технологии. Также эта методика практически во всех ситуациях решит проблему загрузки процессора "тяжелыми" отчетами, обеспечив более оперативное проведение документов и работу со списочными данными. Грамотно подобранные и протестированные параметры ThreadMaster позволят увеличить число одновременных пользовательских сеансов, справедливо разделить ресурсы между работниками и программами в зависимости от их реальных потребностей и степени важности оперативного получения и ввода информации. Кроме того, эта статья является практически уникальной в своем роде, полезной для администраторов серверных операционных систем, так как доказывает, что использование процессорных квот возможно и в Windows 2000 Server, а не только в Linux.
Использованные материалы и технические средства
Программа ThreadMaster версии 1.12 сборки 182 для операционных систем Windows 2000/2003 Server ( http://threadmaster.tripod.com/ ).
Статья "Настройка производительности терминального сервера" ( http://citrix.pp.ru/madden.html ).
Сервер P4 2400 / 1 Гб / 2*80 Гб IDE / 1*18 Гб SCSI / Windows 2000 Server / TSE / 20 users.
Начать дискуссию