====== Понимание CPU stats утилиты top ====== Многие знают утилиту top и наверняка частенько ей пользуются. Но не все показатели, которые отображены в top, могут быть понятны. В частности, связанные с CPU. {{http://it-lux.ru/wp-content/uploads/2019/09/image-4.png?nolink&}} Скриншот главного окна 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, которая покажет, с каким процессом и по каким фронтам возникают проблемы