откуда top получает данные в реальном времени - PullRequest
10 голосов
/ 28 января 2011

Откуда top приложение получает свои данные в Linux? Мне было бы интересно узнать данные о загрузке процессора / pid в режиме реального времени (почти всю документацию я прочитал на справочной странице / proc / pid, но информации там нет).

Пид - это jboss. Мне нужны легкие данные (легко экспортировать).

Ответы [ 2 ]

11 голосов
/ 28 января 2011

Если сомневаетесь, используйте strace (1)!

open("/proc/2/stat", O_RDONLY)    = 4
open("/proc/2/statm", O_RDONLY)   = 4
open("/proc/3/stat", O_RDONLY)    = 4
open("/proc/3/statm", O_RDONLY)   = 4
5 голосов
/ 28 января 2011

Как указано в proc (5) , в файле /proc/(pid)/stat есть поля:

utime %lu

Количество времени, в которое этот процесс был запланирован в пользовательский режим, измеренный в тактах (разделить на sysconf (_SC_CLK_TCK). Это включает время гостя, время гостя (время потратил на запуск виртуального процессора, смотрите ниже), так что приложения, которые не знают о поле времени гостя делать не потерять это время от их расчеты.

stime %lu

Количество времени, которое это процесс был запланирован в ядре режим, измеренный в тактах (делим по sysconf (_SC_CLK_TCK).

Чтобы определить использование процессора для определенного процесса, используйте эти поля. Процесс верхнего уровня агрегирует загрузку ЦП для всех потоков; другие разделы можно найти в /proc/(pid)/task.

.

Если вы предпочитаете получать уведомления, когда время процессора превышает какое-либо пороговое значение, вы можете использовать clock_getcpuclockid , чтобы получить дескриптор его часов процессора, затем timer_create или timerfd чтобы получать уведомления при достижении указанного уровня. Однако обратите внимание, что межпроцессные таймеры cputime являются дополнительной функцией в спецификации POSIX и могут не поддерживаться (я не тестировал).

...