Процессор перегружен, но ни один процесс не использует более 1%
Я наблюдаю за сервером Cpanel (centos) с 2-ядерным процессором (4 виртуальных ядра), и он, кажется, перегружен, потому что я получил эти значения, используя top
:
load average: 11.80, 13.30, 13.02
Cpu(s): 42.2%us, 11.7%sy, 0.0%ni, 35.6%id, 10.1%wa, 0.1%hi, 0.3%si, 0.0%st
Но если я смотрю на список процессов (используя top или ps), ни один процесс не использует более 1%
Кроме того, сумма загруженности процессора (%) равна 4, и если я даже предполагаю, что значения 0% являются округленными числами, и меняю его на 0,04 (который округляется с использованием 1 десятичной цифры 0), то сумма равна 11 (все еще меньше, чем 100%).
Как я могу правильно интерпретировать эти данные? Есть ли какие-то скрытые процессы, которые перегружают мой процессор.
3 ответа
В Linux заблокированные процессы также способствуют усреднению нагрузки. Команда ps -Al
перечисляет все процессы. Во втором столбце (S для State) его вывода вы найдете состояния процесса. Чаще всего у меня есть процессы, ожидающие диска "D", которые рассчитываются по средним значениям нагрузки.
Полный список состояний со страницы руководства ps
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being
traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its
parent.
Образец вывода
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 4906 poll_s? 00:00:23 init 1 S 0 2 0 0 80 0 - 0 kthrea? 00:00:02 тыс 1 R 0 3 0 99 80 0 - 0? 01:00:02 бегун 1 D 0 4 0 1 80 0 - 0? 01:00:02 грузчик
Если бы это были ваши единственные процессы, то мы видим нагрузку около 2, 1 для "бегуна" ЦП и еще 1 для загрузчика, ожидающего диск.
Очень точная информация доступна в Википедии
Свободный компьютер имеет номер загрузки 0. Каждый процесс, использующий или ожидающий ЦП (очередь готовности или очередь выполнения), увеличивает номер загрузки на 1. В большинстве систем UNIX учитываются только процессы, работающие (на ЦП) или работающие (ожидающие CPU) состояния. Однако Linux также включает процессы в непрерывном спящем состоянии (обычно в ожидании активности диска), что может привести к заметно отличающимся результатам, если многие процессы остаются заблокированными в операциях ввода-вывода из-за загруженности или зависания системы ввода-вывода. 1 Это, например, включает в себя блокировку процессов из-за сбоя сервера NFS или из-за медленного носителя (например, устройства хранения USB 1.x). Такие обстоятельства могут привести к повышению средней нагрузки, что не отражает фактического увеличения загрузки ЦП (но все же дает представление о том, как долго пользователям приходится ждать).
Предоставленная вами верхняя информация не обязательно означает перегрузку:
- процессор на 35% простаивает
- средние значения нагрузки не обязательно слишком велики (зависит от предполагаемого использования сервера)
- ОЗУ и информация об обмене отсутствуют
Точнее, если под перегрузкой вы подразумеваете нарушение какого-то ограничения, это может иметь различные аспекты: ограничение ЦП, ограничения сетевого и / или дискового ввода-вывода, ограничения использования памяти и т. Д.
Не следует пытаться сопоставить различные представления загрузки / использования ЦП - они обычно означают разные вещи, и представления также собираются в разные временные метки (сбор статистики не является атомарным):
- средняя загрузка означает количество заданий в рабочей очереди, а не использование ЦП: https://stackoverflow.com/questions/21617500/understanding-load-average-vs-cpu-usage
- числа использования CPU % в контексте процесса не должны прибавлять до 100% по разным причинам, вот лишь некоторые из них:
- процессор не тратит все свои циклы в пространстве процесса
- различные циклы, потраченные в контексте процесса, по-разному учитываются в общей строке использования ЦП% (один и тот же процесс мог находиться как в состоянии выполнения, так и в состоянии ожидания ввода-вывода в течение интервала учета, таким образом, внося свой вклад как в числа% us, так и в%wa на общая загрузка процессора%)
- ЦП мог бы потратить циклы на процессы, которые дольше не работают, они будут учитываться в общей строке использования ЦП, но не присутствовать ни на одной из строк процесса.
Питер прав. Но это не ответило на ваши вопросы. Дайте ему 12 логических процессоров, чтобы нагрузка опустилась ниже количества процессоров. Таким образом, ни процесс, ни поток не должны ждать дополнительных циклов ЦП, чтобы получить время выполнения.
Включите также вид нити сверху.
Я подозреваю, что у вас там есть несколько многопоточных процессов.
11% Системное время может указывать на узкое место в сети.