Эффективный способ рассчитать использование процессора несколькими процессами в Linux

Мне нужно рассчитать использование процессора несколькими процессами на данном сервере. Немного из вариантов как ниже

а) Хотя мы можем использовать ps, чтобы найти использование процессором процессоров, ps дает использование процессором процессором в течение его времени жизни, а не для мгновенного. Конечно, когда я имею в виду мгновенное, я имел в виду некоторый небольшой конкретный период, например, в течение 1 секунды или около того, потому что в любой момент процессор используется процессом или нет.

b) vmstat не отображает использование процессора с точки зрения процесса.

c) Мы можем использовать top, чтобы найти процессорное использование процесса.

top -b -n 2 -d 1 | grep 'mysqld' | хвост -n 1

При n=1 команда top ведет себя больше как ps, где в ней указывается использование процессора процессом с момента загрузки, и, следовательно, использование n=2 и игнорирование первой строки хвостом даст использование процессора в этот момент.

https://superuser.com/questions/609949/what-are-the-methods-available-to-get-the-cpu-usage-in-linux-command-line

Но игнорирование первых нескольких строк не будет работать с несколькими строками grep (именами процессов), и в тех случаях, когда процессы могут не всегда находиться в начале, поскольку они продолжают изменять свои состояния.

top -b -n 2 -d 1 | grep 'mysqld \ | apache' | хвост -n 1

Таким образом, один из способов сделать это для нескольких процессов состоит в том, чтобы поддерживать структуру типа карты, а затем использовать только процессоры тех процессов, которые появляются только во второй раз. Но не уверен, насколько это эффективно. Делать топ каждый раз для определенного Я полагаю, что процесс недостаточно эффективен, или же он похож на grep с несколькими процессами на одной вершине.

4) Поскольку top внутренне использует информацию /proc/stats, мы можем явно реализовать эту логику самостоятельно.

Как рассчитать загрузку ЦП процесса по PID в Linux из C?

Какой из них может быть лучшим вариантом?

1 ответ

Решение

Вы должны сделать это с помощью /proc как вы уже обнаружили. Или, возможно, использовать какую-то библиотеку более высокого уровня, если ваш язык выбора предлагает один. Разбор вывода ps а также top ничего не выигрывает. Все необходимые данные находятся в /procвам просто нужно быть осторожным, чтобы проверять подлинность каждого процесса с течением времени, в случае, если PID перерабатываются во время сбора данных (в большинстве систем переработка PID не происходит в течение нескольких секунд, поэтому она работоспособна).

Другие вопросы по тегам