Отримання статистики процесора на одну нитку


17

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

Я знаю, що topможе розділити інформацію на реальну нитку (ті, що мають pid), але вона не показує розбиття використання системи / користувача / чекання процесора для кожного з них. Я також хотів би дещо занести цю інформацію. Чи знаєте ви будь-які програми (або apis), які можуть це зробити?

Відповіді:


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.