День добрый!
Есть необходимость мониторить сервер 1С. Он запускает для работы 2-6 процессов с именем rphost.exe.
Если я пытаюсь мониторить количество занимаемой ими памяти через Process.WkSet(rphost.exe) то все работает вроде нормально, вижу общую занимаемую ими память(примерно прикинул, вроде сходится все), но когда пытаюсь посмотреть загрузку процессора через \Процесс(rphost)\% загруженности процессора ожидаемо получаю данные только по одному(видимо у кого PID меньше) процессу, знаю, что это вроде ограничение самой Windows и ее счетчиков производительности. Нет ли аналога этого счетчика в агенте NetXMS? Либо какого-то лайфхака как мониторить общую загрузку CPU этими процессами?
			
			
			
				Можно собирать Process.CPUTime(rphost.exe) - это даст общее время использованое всеми процессами с таким названием в миллисекундах. Затем в трансформации включить подсчет разницы (delta calculation), и добавить формулу пересчета в проценты:
return $1 * 100 / 60000;
(принимаем что собирается каждые 60 секунд, если чаще, то соответственно поменять интервал в формуле).
			
			
			
				Спасибо огромное за быстрый ответ, попробую это реализовать! Отпишусь по результату
			
			
			
				Возникли вопросы:
- Какой тип delta calculation выбирать? Simple Delta?
- Как правильно трактовать данный параметр, он ведь будет не в процентах, как обычная загрузка процессора? Какая цифра будет соответствовать 100% загрузки процессора?
-  Если время сбора данных 5 секунд, нужно ставить "/5000" в формуле трансформации? Тут вроде все ясно, но на всякий случай решил уточнить.
				Да, "simple delta". Можно еще выбрать "average per second" - тогда будет средняя загрузка за секунду - только делить в таком случае надо будет на 1000.
Это будет процент процессорного времени, затраченный на исполнение данного процесса. Так что по идее это та-же самая закрузка в процентах - просто когда она считается для системы в целом, то это процент процессорного времени, затраченный на исполнение всех процессов в системе.
Да, надо делить на 5000.
			
			
			
				Все сделал, как вы писали:
Process.CPUTime(rphost.exe)
Опрос раз в минуту
Simple Delta
return $1 * 100 / 60000;
Но вот вижу странные показатели сегодня, либо они не странные, а я просто не могу их правильно интерпретировать.
Значения больше 100, это как может быть?
			
			
			
				Это процент использованного процессорного времени - 100% это полная загрузка, т.е. процессор вообще не простаивал. Но если система многопроцессорная, то 100% это полная загрузка одного ядра - поскольку за каждый интервал времени максимальное кол-во потраченного процессорного времени будет кол-во ядер * период. Загрузка процессом 200% означает что процесс полностью использовал 2 ядра. Если хотите процент от общей мощности системы, то надо делить значение на кол-во процессоров.
			
			
			
				Ааа, вот теперь понятно, да выглядит логично, спасибо большое!