Мониторинг процесса (ов), Завершение работы при превышении порога загрузки ЦП - PullRequest
2 голосов
/ 30 апреля 2010

Я новичок в WMI и System.Diagnostics и т. Д. Мне нужно написать что-то (сервис?), Который контролирует несколько процессов для загрузки процессора%. Когда я нахожусь в диспетчере задач, мне нужен столбец ЦП (т. Е. Процент).

Мне нужно иметь возможность запустить это на удаленной машине, и он должен проверить использование процессора каждую секунду или около того. Когда использование превышает 30%, мне нужно, чтобы служба-нарушитель автоматически перезапускалась.

Я прочитал все (читай: большинство) связанных вопросов, и я думаю, что PerformanceCounter, вероятно, тот, который мне нужно использовать, но я не уверен, нужен ли мне один из них для каждого процесса и как найти процесс (он должен быть основан на имени, а не на PID).

Может кто-нибудь, пожалуйста, посоветуйте.
Резюме

  1. Я не хочу перебирать все процессы на машине (если я могу избежать этого)
  2. Мне нужен процессор% использования
  3. Мне нужно перезапустить процесс, если загрузка превышает 30%.

Спасибо

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Вы можете рассмотреть источники одного из моих старых проектов свободных программ: Служба SETI @ Home . Он реализовал службу Windows, которая приостанавливает свой клиентский процесс (клиент SETI @ Home), если загрузка ЦП превышает определенное значение. Он даже добавил пару других сексуальных поворотов, таких как приостановка в любое время, когда некоторые другие процессы запускаются (например, ваша любимая игра), перезапуски при сбое, встроенный веб-сервер и т. Д.

Главным недостатком будет то, что источники находятся на Аде, но большинство людей считают, что Ада легче читать, чем большинство других языков, с которыми они не знакомы.

IIRC, основная суть кода в том, что есть область реестра Windows, в которой вы можете просмотреть информацию о производительности системы. В основном все, что доступно внутри perfmon, может быть прочитано программой из системного реестра.

0 голосов
/ 18 мая 2010

Я наконец-то решил свою проблему, написав оболочку для PerformanceCounter и Process. У меня есть класс с именем ProcessMonitor, который имеет PerformanceCounter и Process в качестве свойств. Я создал еще один класс с именем ProcessMonitorList, который делает чуть больше, чем содержит List. Затем мое основное приложение командной строки имеет некоторое время (true), которое запрашивает все процессы с предоставленным именем и выплевывает каждую секунду их использование ЦП. Если использование превышает пороговое значение, процесс прекращается, и при желании на указанный адрес электронной почты отправляется электронное письмо.

...