В настоящее время мы размещаем два терминальных сервера, к которым наши пользователи могут подключаться через Citrix Metaframe. Одно из приложений, которые мы размещаем, - это внутреннее приложение, которое было запрограммировано давно и предназначено для складских операций нашей компании. Иногда пользователи будут запускать запросы в этом приложении, что приводит к сбою приложения, оставляя его использовать 95-100% ЦП. Затем пользователь может открыть вторую сущность приложения, но позже в тот же день она тоже выйдет из строя.
Я слежу за использованием ЦП серверов с помощью опроса SNMP. Поэтому каждый раз, когда сигнал тревоги сообщает мне, что сервер находится под большой нагрузкой, я вручную вхожу в систему как администратор, чтобы убить сбойный процесс. Это происходит примерно 2 раза в день. Терминальный сервер выходит из строя до тех пор, пока процесс не будет прерван (даже для входа в систему требуется 2-3 минуты), что сильно влияет на всех остальных пользователей.
Могу ли я использовать какой-нибудь инструмент или процедуру, чтобы помочь мне в этом? Мне он нужен для проверки высокой загрузки ЦП в определенных процессах. Если для приложения обнаружена высокая загрузка ЦП и наблюдается в течение X времени, УБИЙТЕ ЕГО! (он не может убить приложение, если загрузка ЦП временно возрастет).
Пробовали несколько утилит «Автоубийство», но не нашли ни одного, который со временем может нацеливаться на определенные файлы .exe для ЦП.
Диспетчер системных ресурсов Windows (WSRM) должен помочь вам в этом: http://technet.microsoft.com/en-us/library/cc732553.aspx (конфигурация терминальной службы Вот)
На самом деле мне никогда не приходилось использовать его, но он утверждает, что может создавать политики для управления объем памяти и ЦПУ ресурсы для приложений и сервисов. Вот статья направленный на SRV 2003
У меня нет конкретной рекомендации по использованию того, что вы хотите, но, по крайней мере, в качестве быстрого и грязного вы, вероятно, можете что-то сколотить вместе с парой инструментов Sysinternals. Возможно, вы сможете запустить это не интерактивно (по расписанию), но это определенно не будет услугой.
Как и все, что скомпоновано вместе, это может работать, а может и не работать, или быть стабильным в долгосрочной перспективе, но если предпочтительный вариант (исправить проблемное приложение) не является жизнеспособным, вы все равно переходите ко второй строке.
Инструменты Sysinternals теперь доступны в Microsoft по адресу http://technet.microsoft.com/en-us/sysinternals/default
Ты можешь использовать Powershell для этого. На первом этапе это простой однострочник, и вы можете запустить сценарий PowerShell с планировщиком задач, чтобы проверить, зависает ли приложение.
$process = Get-Process -Name $application
If ($process.CPU -igt 90.00) {Stop-Process -InputObject $process -Force}
Чтобы запустить скрипт, вы должны запустить PowerShell со скриптом в качестве аргумента:
powershell.exe "& '$path'"