Получение статистики по процессорам


17

Меня интересует текущее использование cpu - именно cpu% и wait% - для каждого потока в конкретном приложении. Можно ли получить эту информацию откуда-то?

Я знаю, что это topможет разделить информацию по реальным потокам (те, что с pid), но это не показывает разделение использования процессора системой / пользователем / ожиданием для каждого из них. Я также хотел бы каким-то образом регистрировать эту информацию. Знаете ли вы какие-либо приложения (или API), которые могут сделать это?

Ответы:


4

Я бы посмотрел в SystemTap . Этот инструмент, безусловно, даст вам то, что вы хотите. Вот этот пример профилирования потоков; не знаю, есть ли у вас все, что вы хотите, но вы можете изменить его, чтобы он сделал.



12

Процент использования процессора на поток, который вы можете получить с помощью psкоманды:

 ps -emo %cpu,pid,user,args

Способ его расчета описан в ps manpage:

В настоящее время это использованное процессорное время, деленное на время выполнения процесса (отношение cputime / realtime), выраженное в процентах.


Я действительно интересуюсь как временем процессора, так и временем ожидания. PS не может справиться со вторым, к сожалению.
viraptor

примечание к себе: замените -e на -C java и pid на spid для идентификаторов потоков в java-приложении
kellogs

2
больше примечание к себе: ps -To pcpu,tid -C java | sort -r -k1 | moreдля свиней темы в приложении Java. ps --sort=pcpuничего не достигает; лучше полагаться на оболочку для сортировки.
kellogs

Очень полезный @kellogs, спасибо. Я бы добавил -nили -gотсортировал, чтобы «10» показывалось выше «2», например.
EM0

0

Может быть, посмотрите на htop, вы можете настроить довольно много с ним.


к сожалению, он не может разделить процессор по пользователю / системе / времени ожидания для определенного потока - только для всей машины
viraptor

Да, но как мне это сделать?
rmobis

0

Ты пробовал сар? Он может получить много информации даже на уровне pid.



0

Я наткнулся на это во встроенной системе, где у нас нет причудливых инструментов, чтобы разобраться в этом.

Для этого я использовал cpuacct cgroupи поместил каждый поток в свою папку. Таким образом, я смог измерить их использование.

Иерархия выглядела так:

my-app.service
|-tid1
|-tid2
|-tid3

Затем я изменил его на

my-app.service
|-dir1
|  -tid1
|-dir2
|  -tid2
|-dir3
|  -tid3
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.