Как получить общее использование процессора в Linux (С++)
Я пытаюсь получить общее использование процессора в%. Сначала я должен начать с того, что "top" просто не будет делать, так как существует задержка между дампами процессора, для этого требуется 2 дампа и несколько секунд, которые зависают моей программой (я не хочу давать ей собственный поток)
следующая вещь, которую я пробовал, - это "ps", которая мгновенная, но всегда дает очень большое количество всего (20+), и когда я действительно получил свой процессор, чтобы что-то сделать, он остался примерно в 20...
Есть ли другой способ, которым я мог бы получить общее использование процессора? Неважно, если это более чем на одну секунду или более длительный период времени... Более длительные периоды были бы более полезными.
Ответы
Ответ 1
cat/proc/stat
http://www.linuxhowtos.org/System/procstat.htm
Я согласен с этим ответом выше. Строка cpu в этом файле дает общее количество "jiffies", которые ваша система потратила на различные виды обработки.
Что вам нужно сделать, так это взять 2 показания этого файла, разделенные тем интервалом времени, который вам требуется. Числа увеличивают значения (при условии целочисленного опрокидывания), поэтому, чтобы получить% cpu, вам нужно вычислить, сколько раз превысило ваш интервал, по сравнению с тем, сколько потраченных jiffies тратили на выполнение работы.
например.
Предположим, что в 14:00:00 вы
cpu 4698 591 262 8953 916 449 531
total_jiffies_1 = (сумма всех значений) = 16400
work_jiffies_1 = (сумма пользователя, nice, system = первые 3 значения) = 5551
и в 14:00:05 вы
cpu 4739 591 289 9961 936 449 541
total_jiffies_2 = 17506
work_jiffies_2 = 5619
Таким образом, использование% cpu за этот период:
work_over_period = work_jiffies_2 - work_jiffies_1 = 68
total_over_period = total_jiffies_2 - total_jiffies_1 = 1106
% cpu = work_over_period/total_over_period * 100 = 6.1%
Надеюсь, что это поможет.
Ответ 2
Попробуйте прочитать /proc/loadavg
. Первые три числа - это количество фактически запущенных процессов (т.е. Использование процессора), усредненные за последние 1, 5 и 15 минут соответственно.
http://www.linuxinsight.com/proc_loadavg.html
Ответ 3
Прочтите /proc/cpuinfo
, чтобы найти количество ЦПУ/ядер, доступных для систем.
Вызовите getloadavg()
(или, альтернативно, прочитайте /proc/loadavg
), возьмите первое значение, умножьте его на 100 (чтобы преобразовать в проценты), разделите на количество CPU/ядер. Если значение больше 100, обрезайте его до 100. Сделано.
Соответствующая документация: man getloadavg
и man 5 proc
N.B. Средняя загрузка, обычная для * NIX-систем, может быть более 100% (на процессор/ядро), поскольку она фактически измеряет количество процессов, готовых для запуска планировщиком. С метрикой CPU, подобной Windows, когда нагрузка составляет 100%, вы действительно не знаете, является ли это оптимальным использование ресурсов ЦП или система перегружена. В разделе * NIX оптимальное использование CPU loadavg даст вам значение ~ 1.0 (или 2.0 для двойной системы). Если значение намного больше, чем число CPU/ядер, тогда вам может понадобиться подключить дополнительные ЦП в поле.
В противном случае скопируйте файловую систему /proc
.
Ответ 4
cat/proc/stat
http://www.linuxhowtos.org/System/procstat.htm
Ответ 5
Я предлагаю запустить два файла...
/proc/stat и /proc/cpuinfo.
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt