Понимание CPU stats утилиты top

Многие знают утилиту top и наверняка частенько ей пользуются. Но не все показатели, которые отображены в top, могут быть понятны. В частности, связанные с CPU.

Скриншот главного окна top

В общем у CPU следующие основные состояния:

  • idle, когда ничего не происходит, простой процессора;
  • запуск процессов в userspace, т.е. пространстве пользователя;
  • запуск процессов в kernel, т.е. процессы, запуск которых инициирован ядром.

Дополнительно эти три состояния могут быть разделены по приоритету, так называемый nice. По умолчанию, все процессы запущены с равным приоритетом 0. Nice принимает значения от -20 до 19.

Теперь можно переключиться на вывод команды top.

Первые две строки показывают сводную информацию о ресурсах, Load Average, памяти, аптайме. А ниже уже находится сам список процессов, который можно сортировать по колонкам.

Пояснение по 7 показателям CPU

Самой непонятной кажется следующая строка :

%Cpu(s):  0,3 us,  0,3 sy,  0,0 ni, 99,3 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st

0,3 us – информирует о том, что CPU тратит всего 0,3% своего времени на выполнение процессов в пространстве пользователя. Это может быть любой процесс, который не принадлежит ядру и выполняется в пользовательском пространстве. Это может быть веб-сервер, БД, компилятор и т.д. Обычно на нагруженном сервере большую часть занимает именно данный показатель.

0,3 sy – это количество времени, которое процессор потратил на запуск ядра. Все процессы и системные ресурсы обрабатываются ядром . Когда процессу пользовательского пространства нужно что-то из системы, например, выделить память, выполнить некоторые операции ввода-вывода или создать дочерний процесс, то в игру вступает ядро. Данный показатель должен быть как можно меньше при штатной работе сервера.

0,0 ni – данный показатель выводит данные процессов, которые использовали процессорное время и приоритет которых которых был изменён с помощью nice. В данном случае всё по нулям, т.к. никаким процессам доп. приоритет не выдавался.

99,3 id – idle time, о котором говорилось в самом начале. 99,3 % времени CPU простаивал.

0,0 wa – статистика по операциям ввода-вывода, такие как чтение или запись на диск. Есть моменты, когда CPU запускает такие операции и ему приходится ждать их завершения, т.к. скорость работы дисковых накопителей намного меньше, чем скорость работы CPU.

0,0 hi & 0,0 si – Эти две статистики показывают, сколько времени процессор потратил на обслуживание прерываний. hi – аппаратные, отправляемые к CPU с различных периферийных устройств, например, с дисков или сетевых интерфейсов. si – программные, которые происходят на уровне ядра.

0,0 st – относится только к виртуальным машинам (ВМ). Когда Linux запущен как ВМ на гипервизоре, st показывает, сколько времени его vCPU провёл в ожидании обслуживания гипервизором другого vCPU, работающего на другой ВМ. Поскольку обычно эти виртуальные процессоры совместно используют один и тот же физический процессор (или процессоры), то будут моменты, когда виртуальная машина хотела выполнить какое-либо действие, но гипервизор вместо этого назначал ресурсы CPU другой виртуальную машину.

Вывод: при возникновении проблем на сервере всегда можно обратиться к команде top, которая покажет, с каким процессом и по каким фронтам возникают проблемы