Страницы

Сохранить статью у себя в соцсети:

четверг, 2 апреля 2015 г.

Linux Performance Observability Tools. Top.

Linux Performance Observability Tools. Top.

Есть такая картинка Linux Performance Observability Tools. На первый взгляд она может показаться непонятной, поэтому давайте разберемся что здесь изображено. На этой картинке в очень упрощенном виде отражена структура ОС Linux, а каждый компонент структуры подписан инструментом который позволяет отслеживать работу этого компонента. Эти инструменты очень полезны в случае когда сервер "тормозит" и нужно определить какой из компонентов вызывает тормоза. Cистемный администратор или инженер должен уметь пользоваться большинством из тех инструментов что отражены на картинке. Как вы видите, инструментов очень много, какие-то могут быть вам знакомы, а какие-то - нет. Некоторые из этих инструментов довольно просты в обращении, а какие-то наоборот требуют высокой квалификации и дополнительных знаний. В последующем цикле статей я постараюсь рассмотреть наиболее популярные и интересные утилиты и рассказать о том как читать информацию которую они предоставляют и как использовать её в дальнейшем. 
English version available here.
Первой из рассмотренных инструментов будет утилита top. Это утилита в динамике отображает текущее состояние операционной системы и позволяет администратору оценить текущее состояние системы в общем виде. Если более конкретно, то top отображает суммарную информацию о системе включая список процессов в системе и выводит информцию об этих процессах. Эта информация включает в себя данные о потреблении системных ресурсов, таких как CPU или память. Несомненным плюсом top является то что она установлена практически в любом дистрибутиве. Чтобы запустить ее, достаточно набрать в консоли top и нажать Enter. Итак какую информацию может нам предоставить top.


Первое что стоит отметить, это то что вывод разделен на 2 части: верхняя часть это суммарная информация о системе, нижняя часть - это список процессов и детальная информация о процессах. Начнем с верхней части.




Начнем построчно сверху-вниз. В самой первой строке у нас отображаются:
time (14:13:50) и uptime (up 167 days, 27 min) - здесь текущее время и т.н. аптайм - время прошедшее с момента последней перезагрузки. Оно может быть полезно например, в случае кратковременной недоступности сервера. Вы подключаетесь к серверу, запускаете top, смотрите uptime и сразу становится понятно как давно была последняя перезагрузка.
количество пользователей (6 users) - этот показатель определяет текущее количество пользователей в системе у которых на данный момент запущен сеанс.
load average (32.70, 22.49, 14.87) - это первое место которому следует уделить внимание. Коротко, load average отражает усредненную нагрузку. Здесь мы видим три цифры и обозначают они среднюю нагрузку в течение последней минуты, последних 5 минут и последних 15 минут. Под средней нагрузкой определяется количество процессов в очереди на выполнение (код процесса должен выполниться в самое ближайшее время ядром процессора). Эти цифры важны так как показывают нагрузку на сервер и если эта цифра превышает количество физических ядер процессора это очень большой повод для беспокойства - ресурсов процессора недостаточно и часть процессов может проставивать в ожидании, что в свою очередь увеличивает время отзывчивости.

Вторая строка Tasks: это суммарная информация по процессам, здесь процессы сгруппированы по типу и выведен счет для каждой группы.
total - это общее количество процессов в системе, здесь учтены процессы пользователей (user processes), потоки ядра (kernel threads), фоновые процессы, вобщем все процессы.
running - это еще одно место которому следует уделить внимание. Здесь отражается количество выполняющихся процессов или готовых для выполнения (эти процессы имеют состояние TASK_RUNNING) и процессы которые находятся в особом режиме (состояние TASK_UNINTERRUPTIBLE) и ожидают ответа от устройства ввода-вывода, например жесткого диска. Это значение аналогично load average и указывает на текущую нагрузку в системе. Если количество таких процессов больше чем количество физических ядер это тоже плохо.
sleeping - количество приостановленных процессов (состояние TASK_INTERRUPTIBLE) которые ожидают наступления некоторого события, например получение сигнала или аппаратное прерывание. Этот счетчик учитывает все процессы на холостом ходу.
stopped - это список процессов выполнение которых остановлено сигналами SIGSTOP, SIGSTP, SIGTTIN, SIGTTOU. Обычно это делается с целью трассировки процессов. Негативного влияния эти процессы не имеют (за исключением того если вы остановили критичный profuction процесс).
zombie - это список т.н. zombie процессов (состояние EXIT_ZOMBIE), процессов которые завершили свое выполнение, но по какой-то причине родительский процесс не был уведомлен об этом и не завершил уже выполнившийся процесс. Если процесс-родитель был завершен, то осиротевший процесс потомок становится потомком процесса init который впоследствии корректно завершит его. В нормальной ситуации, zombie процессов не должно возникать, однако если они есть это свидетельствует о низком качестве кода программы.

Третья строка Cpu(s) это использование ресурсов процессора в процентном отношении.
us (user time)- время выполнения пользовательских процессов и программ. Значение приближающееся к 100% говорит о том что все ядра заняты и ресурсы CPU практически полностью утилизированы.
sy (system time) - время выполнения потоков ядра, в нормальной ситуации не должно превышать 5-10% процентов. Высокое значение говорит о том что много времени уходит на внутреннюю работу ядра в то время как ядродолжно обслуживать пользовательские процессы.
ni (nice time) - время выполнения пользовательских процессов с измененным приоритетом выполнения (nice). 
id (idle time) - время проведенное порцессами на холостом ходу.
wa (io wait time) - время проведенное процессором в ожидании выполнения операций ввода-вывода. В нормальной ситуации должно стремиться к нулю. Значения больше 10 говорят о том что есть проблемы со скоростью выполнения операций ввода-вывода (например перегруженный диск, большое количество операций ввода-вывода). 
hi (hardware interrupts) - время проведенное в обслуживании аппаратных прерываний, в нормальной ситуации должно стремиться к нулю. Постоянное значение этого счетчика больше нуля говорят о потенциальных проблемах в оборудовании.
si (software interrupts) - время проведенное в обслуживании программных прерываний. Также должно стремиться к нулю, однако при увеличении нагрузки (росте количества одновремено работающих процессов) также будет увеличиваться. Однако значения больше 10-15% говорит о наличии проблем в коде выполняющихся программ.
st (stolen time) - время отобранное гипервизором у данной виртуальной машины в пользу другой виртуальной машины. Постоянное значение больше нуля говорит о том что у гипевизора недостаточно ресурсов для обеспечения потребностей всех виртуальных машин.

Четвертая (Mem:) и пятая (Swap:) строки это информация об использование оперативной памяти и области подкачки swap. Данные показанные здесь измеряются в байтах с учетом множителя (а не в страницах).
total - общий объем оперативной памяти или области подкачки.
used - общий объем памяти или области подкачки используемой программами и кэшами разных уровней.
free - общий объем свободной памяти и области подкачки.
buffers - объем памяти отданный под буферы - объекты в памяти которые ассоциированы с некоторым набором областей на диске.
cached - объем памяти используемый в качестве кэша страниц.
Пару слов об этом всем. Linux старается использовать всю доступную память (total = used + free), часто используемые страницы памяти при этом, попадают в кэш, что отражается на увеличении значения cached. При нехватке свободной памяти, необходимые страницы будут забираться именно оттуда. Если в системе есть область подкачки, часть страниц кэша которые используются очень редко, помещается в эту область. Однако операции перемещения данных в область подкачки представляют собой запись на диск поэтому следует избегать ситуаций активного использования области подкачки. Если вы заметили что значение used для swap превышает 10-50% от total swap это признак того что у вас недостаточно памяти. Следующими шагами могут быть определение активности чтения/записи в область подкачки, поиск процессов чьи страницы больше остальных находятся в области подкачки.

Теперь у нас есть общее представлени о той суммарной информации что представлена в верхней части top. Показ этой информации можно включать и выключать с помощью горячих клавиш. Попробуйте воспользоваться клавишами l, t, m, 1 (one).

Теперь рассмотрим нижнюю часть top. 



Здесь представлен список процессов и детальная информация по процессам. Основной инструмент здесь это сортировка по определенным полям. Например, один из самых распространенных вариантов использования это поиск процесса, который использует больше всего ресурсов процессора или памяти. Используя сортировку можно искать процессы по самым разным критериям. 
Чтобы воспользоваться сортировкой сначала нужно нажать Shift + F и таким образом мы попадем на экран управления колонками. Затем с помощью стрелок нужно выбрать нужное поле и нажать пробел для включения этого поля в вывод программы top. При включени поля напротив его названия появится отметка звездой. Чтобы установить сортировку по полю, нужно выбрать поле и нажать клавишу 's'. После чего нажать 'q' для возвращения в основной режим работы.



Теперь используя знания о суммарной информации сверху и применяя сортировку можно искать процессы которые вызывают чрезмерное использование ресурсов (процессор, память, диск, пр.), процессы которые принадлежат определенным пользователям или имеют определенные признаки.

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

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика