Системные ресурсы и производительность

Основные понятия

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

Физическое ядро

Это реальное ядро процессора, которое можно увидеть. Оно имеет независимые компоненты схемы, кеши L1 и L2 и может независимо выполнять инструкции. Процессор может иметь несколько физических ядер.

Логическое ядро

Ядро, которое существует на логическом уровне в одном физическом ядре. Как правило, физическое ядро соответствует потоку. Однако, если гиперпоточность включена и число гиперпотоков равно N, физическое ядро можно разделить на N логических ядер. Вы можете выполнить команду lscpu, чтобы проверить количество ЦП на сервере, а также количество физических и логических ядер в каждом ЦП.

Разграничение и позиционирование

Стандартные инструменты для анализа производительности ЦП

uptime

Утилита выводит среднюю нагрузку системы. Можно просмотреть последние три значения, чтобы определить тренд изменения средней нагрузки.

Если средняя нагрузка превышает количество ЦП, ЦП становится недостаточно для обслуживания потоков, поэтому некоторые потоки находятся в состоянии ожидания.

Если средняя нагрузка меньше количества ЦП, значит остаются незагруженные процессоры.

Пример вывода утилиты uptime:

11:55:34 up 3 days, 21:27,  2 users,  load average: 0.00, 0.00, 0.00

vmstat

Утилита динамически отслеживает использование системных ресурсов и проверяет, какая фаза потребляет больше всего таких ресурсов.

Для просмотра параметров утилиты выполните команду:

vmstat -h

Пример вывода vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 5445568 173568 970624    0    0     0     1   30   23  0  0 100  0  0
 0  0      0 5444224 173568 970624    0    0     0     0  107   82  0  0 100  0  0
 0  0      0 5444224 173568 970624    0    0     0     0  144  115  0  0 100  0  0
 0  0      0 5444224 173568 970624    0    0     0     0  126  103  0  0 100  0  0
 0  0      0 5444224 173568 970624    0    0     0     0  129  106  0  0 100  0  0
 0  0      0 5444224 173568 970624    0    0     0     0   96   76  0  0 100  0  0

Поля в выходных данных команды:

  • procs — информация о процессах.

  • memory — информация о памяти.

  • swap — информация о разделе подкачки.

  • io — информация о чтении/записи диска.

  • system — информация о системе.

  • cpu — информация о ЦП.

    • us — процент вычислительного времени ЦП, которое потребляют процессы, не относящиеся к ядру.

    • sy — процент вычислительного времени ЦП, которое потребляют процессы ядра.

    • id — простой.

    • wa — процент ресурсов ЦП, потребляемых при ожидании операций ввода-вывода.

    • st: процент ресурсов ЦП, недополученных виртуальными машинами.

sar

Утилита анализирует производительность системы, отслеживает текущие действия и конфигурации, а также архивирует накопленные статистические данные и создает по ним отчеты.

sar -u 3 5

Пример вывода:

Linux 5.10.0-5.10.0.24.oel.aarch64 (localhost.localdomain)      08/22/2022      _aarch64_     (4 CPU)

02:46:06 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:46:09 PM     all       0.00     0.00      0.08      0.00      0.00     99.92
02:46:12 PM     all       0.00     0.00      0.08      0.00      0.00     99.92
02:46:15 PM     all       0.08     0.00      0.00      0.00      0.00     99.92
02:46:18 PM     all       0.00     0.00      0.00      0.00      0.00    100.00
02:46:21 PM     all       0.00     0.00      0.00      0.00      0.00    100.00
Average:        all       0.02     0.00      0.03      0.00      0.00     99.95

Поля в выходных данных:

  • %user — процент процессорного времени, потребляемого в пользовательском режиме.

  • %nice — процент процессорного времени, потребляемого процессом, приоритет планирования которого изменен с помощью nice в пользовательском режиме.

  • %system — процент процессорного времени, используемого в системном режиме.

  • %iowait — процент времени, затраченного ЦП на ожидание операций ввода-вывода диска в состоянии простоя.

  • %steal — процент времени, используемого для ожидания других вычислений на виртуальном ЦП с использованием технологий виртуализации ОС.

  • %idle — процент времени простоя ЦП.

ps

Утилита отображает запущенные процессы.

ps -le

Пример вывода:

F S   UID    PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1       0  0  80   0 -  2706 ep_pol ?        00:00:08 systemc
1 S     0      2       0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0      3       2  0  60 -20 -     0 rescue ?        00:00:00 rcu_gp
1 I     0      4       2  0  60 -20 -     0 rescue ?        00:00:00 rcu_par_g
1 I     0      6       2  0  60 -20 -     0 worker ?        00:00:00 kworker/0
1 I     0      8       2  0  60 -20 -     0 rescue ?        00:00:00 mm_percpu

Процессы, запущенные в текущей оболочке:

ps -l

Пример вывода:

F S   UID    PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0  21198   21197  0  80   0 -   132 do_wai pts/0    00:00:00 bash
4 R     0  21488   21198  0  80   0 -   177 -      pts/0    00:00:00 ps

top

Утилита динамически и непрерывно отслеживает текущее состояние процессов и отображает процессы, которые потребляют больше всего ресурсов ЦП.

top

Пример вывода:

top - 15:15:52 up 4 days, 47 min,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 117 total,   1 running, 116 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.0 sy,  0.0 ni, 99.8 id,  0.0 wa, 0.1 hi,  0.0 si,  0.0 st
MiB Mem :   6790.2 total,   5281.9 free,    360.4 used,  1147.0 buff/cache
MiB Swap:   2139.9 total,   2139.9 free,      0.0 used.  6059.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  21498 root      20   0   12480   6400   3776 R   0.3   0.1   0:00.05 top
      1 root      20   0  173184  19904   9344 S   0.0   0.3   0:06.65 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
      9 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude
     10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.05 ksoftirqd/0

Память

Основные понятия

Память является важным компонентом компьютера и используется для временного хранения рабочих данных в ЦП и данных, которыми система обменивается с внешней памятью, например аппаратным обеспечением. В частности, архитектура неравномерного доступа к памяти (NUMA) — это принцип построения памяти, разработанный для многопроцессорного компьютера. Время доступа к памяти зависит от расположения памяти относительно процессора. В режиме NUMA процессор обращается к локальной памяти быстрее, чем к нелокальной (такая память находится в другом процессоре или разделяется между процессорами).

Стандартные инструменты и методы для анализа памяти

free

Утилита отображает состояние системной памяти.

free -m

Пример вывода:

       total    used    free    shared    buff/cache    available
Mem:    6790     359    5210        23          1220         6058
Swap:   2139       0    2139

Поля в выходных данных

  • total — общий объём памяти.

  • used — используемая память.

  • free свободная память.

  • shared — общий объём памяти, совместно используемой несколькими процессами.

  • buff/cache — общее количество буферов и кешей.

  • available — приблизительный доступный объём памяти для запуска нового приложения без использования подкачки.

vmstat

Утилита динамически отслеживает системную память и ее использование.

Пример.

vmstat -a

Пример вывода:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  -      0 5260096 856256 583424    0    0     0     0   13    6  0  0 100  0  0

Поле, относящееся к памяти, в выходных данных команды описано ниже:

  • memory — информация о памяти:

    • swpd —  использование виртуальной памяти в КБ.

    • free — объём свободной памяти в КБ.

    • inact — объём неактивной памяти в КБ.

    • active — объём активной памяти в КБ.

sar

Утилита отслеживает использование памяти в системе.

sar -r 2 3

Пример вывода:

Linux 5.10.0-5.10.0.24.oel.aarch64 (localhost.localdomain)      08/22/2022      _aarch64_       (4 CPU)

05:00:16 PM kbmmefree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
05:00:18 PM   5372224   6202688    283904      4.08    190528    957760    483136      5.28    478400    852288       192
05:00:20 PM   5372224   6202688    283904      4.08    190528    957760    483136      5.28    478400    852288       192
05:00:22 PM   5372224   6202688    283904      4.08    190528    957760    483136      5.28    478400    852288       192
Average:      5372224   6202688    283904      4.08    190528    957760    483136      5.28    478400    852288       192

Поля в выходных данных:

  • kbmemfree — неиспользуемый объём памяти.

  • kbmemused — используемый объём памяти.

  • %memused — процент занятого объёма памяти.

  • kbbuffers — объём данных, хранящихся в буфере.

  • kbcached — объём доступа к данным во всех областях системы.

numactl

Утилита отображает конфигурацию и состояние узлов NUMA.

numactl -H

Пример вывода:

available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 6790 MB
node 0 free: 5181 MB
node distances:
node   0
  0:  10
numastat

Пример вывода:

                     node0
numa_hit           1620067
numa_miss                0
numa_foreign             0
interleave_hit        3060
local_node         1620067
other_node               0

Поля в выходных данных команды numstat:

  • numa_hit — количество обращений ядра ЦП к локальной памяти на узле.

  • numa_miss — количество обращений ядра узла к памяти других узлов.

Ввод-вывод

Основные понятия

Под вводом-выводом понимаются операции ввода-вывода. Ввод обозначает операцию получения сигналов или данных системой, а вывод — операцию отправки сигналов или данных из системы. Для сочетания ЦП и оперативной памяти любая информация, входящая туда или исходящая оттуда, рассматривается как операции ввода-вывода.

Стандартные инструменты для анализа производительности ввода-вывода

iostat

Утилита выводит статистику обо всех подключенных дисках.

iostat -d -k -x 100

Пример вывода:

Linux 5.10.0-5.10.0.24.oel.aarch64 (localhost.localdomain)      08/22/2022      _aarch_64       (4 CPU)

Device  r/s rkB/s rrqm/s %rrqm r_await rareq-sz  w/s wkB/s wrqm/s %wrqm w_await wareq-sz  d/s dkB/s drqm/s %drqm d_await dareq-sz  f/s f_await aqu-sz %util
dm0    0.03  0.86   0.00  0.00    0.33    30.28 0.20  2.29   0.00  0.00    1.83    11.29 0.00  0.00   0.00  0.00    0.00     0.00 0.00    0.00   0.00  0.04
dm1    0.00  0.01   0.00  0.00    0.10    72.71 0.00  0.00   0.00  0.00    0.00     0.00 0.00  0.00   0.00  0.00    0.00     0.00 0.00    0.00   0.00  0.00
vda    0.02  1.20   0.01 36.85    0.35    58.60 0.10  2.32   0.11 51.55    3.90    23.49 0.00  0.00   0.00  0.00    0.00     0.00 0.03   12.19   0.00  0.04

Поля в выходных данных:

  • Device — имя устройства мониторинга.

  • r/s — количество запросов на чтение, выполняемых устройством в секунду (после объединения).

  • rKB/s — количество КБ, считываемых с диска в секунду.

  • rrqm/s — количество операций чтения, объединяемых в очередь запросов в секунду.

  • %rrqm — процент запросов на чтение, объединенных до их отправки на устройство.

  • r_await — среднее время, затрачиваемое на каждый запрос на чтение.

  • rareq-sz — средний размер запросов на чтение, отправляемых на устройство, в КБ.

  • w/s — количество запросов на запись, выполняемых устройством в секунду (после объединения).

  • wKB/s — количество КБ, записываемых на диск в секунду.

  • wrqm/s — количество операций записи, объединяемых в очередь запросов в секунду.

  • %wrqm — процент запросов на запись, объединенных до их отправки на устройство.

  • w_await — среднее время, затрачиваемое на каждый запрос на запись.

  • wareq-sz — средний размер запросов на запись, отправляемых на устройство, в КБ.

  • d/s — количество запросов на сброс, обрабатываемых устройством в секунду.

  • dKB/s — количество секторов (КБ), отбрасываемых устройством в секунду.

  • drqm/s — количество запросов на сброс, объединяемых в очередь устройства в секунду.

  • %drqm — процент запросов на сброс, объединяемых до их отправки на устройство.

  • d_await — среднее время отправки запросов на сброс на устройство для их обслуживания.

  • dareq-sz — средний размер запросов на сброс, отправляемых на устройство, в КБ.

  • f/s — количество запросов на обновление, выполняемых устройством в секунду (после объединения).

  • f_await — среднее время отправки запросов на обновление на устройство для их обслуживания.

  • aqu-sz — средняя длина очереди запросов, отправляемых на устройство.

  • %util — процент времени операций ввода-вывода, т. е. использование соответствующих ресурсов.

sar

Утилита отображает производительность операций чтения и записи для системного диска.

sar -d 3 5

Пример вывода:

Linux 5.10.0-5.10.0.24.oel.aarch64 (localhost.localdomain)      08/22/2022      _aarch_64       (4 CPU)

02:48:13 PM   DEV   tps  rkB/s  wkB/s  dkB/s  areq-sz  aqu-sz  await  %util
02:48:16 PM   vda  0.00   0.00   0.00   0.00     0.00    0.00   0.00   0.00
02.48.16 PM  dm-0  0.00   0.00   0.00   0.00     0.00    0.00   0.00   0.00
02.48.16 PM  dm-1  0.00   0.00   0.00   0.00     0.00    0.00   0.00   0.00

Поля в выходных данных:

  • tps — общее количество операций передачи, отправляемых на физическое устройство в секунду.

  • rKB/s — количество КБ, считываемых с устройства в секунду.

  • wKB/s — количество КБ, записываемых на устройство в секунду.

  • dKB/s — количество КБ, отбрасываемых устройством в секунду.

  • areq-sz — средний размер (КБ) запросов ввода-вывода, отправляемых на устройство.

  • aqu-sz — средняя длина очереди запросов, отправляемых на устройство.

  • await — среднее время отправки запросов ввода-вывода на устройство для их обслуживания.

  • %util — процент времени, используемого для отправки запросов ввода-вывода на устройство (использование пропускной способности устройства).

vmstat

vmstat -d

Пример вывода:

disk- -----------reads----------- ------------writes----------- -----IO------
       total merged sectors    ms  total merged sectors      ms    cur    sec
vda     7323   4260  859443  2636  63515  63243 2516504  255002      0    286
dm-0   10106      0  614594  3452 126331      0 2527784  241588      0    285
dm-1      39      0    5632     4      0      0       0       0      0      0

Поля в выходных данных команды:

  • reads

    • total — общее количество успешно завершенных операций чтения.

    • merged — количество объединенных операций чтения (образующих одну операцию ввода-вывода).

    • sectors — секторы, из которых данные успешно считаны.

    • ms — количество миллисекунд, потраченных на чтение данных.

  • writes

    • total — общее количество успешно завершенных операций записи.

    • merged — объединенные операции чтения (образующие одну операцию ввода-вывода).

    • sectors — секторы, в которые успешно записаны данные.

    • ms — количество миллисекунд, потраченных на запись данных.

  • IO — Информация об операциях чтения/записи для диска.

    • bi --общий объём данных, считанных с блочного устройства, в блоках.

    • bo — общий объём данных, записанных на блочное устройство, в блоках.