Load Average
Средняя загрузка (англ. load average) — среднее значение загрузки системы за некоторый период времени, как правило, отображается в виде трёх значений, которые представляют собой усредненные величины за последние 1, 5 и 15 минут. Чем ниже эта величина, тем менее нагружена компьютерная система. Load average вычисляется как длина очереди выполнения в операционной системе, где единица означает, что очередь заполнена, а значение выше единицы — что есть процессы, которые ожидают своей очереди на выполнение[1].
Получение средней загрузки в ОС семейства UNIX
Как правило, в UNIX-подобных системах вычисление средней загрузки происходит внутри ядра. Пользователи легко могут получить текущий показатель из командной оболочки, выполнив команду uptime:
$ uptime 14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09
Команды w и top показывают те же 3 значения средней нагрузки. В Linux они также могут быть получены путём прочтения файла /proc/loadavg
.
В компьютерах, находящихся в состоянии простоя, среднее число загрузки равно 0. Каждый процесс, который использует либо ждёт CPU (очередь ожидания), увеличивают число загрузки на один. Большинство UNIX-систем считают процессы только в состоянии выполнения (на CPU) или готовые к выполнению (ожидающие CPU). Однако Linux также включает в подсчёт процессы в состоянии беспробудного сна (всё ещё ожидающие жёсткий диск), которые могут привести к заметно отличающимся результатам, особенно когда много процессов блокируют операции ввода-вывода.
Для примера можно привести процессы, блокируемые в результате ошибок NFS или медленной системы хранения данных (USB 1.x устройств). Такие ситуации приводят к увеличению показателя средней нагрузки, однако, не отражают реальной нагрузки на CPU (но дает понятие, как долго пользователь может ожидать выполнения операций).
Средняя нагрузка — это не очень точная характеристика (хотя бы потому, что она определяет усреднённые значения). И если на компьютере есть несколько процессоров, то такой характеристике верить нельзя. Располагая двумя процессорами, можно (теоретически) одновременно выполнять в два раза большее число программ. Это означает, что средняя нагрузка 2.00 (на двухпроцессорном компьютере) будет эквивалентна средней нагрузке 1.00 (на однопроцессорном компьютере). На самом деле это не совсем так. Из-за дополнительной нагрузки, вызванной планированием и некоторыми другими факторами, двухпроцессорный компьютер не обеспечивает удвоения быстродействия по сравнению с однопроцессорным вариантом.
Файл /proc/loadavg
/proc/loadavg
— текстовый файл в виртуальной файловой системе /proc/
, он содержит 5 текстовых полей, разделенных пробелами.
Первые три поля содержат значения средней загрузки системы за последние 1, 5 и 15 минут — те же значения выводит команды uptime и top.
Четвертое поле содержит количество процессов в системе на данный момент и состоит из двух чисел, разделенных дробной чертой: левое число показывает количество выполняемых в данный момент процессов, правое число — общее количество процессов в системе.
Пятое поле показывает последний PID (идентификатор процесса), выделенный системой.
$ cat /proc/loadavg 0.01 0.04 0.01 1/185 12122
Примечания
- CPU Load: когда начинать волноваться? : [арх. 23 января 2019] = Andre Lewis. Understanding Linux CPU Load — when should you be worried? / Пер. с англ. JCDenton. — 2014. — 24 марта.
Ссылки
- Gunther, N. J. UNIX Load Average – Part 1: How It Works : [англ.]. — TeamQuest.
- Lewis, A. Understanding Linux CPU Load — when should you be worried? : [англ.] // ScoutAPM. — 2009.
- Walker, R. Examining Load Average : [англ.] : [арх. 3 февраля 2007] // Linux Journal. — 2006. — 1 December.
- Praveen. What exactly is a load average? : [англ.] // Linux Tech Support : blog. — 208. — 23 October.
- Ferrari, D. An empirical investigation of load indices for load balancing applications : [англ.] : [арх. 18 сентября 2006] / D. Ferrari, S. Zhou. — Systems. — 1986. — P. 54–69.