После завершения этого раздела вы сможете описать, что такое средняя нагрузка, и определить процессы, расходующие большое количество ресурсов сервера.
Средняя нагрузка — это измерение, предоставляемое ядром Linux, которое отражает воспринимаемую системой нагрузку за определенный период времени. Оно позволяет определить, сколько примерно запросов к системным ресурсам ожидают выполнения, а также увеличивается или уменьшается нагрузка на систему со временем.
Каждые пять секунд ядро получает актуальное число нагрузки на основе количества процессов, готовых к запуску и находящихся в состоянии непрерываемого ожидания. Это число накапливается и предоставляется как экспоненциальное скользящее среднее за последние 1, 5 и 15 минут.
Основы расчета средней нагрузки в Linux
Средняя нагрузка ― это воспринимаемая системой нагрузка за определенный период времени. Linux определяет, сколько процессов готовы к запуску на процессоре и сколько ожидают завершения операции ввода-вывода диска или сети.
Число нагрузки ― это скользящее среднее значение для количества процессов, которые готовы к запуску (состояние R) или ожидают завершения операции ввода-вывода (состояние D).
R
D
Некоторые системы UNIX учитывают только загрузку ЦП или длину очереди выполнения для определения нагрузки на систему. Linux также учитывает использование диска и сети, поскольку оно может оказать такое же существенное влияние на производительность системы, как и загрузка процессора. При появлении высоких значений средней нагрузки при минимальной активности ЦП проверьте дисковую и сетевую активность.
Средняя нагрузка — это приблизительный показатель того, сколько процессов ожидают завершения выполнения запроса, чтобы продолжить работу. Запрос может быть связан с выделением процессорного времени для запуска процесса. Запрос также может быть связан с завершением важной операции ввода-вывода диска, и процесс не может быть запущен на ЦП, пока запрос не будет выполнен, даже если ЦП простаивает. Подобные ситуации влияют на системную нагрузку, и кажется, что система работает медленнее, поскольку есть процессы ожидающие запуска.
Интерпретация отображаемых значений средней нагрузки
Один из способов отображения текущей средней нагрузки ― команда uptime. Она показывает текущее время, продолжительность работы машины, количество запущенных пользовательских сеансов и текущую среднюю нагрузку.
[user@host ~]$ uptime 15:29:03 up 14 min, 2 users, load average: 2.92, 4.48, 5.20
[user@host ~]$
uptime
Три значения средней нагрузки представляют нагрузку за последние 1, 5 и 15 минут. Достаточно беглого взгляда, чтобы понять, происходит увеличение или уменьшение нагрузки на систему.
Если основная часть средней нагрузки вызвана процессами, ожидающими ЦП, вы можете рассчитать ориентировочное значение нагрузки по каждому ЦП, чтобы определить, наблюдаются ли в системе значительные периоды ожидания.
С помощью команды lscpu можно определить, сколько в системе процессоров.
В следующем примере используется система с одним сокетом, двумя ядрами и двумя гиперпотоками на ядро. Грубо говоря, Linux будет рассматривать ее как систему с четырьмя ЦП для целей планирования.
[user@host ~]$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 ...output omitted...
lscpu
Представьте, что единственное, что влияет на число нагрузки, ― это процессы, которым требуется время ЦП. Вы можете разделить отображаемые значения средней нагрузки на количество логических процессоров в системе. Значение меньше 1 указывает на удовлетворительное использование ресурсов и минимальное время ожидания. Значение больше 1 указывает на чрезмерную загруженность ресурсов и наличие задержки при обработке.
# From lscpu, the system has four logical CPUs, so divide by 4: # load average: 2.92, 4.48, 5.20 # divide by number of logical CPUs: 4 4 4 # ---- ---- ---- # per-CPU load average: 0.73 1.12 1.30 # # This system's load average appears to be decreasing. # With a load average of 2.92 on four CPUs, all CPUs were in use ~73% of the time. # During the last 5 minutes, the system was overloaded by ~12%. # During the last 15 minutes, the system was overloaded by ~30%.
Свободная очередь ЦП имеет число нагрузки 0. Каждый процесс, ожидающий ЦП, добавляет 1 к числу нагрузки. Если на процессоре запущен один процесс, число нагрузки равно 1, ресурс (ЦП) используется, но нет запросов, ожидающих выполнения. Если этот процесс выполняется в течение полной минуты, его вклад в среднюю нагрузку за одну минуту будет равен 1.
Однако процессы, непрерывно ожидающие завершения важных операций ввода-вывода из-за занятого дискового или сетевого ресурса, также включены в подсчет и увеличивают среднюю нагрузку. Хотя эти процессы не являются показателем загрузки ЦП, они добавляются в счетчик очереди, поскольку ожидают ресурсов и не могут начать работать на ЦП, пока не получат их. Это также нагрузка на систему, поскольку из-за ограничения ресурсов процессы не запускаются.
Если ресурсы не перегружены, средняя нагрузка остается меньше 1, так как задачи редко ожидают в очереди. Средняя нагрузка увеличивается, только когда из-за перегруженности ресурсов запросы долго остаются в очереди и подсчитываются процедурой расчета нагрузки. Когда использование ресурсов достигает 100 %, каждому дополнительному запросу приходится ждать обслуживания.
Некоторые дополнительные утилиты также могут показывать среднюю нагрузку, например w и top.
Программа top ― это динамическое представление системных процессов. Оно состоит из заголовка со сводкой, за которым следует список процессов или потоков, аналогичный информации в ps. В отличие от статического вывода команды ps, top постоянно обновляется с настраиваемой периодичностью и предоставляет возможности изменения порядка столбцов, сортировки и подсвечивания. Пользовательские настройки можно сохранить и сделать постоянными.
Отображаемые по умолчанию столбцы вывода могут распознаваться другими утилитами, осуществляющими оценку ресурсов:
Идентификатор процесса (PID).
PID
Имя пользователя (USER) ― владелец процесса.
USER
Виртуальная память (VIRT) ― вся память, используемая процессом, включая набор резидентов, общие библиотеки и любые отображаемые или находящиеся в разделе подкачки страницы памяти. (VSZ в команде ps.)
VIRT
VSZ
Резидентная память (RES) — физическая память, используемая процессом, включая резидентные общие объекты. (RSS в команде ps.)
RES
RSS
Состояние процесса (S):
S
D = процесс в состоянии непрерываемого сна
R = процесс запущен или может быть запущен
S = процесс в состоянии сна
T = процесс остановлен или трассируется
T
Z = процесс-зомби
Z
Время ЦП (TIME) — общее время обработки с момента запуска процесса. Может также включать совокупное время всех предыдущих дочерних процессов.
TIME
Имя команды процесса (COMMAND).
COMMAND
Таблица 8.3. Основные клавиши в top
запущенных
сигнал
значение_фактора_уступчивости
Man-страницы ps(1), top(1), uptime(1) и w(1)
ps
top
w