Я наблюдаю за сервером 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%).
Как я могу правильно интерпретировать эти данные? Есть ли какие-то скрытые процессы, которые перегружают мой процессор.
В Linux заблокированные процессы также влияют на среднюю нагрузку. Команда ps -Al
перечисляет все процессы. Во втором столбце (S для состояния) его вывода вы найдете состояния процесса. Чаще всего у меня есть процессы, ожидающие диска "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 kthreadd 1 R 0 3 0 99 80 0 - 0 ? 01:00:02 runner 1 D 0 4 0 1 80 0 - 0 ? 01:00:02 loader
Если бы это были ваши единственные процессы, мы видим загрузку около 2, 1 для загрузчика CPU и еще 1 для загрузчика, ожидающего диска.
Очень точна информация, доступная на Википедия
Неактивный компьютер имеет номер загрузки 0. Каждый процесс, использующий или ожидающий ЦП (очередь готовности или очередь выполнения), увеличивает номер загрузки на 1. Большинство систем UNIX учитывают только процессы в запущенном (на ЦП) или в состоянии выполнения (ожидающие CPU) состояния. Однако в Linux также есть процессы, находящиеся в непрерывном спящем режиме (обычно ожидающие активности диска), что может привести к заметно разным результатам, если многие процессы остаются заблокированными при вводе-выводе из-за загруженной или остановленной системы ввода-вывода.1 Это, например, включает блокировку процессов из-за сбоя сервера NFS или медленных носителей (например, запоминающих устройств USB 1.x). Такие обстоятельства могут привести к повышенной средней нагрузке, которая не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям придется ждать).
Предоставленная вами верхняя информация не обязательно означает перегрузку:
Или, скорее, если под перегрузкой вы имеете в виду какое-то ограничение, это могут быть различные аспекты: ограничение ЦП, ограничения сетевого и / или дискового ввода-вывода, ограничения использования памяти и т. Д.
Вы не должны пытаться сопоставить различные представления загрузки / использования ЦП - они обычно означают разные вещи, и представления также собираются с разными отметками времени (сбор статистики не атомарен):
Питер прав. Но это не ответило на ваши вопросы. Дайте ему 12 логических процессоров, чтобы нагрузка упала ниже количества процессоров. Таким образом, ни один процесс или поток не должен ждать дополнительных циклов ЦП, чтобы получить время выполнения.
Включите также просмотр нити вверху.
Я подозреваю, что у вас там есть какие-то многопоточные процессы.
11% Системное время может указывать на узкое место в сети.