2015-12-05 6 views
1

Мне нужно вычислить использование процессора несколькими процессами на данном сервере. Мало кто из вариантов, как показано нижеЭффективный способ вычислить использование процессора несколькими процессами в linux

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

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

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

начало -b -n 2 -d 1 | grep 'mysqld' | tail -n 1

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

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

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

начало -b -n 2 -d 1 | grep 'mysqld \ | apache' | tail -n 1

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

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

How to calculate the CPU usage of a process by PID in Linux from C?

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

+0

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

ответ

0

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

+0

ok.But, получая все PID, а затем для каждого PID, получающего его использование процессора в 2 момента от proc/stats, не потребуется больше времени, и если я хочу нажимать эти показатели с зернистостью секунды. – crackerplace

+0

Если я хочу сделать это в linux, какой язык будет лучше shell или python или любой другой, такой как C. – crackerplace

+1

Я думаю, что Python будет отличным выбором, по крайней мере, для первой версии. Если случается, что вам нужно больше скорости позже, вы всегда можете переписать часть ее в C. –

Смежные вопросы