Средняя нагрузка — это ключевой показатель для измерения общей нагрузки системы, и мы часто используем его при ежедневном мониторинге. Поэтому нам необходимо приложить немного больше усилий, чтобы понять его.
Просмотр средней загрузки системы
Существует много способов просмотреть среднюю загрузку системы, и наиболее часто используемые команды — это uptime и top.
$ uptime
20:02:53 up 1 day, 11:56, 5 users, load average: 1.00, 1.01, 1.04
на выходеload medium — средняя загрузка системы, что соответствует первой строке верхнего вывода команды.
$ top
top - 20:02:54 up 1 day, 11:56, 5 users, load average: 1.00, 1.01, 1.04
...
Кроме того, вы также можете напрямую просмотреть /proc/loadavg
$ cat /proc/loadavg
1.04 0.40 0.22 3/222 24411
Среди них первые три значения — это средняя нагрузка, которая соответствует средней нагрузке в выдаче результатов uptime и top.
Когда вы сталкиваетесь с чем-то, что вы не понимаете,Первый шаг обычно решается просмотром руководства с помощью команды man. Выходное содержание человека вообще имеет более подробное объяснение.
Еще одним преимуществом является то, что, поскольку использование и вывод одной и той же команды могут различаться в разных версиях Linux,Взгляд через человека в текущей системе может получить более последовательное объяснение.
Ниже приводится описание значений элементов вывода времени безотказной работы слева направо:
$ man uptime
The current time, how long the system has been running, how many users are currently logged on, and the system load averages for the past 1, 5, and 15 minutes.
текущее время, как долго работает система, сколько пользователей в настоящее время вошли в систему иСредняя загрузка системы за последние 1 минуту, 5 минут и 15 минут.
Понимание средней загрузки системы
$ man uptime
System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.
Средняя загрузка системы относится кРабочие и непрерываемые состояниясреднее количество процессов.
То есть среднее количество процессов, которые система находится в работоспособном состоянии и состоянии бесперебойности в единицу времени, то есть среднее количество активных процессов,Это не связано напрямую с использованием процессора.
-
Процессы в рабочем состоянии, включая процессы, использующие ЦП, и процессы, ожидающие ЦП.
- что соответствует выводу команды psСостояние в столбце STAT равно R.обработать.
- Статус R: выполняется или готово к выполнению (в очереди на выполнение)
-
Процесс в непрерываемом состоянии указывает на процесс, ожидающий других системных ресурсов, например ожидающий дискового ввода-вывода.
- что соответствует выводу команды psСостояние в столбце STAT — Dобработать.
- Состояние D: непрерывный сон (обычно IO).
- Непрерывное состояние на самом деле является механизмом защиты системы для обработки и аппаратных устройств.. Например, когда процесс читает и записывает данные на диск, чтобы обеспечить согласованность данных, он не может быть прерван другими процессами или прерываниями до получения ответа от диска.
Поэтому после того, как средняя загрузка учитывает бесперебойное состояние процесса, мы называем ее средней загрузкой системы или средней загрузкой Linux, а не средней загрузкой ЦП.
Посмотреть все статусы процесса
$ man ps
Введите, чтобы найти: / КОДЫ СОСТОЯНИЯ ПРОЦЕССОВ, коды состояния всех процессов отображаются следующим образом.
Среди них состояния R и D соответствуют двум состояниям, которые могут быть запущены и не могут быть прерваны.
1 минута, 5 минут, 15 минут
Объяснение одно:
- Если среднее значение нагрузки равно 0,0, это означает, что система простаивает.
- Если 1-минутное среднее выше, чем 5-минутное или 15-минутное среднее, нагрузка увеличивается.
- Если среднее значение за 1 минуту ниже, чем среднее значение за 5 или 15 минут, нагрузка уменьшается.
- Если средняя загрузка превышает количество процессоров в системе, в системе могут возникнуть проблемы с производительностью.
Объяснение два:
- Если три значения 1 минута, 5 минут и 15 минут в основном одинаковы или разница невелика, это означает, что загрузка системы очень стабильна.
- Однако, если значение 1 минуты намного меньше значения 15 минут, это означает, что за последнюю минуту нагрузка на систему уменьшилась, но в последние 15 минут была большая нагрузка.
- И наоборот, если значение 1 минуты намного больше значения 15 минут, это означает, что нагрузка последней минуты увеличилась.Это увеличение может быть только временным или может продолжать увеличиваться, поэтому требуется постоянное наблюдение. Как только 1-минутная средняя нагрузка приближается к числу ЦП или превышает его, это означает, что система перегружена.В это время необходимо проанализировать и выяснить, что вызывает проблему, и найти способы ее оптимизации.
Например, для средней нагрузки «1,73 0,60 7,98» в системе с одним ЦП это означает:
- В последнюю минуту система была перегружена в среднем на 73% ((1,73-1)/1).
- За последние 5 минут средняя загрузка системы невысокая, и есть простои.
- За последние 15 минут система была перегружена в среднем на 698% ((7,98-1)/1).
Если средняя загрузка равна 2, в системе только с 1 ЦП половина процессов может не конкурировать за ЦП.
Поэтому, как правило, идеально иметь один процесс, работающий на каждом процессоре. (не абсолютный)
Насколько нормальная балансировка нагрузки?
Когда средняя нагрузка превышает 70% от количества ЦП, следует проанализировать и устранить проблему высокой нагрузки. Если нагрузка слишком высока, это может привести к медленному отклику процесса, что повлияет на нормальную работу службы.
Для систем с несколькими процессорами обычно можно начать с деления средней нагрузки на количество процессоров. Затем проверьте использование ЦП, ожидание ввода-вывода, переключение контекста и т. д., чтобы устранить проблему.
Средняя загрузка и загрузка ЦП
Поскольку средняя нагрузка представляет собой количество активных процессов, если средняя нагрузка высока, означает ли это, что загрузка ЦП высока?
Напомним, что средняя загрузка относится к количеству процессов в работоспособном и бесперебойном состоянии в единицу времени. Таким образом, он включает не только процессы, использующие ЦП,Также включает процессы, ожидающие ЦП и ожидающие ввода-вывода..
И использование ЦП,Статистика загрузки процессора в единицу времени, что не обязательно точно соответствует средней нагрузке. Например:
- Процесс с интенсивным использованием процессора, использование большого количества ЦП приведет к увеличению средней нагрузки, и в настоящее время они совпадают;
- Интенсивный процесс ввода/вывода, ожидание ввода-вывода также увеличивает среднюю нагрузку, ноЗагрузка процессора не должна быть высокой;
- Много ожидания процессораПланирование процессаЭто также приведет к увеличению средней нагрузки, и в это время будет выше загрузка ЦП.
2 состояния о прерывании сна
S (TASK_INTERRUPTIBLE), прерываемое состояние сна
Процессы в этом состоянииОжидание возникновения определенного события (например, ожидание подключения к сокету, ожидание семафора) и приостановка. Структуры task_struct этих процессов помещаются в очередь ожидания соответствующего события. Когда происходят эти события (инициированные внешними прерываниями или другими процессами), один или несколько процессов в соответствующей очереди ожидания будут разбужены.
С помощью команды ps мы увидим, что при нормальных обстоятельствах подавляющее большинство процессов в списке процессов находятся в состоянии TASK_INTERRUPTIBLE (если только машина не находится под высокой нагрузкой). Ведь ЦП всего один-два, а процессов десятки и сотни.Если большинство процессов не спят, то как может реагировать ЦП.
D (TASK_UNINTERRUPTIBLE), состояние непрерывного сна
Подобно состоянию TASK_INTERRUPTIBLE, процесс находится в спящем состоянии, но в данный момент его нельзя прервать. непрерывный,Это не означает, что ЦП не отвечает на внешние аппаратные прерывания, но процесс не отвечает на асинхронные сигналы.. В большинстве случаев процесс всегда должен иметь возможность реагировать на асинхронные сигналы, пока он находится в спящем режиме. В противном случае вы будете удивлены, обнаружив,kill -9 не может убить спящий процесс! Так же мы понимаем, почему процесс, видимый командой ps, почти никогда не появляется в состоянии TASK_UNINTERRUPTIBLE, а всегда в состоянии TASK_INTERRUPTIBLE.
Значение существования состояния TASK_UNINTERRUPTIBLE заключается в том, что некоторые процессы обработки ядра не могут быть прерваны.. Если вы ответите на асинхронный сигнал, процесс обработки асинхронных сигналов будет вставлен в процесс выполнения программы (этот вставленный процесс может существовать только в режиме ядра или может распространяться на пользовательский режим), поэтому исходный процесс будет прерван. . (См. «Анализ асинхронных прерываний ядра Linux»). Когда процесс работает на некотором оборудовании (например, процесс вызывает системный вызов чтения для чтения файла устройства, а системный вызов чтения, наконец, выполняет код соответствующего устройства драйвер и взаимодействие с соответствующим физическим устройством), вам может потребоваться использовать состояние TASK_UNINTERRUPTIBLE для защиты процесса, чтобы избежать прерывания процесса взаимодействия с устройством, что приведет к переходу устройства в неуправляемое состояние.Состояние TASK_UNINTERRUPTIBLE в этом случае всегда очень кратковременно, и его практически невозможно зафиксировать с помощью команды ps.
Имитация непрерывного состояния сна
Используйте стресс-нг для имитации стресса.Для CentOS стресс-нг поддерживается только в CentOS 7.
Используйте команду ps для просмотра статуса процесса:
Можно видеть, что состояние процесса 22454 является непрерываемым состоянием сна D+. (После тестирования можно убить, оставить здесь знак вопроса)
Проверьте это с помощью vmstat:
Номер второго столбца b равен 1, а b (Blocked) представляет количество процессов в непрерывном спящем состоянии. Первый столбец r (Running или Runnable) — это длина очереди готовности, то есть количество запущенных процессов, ожидающих процессора.
Средняя нагрузка за 1 минуту составляет 2,29:
Глядя на результаты mpstat, на sys состояния ядра приходится 20,51%, на ожидание ввода-вывода приходится 19,66, а общий уровень простоя ЦП составляет почти 60%. (4 ядерных)
Снова рассчитайте среднюю загрузку, 2,29/4 = 57%, но фактическая загрузка ЦП не так высока Это подтверждает, что упомянутая выше высокая средняя загрузка не означает, что загрузка ЦП высока.
Сколько процессоров в системе
$ grep "model name" /proc/cpuinfo | wc -l
$ lscpu | grep '^CPU(s)'
Или выполните команду top, а затем нажмите цифру 1, вы увидите Cpu0~CpuN, всего N+1 ЦП.
Связанные инструменты
vmstat
Report virtual memory statistics
vmstat — широко используемый инструмент анализа производительности системы, который в основном используется для анализа использования памяти системой, а также для анализа количества переключений контекста ЦП и прерываний. Несколько важных столбцов:
- cs (переключение контекста) — количество переключений контекста в секунду.
- in (interrupt) — количество прерываний в секунду.
- r (Running или Runnable) — длина очереди готовности, то есть количество процессов, запущенных и ожидающих ЦП.
- b (заблокировано) — количество процессов в непрерывном спящем состоянии.
mpstat
Report processors related statistics.
mpstat — широко используемый инструмент анализа производительности многоядерных ЦП, который используется для просмотра показателей производительности каждого ЦП в режиме реального времени, а также средних показателей всех ЦП.
Мониторинг всех процессоров
-P ALL
Мониторинг указанного процессора по номеру
-P 0,1,2...
Мониторинг всех ЦП и вывод набора данных каждые 5 секунд
$ mpstat -P ALL 5
pidstat
Report statistics for Linux tasks.
pidstat — широко используемый инструмент анализа производительности процесса, который используется для просмотра показателей производительности, таких как ЦП, память, ввод-вывод и переключение контекста процесса в режиме реального времени.
По умолчанию отображается информация о ЦП процесса, что эквивалентно pidstat -u.
Просмотр загрузки ЦП
-u Report CPU utilization.
$ pidstat -u 5
Описание выходного столбца:
- Использование ЦП в пользовательском режиме (%usr);
- Использование ЦП в состоянии ядра (%system);
- Загрузка ЦП виртуальной машины (%guest);
- Подождите, пока загрузится ЦП (%wait);
- Общее использование ЦП (% ЦП).
Просмотр переключения контекста процесса
-w Report task switching activity (kernels 2.6.23 and later only).
$ pidstat -w 5
- Столбец cswch: указывает количество добровольных переключений контекста в секунду.
- nvcswch: указывает количество непроизвольных переключений контекста в секунду.
Эти две концепции важны, и они подразумевают разные проблемы с производительностью:
Добровольное переключение контекста относится к переключению контекста, вызванному неспособностью процесса получить требуемые «ресурсы».. Например, добровольное переключение контекста происходит, когда системных ресурсов, таких как ввод-вывод и память, недостаточно.
Непроизвольное переключение контекста относится к переключению контекста, которое происходит, когда процесс принудительно запланирован системой из-за истечения интервала времени.. Например, непроизвольное переключение контекста может происходить, когда большое количество процессов конкурирует за ЦП.
Просмотр переключения контекста потока
-t Also display statistics for threads associated with selected tasks.
$ pidstat -wt 5
Обратите внимание, что -w является обязательным, иначе информация о переключении контекста не будет отображаться.
После добавления параметра -t выходные данные показывают еще два столбца: TGID группы потоков и TID потока.
резюме
Под средней нагрузкой понимается среднее количество процессов, которые система находится в работающем состоянии и состоянии бесперебойности в единицу времени, то есть среднее количество активных процессов.
- Высокая средняя загрузка может быть вызвана процессами, интенсивно использующими ЦП;
- Высокая средняя нагрузка не обязательно означает высокую загрузку ЦП, также может быть, что ввод-вывод загружен;
- Когда нагрузка оказывается высокой, вы можете использовать такие инструменты, как mpstat и pidstat, чтобы помочь в анализе источника нагрузки.
- Просмотр средней загрузки системы: время безотказной работы, топ, /proc/loadavg
- Просмотр каждого использования ЦП: top, mpstat -P ALL 5
- Просмотр использования ЦП для каждого процесса: top, pidstat 5 и т. д.
- Просмотр длины очереди запуска ЦП и количества непрерываемых процессов: столбцы r и b в vmstat 5
Заглавное изображение:loadsafecrossborder.com
Ссылаться на
Geek Time "Практика оптимизации производительности Linux" Ни Пэнфэй
Woohoo. Брендан GRE Reform.com/blog/2017-0…
Woohoo.soft молись OG.in/tutorials/com…
Понимание загрузки системы Linux:Вууху. Руан Ифэн.com/blog/2011/0…
Нагрузка (вычисление):En. Wikipedia.org/wiki/load_(…
R, S, D, T, Z, X для анализа состояния процесса Linux:woo woo woo.cn blog on.com/Y DD max/afraid/49…
Личный публичный аккаунт
Для получения дополнительных статей, пожалуйста, обратите внимание на общедоступный номер: Binary Road