Подтвердить что ты не робот

Как получить общее использование процессора в Linux (С++)

Я пытаюсь получить общее использование процессора в%. Сначала я должен начать с того, что "top" просто не будет делать, так как существует задержка между дампами процессора, для этого требуется 2 дампа и несколько секунд, которые зависают моей программой (я не хочу давать ей собственный поток)

следующая вещь, которую я пробовал, - это "ps", которая мгновенная, но всегда дает очень большое количество всего (20+), и когда я действительно получил свой процессор, чтобы что-то сделать, он остался примерно в 20...

Есть ли другой способ, которым я мог бы получить общее использование процессора? Неважно, если это более чем на одну секунду или более длительный период времени... Более длительные периоды были бы более полезными.

4b9b3361

Ответ 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.