Friday, April 12, 2019

Перевод с Booleanworld: команда top

Перевод с Booleanworld: команда top.

Команда top позволяет следить за процессами и использованием системных ресурсов. В отличие от ps, она интерактивная и позволяет искать процессы, передавать им сигналы и т.д.

Чтобы запустить интерактивный интерфейс, надо набрать в терминале top, для выхода - q.

Здесь рассматривается версия утилиты, которая поставляется с пакетом procps-ng. Чтобы выяснить, какая у вас, наберите
top -v

ИНТЕРФЕЙС КОМАНДЫ: БЛОК СТАТИСТИКИ.

Вывод команды поделен на 2 части: сверху - статистика использования системы (конкретно - cpu и ОЗУ, винты, например, он не видит); снизу - сами процессы.

Слева вверху показано системное время, за ним - uptime(up) - время непрерывной работы.

x users - это количество активных сессий. Сессии могут быть как на tty, так и на pty; как локальные, так и удаленные. Если, допустим, вы вошли в DE и запустили эмулятор терминала, то у вас будет 2 активные сессии. Для более подробной информации о сессиях есть команда who.

ИСПОЛЬЗОВАНИЕ ПАМЯТИ.

total - общее количество, free - свободная, used - использованная; avail mem - память, к-рая может быть выделена для процессов без дополнительного свопинга;

buff/cache:
disk cache - кэш дисков. Это механизм, используемый ядром Линукс для снижения обращений к диску, т.к. он медленный. Кэш диска находится в RAM, туда сохраняются наиболее часто используемые данные из областей диска. Кроме того, при записи данные сначала пишутся в буфер диска, а потом периодически всем скопом уже на диск. Buff/cache - это память, занятая буфером и кэшем в сумме. Оно считается за память, т.к. память, используемая кэшем, при необходимости будет выделена для процессов.

Tasks: статистика процессов, запущенных в системе. Total - общее количество. Для понимания остальных полей - немного информации о том, как ядро Линукс обрабатывает процессы.

Процессы могут выполнять задачи ввода/вывода информации (напр., чтение с диска), но это могут быть и вычислительные операции процессора. Во время операций I/O процессор простаивает, поэтому ОС в это время переключается на другие задачи. Кроме того, для каждого процесса ОС выделяет определенное малое кол-во времени (квант), после чего переключается на другой процесс. Так реализуется "многозадачность" (т.е. её иллюзия. Тут же отмечу, что величина кванта времени для каждой задачи определяется её приоритетом, о которых пойдёт речь позже). Всё это требует отслеживания состояния процесса. В линукс процесс может быть в одном из следующих состояний:

R - runnable: выполняющийся или стоящий в очереди на выполнение (т.е. в состоянии готовности)
S - interruptable sleep: ждёт завершения события;
D - uninterruptable sleep: ждёт завершения операции ввода/вывода;
T - stopped: остановлен с помощью сигнала управления, например, через C+z;
t - stopped: остановлен отладчиком при трассировке;
Z - zombie: для наблюдения за процессами ядро поддерживает различные структуры данных в памяти. Бывает, что процесс порождает несколько потомков, а они завершаются, хотя родитель ещё живой. При этом структуры данных потомков должны сохраняться в памяти, чтобы родитель получил информацию об их статусе. Зомби - это такие законченные процессы, чьи структуры данных ещё не выгружены из памяти.

Теперь к обозначениям top: процессы S & D обозначены sleeping, t & T - stopped, зомби и запущенные так и обозначены.

ИСПОЛЬЗОВАНИЕ ЦПУ.

В секции отражается процент процессорного времени, затраченного на различные типы задач.
us - задачи из пространства пользователя (user space);
sy - процессы ядра (system);
ni - nice, определяет приоритет процесса. Это, типа, уровень "любезности": процесс с более высоким nice более любезен к другим процессам и сам получает более низкий приоритет. Т.е., чем выше nice, чем ниже приоритет. Это значение можно поменять вручную (renice). Значение ni - это время, затраченное на процессы с измененным вручную приоритетом.
id(idle) - время простоя процессора;
wa(waiting) - время, пока ЦПУ ждёт окончания операций I/O.
hi & si (hardware interrupts, software interrupts) - это время, затраченное на обработку аппаратных и программных прерываний. Прерывание - это сигнал процессору о наступлении какого-любо события, которое требует немедленной реакции. Аппаратные прерывания (IRQ) обычно используются периферийными устройствами, чтобы сообщить, например, о нажатии клавиши на клавиатуре. Программные прерывания генерируются специфическими инструкциями процессора.
st - stolen time, украденное время. Это время, украденное виртуальной машиной. При запуске VM ей выделяется часть ресурсов, в т.ч. процессорного времени. Иногда получается, что ОС должна выполнить какую-то задачу, но не может, потому что процессор занят виртуальной машиной. st - время таких простоев.

СРЕДНЯЯ НАГРУЗКА (load average)

Секция представляет среднюю нагрузку за 1, 5 и 15 минут. Под нагрузкой подразумевается количество вычислений, произведенных процессором, т.е., в линуксе это количество процессов в статусе R или D в данный момент. Значение load average даёт относительное представление о том, как долго происходят вычисления.

Как это рассчитывается: числа делятся на количество ядер или процессоров. Например, если в системе 1 ядро, то значение 0,4 означает, что система нагружена на 40%. Значение 1 - это под завязку, 100%. 2,12 означает, что ЦПУ перегружен на 112%. Если ядер 2, то те же 0,4 надо поделить на 2 - будет 0,2, т.е. 20%.

СЕКЦИЯ ПРОЦЕССОВ.

Здесь отражены различные параметры для каждого процесса. Значения полей:

PID - process id, уникальное положительное число, идентифицирующее процесс.
USER - эффективное имя пользователя, отображающееся в эффективный UID. Эффективный - это который используется при проверке прав доступа и позволяет процессам действовать от имени пользователя, отличного от того, кто их запустил.
PR & NI: NI - значение nice для процесса, PR - приоритет с точки зрения планировщика ядра. Значение NI влияет на приоритет.
VIRT, RES, SHR and %MEM - поля, отражающие потребление памяти процессом. VIRT - это общее количество памяти, потребляемое процессом, включая код программы и данные, хранящиеся в памяти, а также страницы, выгруженные на диск в своп.  RES - потребляемая ОП. %MEM - процент от всего объема ОЗУ, занятый процессом.  SHR - количество памяти, разделяемое с другими процессами.
S(R/D/Z/T/t) - статус процесса.
TIME+ - время, потраченное ЦПУ на выполнения процесса со времени его запуска, с точностью  до сотой доли секунды.
COMMAND - имя процесса.

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ КОМАНД top.

Интерфейс команды позволяет управлять процессами, а также различными аспектами вывода. В большинстве случаев нужно нажать клавишу во премя выполнения команды. Регистр учитывается. Клавиши:
k - kill: передать процессу сигнал. Принимает pid процесса и номер сигнала (по умолчанию 15,sigterm). Если процесс нужно завершить принудительно, то номер сигнала будет 9 - sigkill. Если не указать номер процесса, сигнал получит верхний процесс в списке.

▶  Сортировка процессов: чаще всего top применяется, чтобы выяснить, какой процесс потребляет больше ресурсов.
M - сортировать по использованию памяти.
P - по использованию ЦПУ.
N - по PID.
T - по времени выполнения.
По умолчанию порядок будет нисходящий. Чтобы изменить его на восходящий, нужно нажать R (reverse).
Можно сразу запустить команду с определенной сортировкой. За это отвечает параметр -о.
Например: top -o %CPU
Таким образом можно сортировать по любому атрибуту из секции статистики.

▶ Отображение потоков вместо процессов.
Процессы не могут попеременно использовать память или другие ресурсы, т.к. переключение между ними происходит медленно. Поэтому Линукс, как и многие другие ОС, использует потоки. Это части процессов, которые по очереди  используют ресурсы, хотя могут выполняться одновременно, как процессы. По умолчанию top  показывает процессы. Для отображения потоков - H. В секции статистики вместо Tasks будет Threads. При этом не изменяется ни один атрибут процессов, т.к. ядро обрабатывает процессы и потоки с помощью одних и тех же структур данных. Таким образом, у каждого потока будут, как и процесса, свои ID, статус и т.д. Чтобы снова переключиться на процессы, нужно снова нажать Н. Буква доступна как параметр при запуске программы: top -H.

▶ Отображение полных путей к программам и выделение системных программ.  Если это нужно - нажмите с. Названия системныx процессов будут отображаться в квадратных скобках. Также можно использовать как ключ: top -c

▶ Отображение в виде дерева - показывает иерархию родитель-потомок. Буква v.

▶ Список процессов, принадлежащих определенному пользователю - u. Принимает имя пользователя. Пустое имя - все пользователи. Или top -u <username>.

▶ Фильтры. Примеры: COMMAND=getty - ищет процесс, у которого в поле команды стоит getty. Если перед COMMAND поставить !:
!COMMAND=getty, то в поле команды не должно быть getty, чтобы имя процесса отобразилось.
%CPU>3.0 - процессы с использованием ЦПУ больше 3%. Чтобы очистить фильтр, нажмите =.

▶ Изменение вида статистики по ЦПУ и памяти. Клавиши t - cpu, m - memory. Появится ...эээ...короче, прогресс-бар. Если нажать несколько раз, то на второй изменится вид бара, потом соответствующее поле пропадёт, на четвертый - снова появится.

▶ Сохранение настроек. Если нажать W после изменения вывода команды, настройки сохранятся - он сам напишет, куда. Файл будет назваться toprc.

ЗАКЛЮЧЕНИЕ.

Мы лишь коснулись поверхности в этой статье, есть ещё много возможностей, которые не были освещены. Например, к выводу можно добавлять дополнительные поля. Чтобы узнать - RTFM.

No comments:

Post a Comment