Мониторинг загрузки процессора несколькими одноименными процессами (Решено)

Started by l_d, August 11, 2017, 05:10:49 PM

Previous topic - Next topic

l_d

День добрый!
Есть необходимость мониторить сервер 1С. Он запускает для работы 2-6 процессов с именем rphost.exe.
Если я пытаюсь мониторить количество занимаемой ими памяти через Process.WkSet(rphost.exe) то все работает вроде нормально, вижу общую занимаемую ими память(примерно прикинул, вроде сходится все), но когда пытаюсь посмотреть загрузку процессора через \Процесс(rphost)\% загруженности процессора ожидаемо получаю данные только по одному(видимо у кого PID меньше) процессу, знаю, что это вроде ограничение самой Windows и ее счетчиков производительности. Нет ли аналога этого счетчика в агенте NetXMS? Либо какого-то лайфхака как мониторить общую загрузку CPU этими процессами?

Victor Kirhenshtein

Можно собирать Process.CPUTime(rphost.exe) - это даст общее время использованое всеми процессами с таким названием в миллисекундах. Затем в трансформации включить подсчет разницы (delta calculation), и добавить формулу пересчета в проценты:

return $1 * 100 / 60000;

(принимаем что собирается каждые 60 секунд, если чаще, то соответственно поменять интервал в формуле).

l_d

Спасибо огромное за быстрый ответ, попробую это реализовать! Отпишусь по результату

l_d

Возникли вопросы:

  • Какой тип delta calculation выбирать? Simple Delta?
  • Как правильно трактовать данный параметр, он ведь будет не в процентах, как обычная загрузка процессора? Какая цифра будет соответствовать 100% загрузки процессора?
  • Если время сбора данных 5 секунд, нужно ставить "/5000" в формуле трансформации? Тут вроде все ясно, но на всякий случай решил уточнить.

Victor Kirhenshtein

Да, "simple delta". Можно еще выбрать "average per second" - тогда будет средняя загрузка за секунду - только делить в таком случае надо будет на 1000.

Это будет процент процессорного времени, затраченный на исполнение данного процесса. Так что по идее это та-же самая закрузка в процентах - просто когда она считается для системы в целом, то это процент процессорного времени, затраченный на исполнение всех процессов в системе.

Да, надо делить на 5000.

l_d

Все сделал, как вы писали:
Process.CPUTime(rphost.exe)
Опрос раз в минуту
Simple Delta
return $1 * 100 / 60000;

Но вот вижу странные показатели сегодня, либо они не странные, а я просто не могу их правильно интерпретировать.
Значения больше 100, это как может быть?

Victor Kirhenshtein

Это процент использованного процессорного времени - 100% это полная загрузка, т.е. процессор вообще не простаивал. Но если система многопроцессорная, то 100% это полная загрузка одного ядра - поскольку за каждый интервал времени максимальное кол-во потраченного процессорного времени будет кол-во ядер * период. Загрузка процессом 200% означает что процесс полностью использовал 2 ядра. Если хотите процент от общей мощности системы, то надо делить значение на кол-во процессоров.

l_d

Ааа, вот теперь понятно, да выглядит логично, спасибо большое!