Как определить процент использования ЦП пользователем на основе вывода команды sa?

Вопрос или проблема

Я использую sa -m, чтобы отображать детали использования процессора каждым пользователем в системе RHEL 7. Он отображает информацию в следующем формате.

oracle                              15335   88164.18re     176.77cp         0avio    167603k
root                                 9640    8294.42re      10.90cp         0avio     33737k
3rdeye                                250       0.33re       0.04cp         0avio     28358k
sshd                                    4       2.11re       0.00cp         0avio     22068k
dbus                                    2       0.00re       0.00cp         0avio      7600k
smmsp                                   2       0.00re       0.00cp         0avio     21408k

Я нашел этот сайт, который дает краткую информацию о полях. (https://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html#comments)

re – “реальное время” в минутах по часам
cp – сумма системного и пользовательского времени в минутах процессора
k – усредненное использование ядра процессора, в единицах по 1k

Есть ли способ рассчитать процент использования CPU для каждого пользователя из этих данных?

ОБНОВЛЕНИЕ 1:

Я добавляю это обновление, так как Алекс предлагает использовать скрипт, основанный на команде top, чтобы получить использование CPU по пользователю. Я использовал скрипт с этой логикой (top -b -n 1 -u $USERNAME | awk 'NR>7 { sum += $9; } END { print sum; }'), чтобы рассчитать использование CPU пользователя. Но если я внимательно посмотрю, то видно, что скрипт не дает вам правильное значение. Я как-то нашел причину этого. Когда вы запускаете top, он показывает значение использования CPU, а затем обновляет его каждые 3 (по умолчанию) секунды. Но начальное значение, похоже, остается постоянным каждый раз, когда вы запускаете top.

[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

Я выполнил top для пользователя oracle четыре раза, и он продолжает показывать одинаковые значения использования CPU. Я мог это ясно видеть, когда запускал top без опций -b и -n:

# top -u oracle
top - 08:47:44 up 3 days,  2:58,  2 users,  load average: 2.21, 1.69, 1.42
Tasks: 1084 total,   3 running, 1081 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

Обратите внимание, как это начинается с тех значений для использования CPU. Конечно, затем через 3 секунды он обновляется и начинает отображать правильные значения. Вот почему я хочу изменить свой подход к определению использования CPU по пользователю. Пожалуйста, исправьте меня, если я что-то упускаю.

Я могу предложить вам альтернативный способ. И он заключается в использовании пакета systat (ссылка для arch), и он предоставляет команды такие как mpstat, iostat и многие другие.

Вывод mpstat:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

19:51:50     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
19:51:50     all    2,18    0,03    0,58    0,07    0,00    0,02    0,00    0,00    0,00   97,13

Вывод iostat:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2,18    0,03    0,60    0,07    0,00   97,13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               3,13        28,15        80,47    1029654    2943525

Ответ или решение

Как определить процент использования ЦП пользователем на основе вывода команды sa

Для анализа использования процессора различными пользователями на системе RHEL 7 вы можете воспользоваться командой sa -m, которая предоставляет вывод в следующем формате:

имя_пользователя      PID     реальное_время     CPU_время     avio      k

Понимание полей вывода

  • реальное_время (re) — это общее время в минутах, которое процесс потратил на выполнение.
  • CPU_время (cp) — общее время, использованное процессом на стороне процессора (в минутах), включая как пользователю, так и системный режим.
  • k — среднее использование процессора в однойk-единице.

Шаги для расчета процента использования ЦП

Чтобы рассчитать процент использования процессора каждым пользователем, следуйте этим шагам:

  1. Измерьте общее доступное время ЦП: Это время можно определить, умножив количество минут на количество доступных ЦП. Например, если ваш сервер использует 4 ЦП и вы хотите узнать использование за 1 час (60 минут):

    Общее время ЦП = Количество ЦП * 60 минут = 4 * 60 = 240 минут
  2. Соберите данные из вывода команды sa -m: Извлеките значения cp для каждого пользователя. Эти значения показывают, сколько времени каждый процессор использовался для каждого пользователя.

  3. Рассчитайте процент использования ЦП для каждого пользователя: Для каждого пользователя используйте следующую формулу:

    Процент использования ЦП (%) = (CPU_время пользователя / Общее время ЦП) * 100

    Например, если CPU_время (cp) для пользователя "oracle" равно 176.77 минут:

    Процент использования ЦП для oracle = (176.77 / 240) * 100 = 73.24%

Сравните результаты для всех пользователей, используя аналогичный расчет.

Пример вычислений

Для вывода, приведенного в вашем вопросе, вы можете выполнить следующие расчеты:

  1. Общее время ЦП:

    4 ЦП * 60 мин  = 240 мин
  2. Рассчитываем процент использования для каждого пользователя:

    • oracle:

      (176.77 / 240) * 100 ≈ 73.24%
    • root:

      (10.90 / 240) * 100 ≈ 4.54%
    • 3rdeye:

      (0.04 / 240) * 100 ≈ 0.017%
    • sshd:

      (0.00 / 240) * 100 = 0%
    • dbus:

      (0.00 / 240) * 100 = 0%
    • smmsp:

      (0.00 / 240) * 100 = 0%

Заключение

Используя указанные выше шаги, вы можете сделать детализированный анализ загрузки процессора пользователями на вашем RHEL 7 сервере. Этот подход замечателен тем, что он не зависит от динамического состояния системы, как это делает команда top, что делает ваши результаты более надежными и стабильными в анализе.

Для дальнейшего анализа и мониторинга использования ресурсов можно также рассмотреть использование других инструментов, таких как mpstat или iostat, предоставляемых пакетом sysstat. Эти инструменты могут предложить более детализированную информацию и графики о работе системы, что облегчит дальнейший анализ нагрузки на ЦП.

Оцените материал
Добавить комментарий

Капча загружается...