Многие знают утилиту top и наверняка частенько ей пользуются. Но не все показатели, которые отображены в top, могут быть понятны. В частности, связанные с CPU.
В общем у 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, которая покажет, с каким процессом и по каким фронтам возникают проблемы.
P.S. Данная статья является частично вольным переводом оригинальной статьи.