Назад | Перейти на главную страницу

Перегрузка ЦП, но ни один процесс не использует более 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%).

Как я могу правильно интерпретировать эти данные? Есть ли какие-то скрытые процессы, которые перегружают мой процессор.

В 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). Такие обстоятельства могут привести к повышенной средней нагрузке, которая не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям придется ждать).

Предоставленная вами верхняя информация не обязательно означает перегрузку:

  • процессор простаивает на 35%
  • средняя нагрузка не обязательно слишком велика (зависит от предполагаемого использования сервера)
  • информация об ОЗУ и свопинге отсутствует

Или, скорее, если под перегрузкой вы имеете в виду какое-то ограничение, это могут быть различные аспекты: ограничение ЦП, ограничения сетевого и / или дискового ввода-вывода, ограничения использования памяти и т. Д.

Вы не должны пытаться сопоставить различные представления загрузки / использования ЦП - они обычно означают разные вещи, и представления также собираются с разными отметками времени (сбор статистики не атомарен):

  • средняя загрузка означает количество заданий в очереди выполнения, а не использование ЦП: https://stackoverflow.com/questions/21617500/understanding-load-average-vs-cpu-usage
  • цифры использования ЦП в контексте процесса не должны составлять в сумме 100% по разным причинам, вот лишь некоторые из них:
    • ЦП не проводит все свои циклы в пространстве процесса
    • различные циклы, затраченные в контексте процесса, по-разному подсчитываются в строке общего использования ЦП в% (один и тот же процесс мог находиться как в рабочем состоянии, так и в состоянии ожидания ввода-вывода в течение интервала учета, что способствует увеличению как% us, так и% wa чисел на строка общего использования CPU%)
    • ЦП мог тратить циклы на процессы, которые выполняются дольше, они будут учитываться в общей строке использования ЦП, но не присутствуют ни в одной из строк процесса

Питер прав. Но это не ответило на ваши вопросы. Дайте ему 12 логических процессоров, чтобы нагрузка упала ниже количества процессоров. Таким образом, ни один процесс или поток не должен ждать дополнительных циклов ЦП, чтобы получить время выполнения.

Включите также просмотр нити вверху.

Я подозреваю, что у вас там есть какие-то многопоточные процессы.

11% Системное время может указывать на узкое место в сети.