Как получить общее использование CPU в Linux с помощью C++

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

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

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

37
задан jww 18 May 2018 в 00:01
поделиться

5 ответов

cat /proc/stat

http://www.linuxhowtos.org/System/procstat.htm

Я согласен с этим ответом выше.Строка cpu в этом файле показывает общее количество "jiffies", которое ваша система потратила на выполнение различных типов обработки.

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

например. Предположим, в 14:00:00 у вас есть

cpu 4698 591 262 8953 916 449 531

total_jiffies_1 = (сумма всех значений) = 16400

work_jiffies_1 = (сумма пользователей, красиво, система = первые 3 values) = 5551

и в 14:00:05 у вас будет

cpu 4739 591 289 9961 936 449 541

total_jiffies_2 = 17506

work_jiffies_2 = 5619

Таким образом, процент использования процессора за этот период составляет:

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%

Надеюсь, это немного поможет.

80
ответ дан 27 November 2019 в 04:20
поделиться

Я предлагаю запустить два файла ...

/ proc / stat и / proc / cpuinfo.

http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt

0
ответ дан 27 November 2019 в 04:20
поделиться

Попробуйте прочитать /proc/loadavg. Первые три числа - это количество реально запущенных процессов (т.е. использующих ЦП), усредненное за последние 1, 5 и 15 минут соответственно.

http://www.linuxinsight.com/proc_loadavg.html

6
ответ дан 27 November 2019 в 04:20
поделиться

Прочтите / proc / cpuinfo , чтобы узнать количество процессоров / ядер, доступных для системы. Вызовите getloadavg () (или, альтернативно, прочтите / proc / loadavg ), возьмите первое значение, умножьте его на 100 (для преобразования в проценты), разделите на количество CPU / ядра. Если значение больше 100, обрежьте его до 100. Готово.

Соответствующая документация: man getloadavg и man 5 proc

Примечание. Средняя нагрузка, обычная для систем * NIX, может быть более 100% (на процессор / ядро), потому что она фактически измеряет количество процессов, готовых к запуску планировщиком. С метрикой ЦП, подобной Windows, когда загрузка составляет 100%, вы действительно не знаете, оптимально ли это использовать ресурсы ЦП или система перегружена. Под * NIX оптимальное использование CPU loadavg даст вам значение ~ 1.0 (или 2.0 для двойной системы). Если значение намного больше, чем число ЦП / ядер, вы можете подключить дополнительные ЦП к коробке.

В противном случае копайте файловую систему / proc .

6
ответ дан 27 November 2019 в 04:20
поделиться
1
ответ дан 27 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: