top

Часто возникает вопрос как узнать список процессов Linux с помощью командной строки. Вашему вниманию представлены описание утилит для просмотра процессов. В первую очередь изучите возможности утилиты top, потому что это стандартная системная утилита которая доступна во всех дистрибутивах Linux/Unix.

top - интерактивный просмотрщик процессов. htop аналог top.

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

Управляющие клавиши:

  • t - Включение и выключение выдачи на экран суммарных данных.
  • m - Включение и выключение выдачи на экран информации об использовании памяти.
  • 1 - По умолчанию выводятся данные для одного ЦП (ядра). Этот переключатель позволяет увидеть данные по каждому ЦП.
  • f - Вход в меню интерактивного конфигурирования данных, выдаваемых на экран командой top. Полезна для настройки команды top для выполнения специфической задачи.
  • o - Позволяет вам интерактивно задавать порядок строк, выдаваемой командой top.
  • r - Изменение приоритета процессов с помощью команды renice.
  • k - Удаление процесса с помощью команды kill. Программа запрашивает у вас код процесса и сигнал, который будет ему послан.
  • z - Переключение между цветным / монохромным вариантом выдачи изображения.
  • q - Выйти из программы
  • [Пробел] - Немедленно обновить содержимое экрана.
  • n - Изменить число отображаемых процессов. Вам предлагается ввести число.
  • u - Сортировать по имени пользователя.
  • M - Сортировать по объёму используемой памяти.
  • P - Сортировать по загрузке процессора.
  • A - Сортировка строк по максимальному потреблению различных системных ресурсов. Полезна для быстрой идентификации задач, для которых в системе не хватает ресурсов.
  • W - Создание персональных настроек в файле .toprc

Что показывает команда TOP

Расшифровка вывода команды top, например:

top - 10:12:16 up 1 day, 57 min,  3 users,  load average: 0.48, 0.94, 1.19
Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.1%us,  0.7%sy,  0.0%ni, 97.9%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  16466952k total,  6696972k used,  9769980k free,    39484k buffers
Swap: 33554428k total,    45812k used, 33508616k free,  4965696k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND
1621 apache    20   0  488m  22m 6088 S  2.0  0.1   1:01.41 httpd
3534 apache    20   0  486m  22m 4916 S  1.7  0.1   1:02.16 httpd
1542 postgres  20   0  156m  612  352 S  0.3  0.0   0:06.92 postmaster
Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie

Данная строка показывает общее количество процессов, сколько из них запущено, сколько находится в спящем режиме, сколько процессов остановлено, а также количество зомби процессов - процессы, которые закончили свое выполнение, имеется ошибка в работе процессов. Столбец S – текущий статус процесса: R – running; S – sleeping, Z – zombie

Cpu(s):  1.1%us,  0.7%sy,  0.0%ni, 97.9%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st

Данная строка рассказывает нам о состоянии процессора, на что затрачено 100% процессорного времени.

  • us -(%) действия в пользовательском пространстве;
  • sy - (%)затраченного на действия в пространстве ядра;
  • ni - (%) затраченного на процессы с низким приоритетом
  • id - процент (%) затраченного на простаивание - какое количество времени процессор делает ничего
  • wa - процент (%) затраченного на ожидание дисковых операций.
  • hi - процент (%) процессорного времени, затраченного на обработку аппаратных прерываний;
  • si - процент (%) процессорного времени, затраченного на обработку прерываний ПО;
  • st - время в вынужденном ожидании виртуального CPU, пока гипервизор обслуживает другой процессор.
Mem:  16466952k total,  6696972k used,  9769980k free,    39484k buffers

Эта строка в блок посвященный оперативной памяти. Информация о памяти: total - всего памяти; free - доступно незамедлительно; used - используется в данный момент; buff/cache - сумма буферов и кэша (фактически это можно считать доступной свободной памятью, так как чаще всего эта величина содержит в себе счётчик памяти, требуемой для информации, которая уже записана на диск или скоро будет записана.

Swap: 33554428k total,    45812k used, 33508616k free,  4965696k cached

Информация о свап-памяти: всего, свободно, использовано, доступно.

Также информацию о доступной ОЗУ покажет free.

Высокие значения показателей load average (LA) говорят о том, что система не справляется с нагрузкой. Если речь идет о целевом сервере, работающем под высокой нагрузкой, то обычно полезно провести тонкую настройку операционной системы (сетевая подсистема, ограничение на количество одновременно открытых файлов и тому подобное). Высокая загрузка также может быть вызвана аппаратными проблемами (выход из строя жесткого диска) или Обнаружение и защита от DDoS-атак.

top - 10:12:16 up 1 day, 57 min,  3 users,  load average: 0.48, 0.94, 1.19
  • текущее время;
  • up time - время работы системы после включения питания;
  • user - количество пользователей, которые в данный момент работают в системе;
  • load average - общая средняя загрузка системы (измеряется каждые 1, 5 и 15 минут). Общей средней загрузкой системы называется среднее число процессов, находящихся в состоянии выполнения (R) или в состоянии ожидания (D), эту информацию можно увидеть в колонке S вывода команды top, она может принимать 5 значений:
           'D' = uninterruptible sleep (состояние ожидания)
           'R' = running (состояние выполнения)
           'S' = sleeping
           'T' = traced or stopped
           'Z' = zombie

Некоторые интерпретации load average:

  • Если значения равны 0.0, то система в состоянии простоя.
  • Если среднее значение для 1 минуты выше, чем для 5 или 15, то нагрузка растёт.
  • Если среднее значение для 1 минуты ниже, чем для 5 или 15, то нагрузка снижается.
  • Если значения нагрузки выше, чем количество процессоров, то у вас могут быть проблемы с производительностью (в зависимости от ситуации).

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

Приведем простой пример: имеется VPS с двумя ядрами. Значение средней нагрузки: 1.03, 1.11, 1.20 - нормальное значение нагрузки для VPS с 2 ядрами.

1 (единица) LA = 100% нагрузка на 1 ядро CPU. Если на VPS два ядра, то средняя нагрузка может достигать 2 LA:

- LA отображает значения 3.21, 4.22, 5.23 - нагрузка падает, но за последние 15 минут в среднем она была 4.22, что равно 422% нагрузки = 4 из 2 ядер - не норма;

- LA показывает значения 7.15, 5.24, 1.18 - нагрузка увеличивается, и за последние 15 минут она была 1.18, в пределах нормы, что соответствует 118% нагрузки = 1 из 2 ядер - в пределах нормы (пик нагрузки, продолжающийся вплоть до 30 мин, допустим).

Состояния процессов

Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie
  • total — общее количество процессов в системе;
  • running — количество процессов, выполняемых процессором или стоящих в очереди на выполнение;
  • sleeping — количество процессов, ожидающих какого-либо события ввода-вывода;
  • stoped — количество приостановленных процессов;
  • zombie — количество процессов, находящихся в состоянии «зомби»: Как находить и удалять zombie процессы в Linux

Состояния процессора (ЦП).

Cpu(s):  1.1%us,  0.7%sy,  0.0%ni, 97.9%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
  • us — (User CPU time) процент использования процессорного времени программами пользователей;
  • sy — (System CPU time) процент использования процессорного времени процессами ядра Linux;
  • ni — (Nice CPU time) процент использования процессорного времени программами с измененным приоритетом;
  • id — простой процессора
  • wa — (iowait) время, затраченное на завершение ввода/вывода (IO)
  • hi — (Hardware IRQ) процент времени, которое процессор тратит на обработку прерываний на уровне оборудования (hardware- прерываний).
  • si — (Software Interrupts) процент времени, затраченное на работу обработку software- прерываний (network)
  • st — (Steal Time, Время кражи) время, «украденное» гипервизором у этой виртуальной машины для других задач (например работа другой виртуальной машины). Steal Time — это процент времени, в течение которого процесс виртуальной машины ожидает от физического процессора своего процессорного времени. Вы можете отслеживать процессы и использование ресурсов, запустив команду «top» на вашем сервере Linux. Если значение Steal Time равно 20st, это означает, что 20% общего времени процесса тратится на ожидание выделения физического ЦП. Максимальное значение, которое может иметь st, равно 100,0. Это наихудший сценарий, когда виртуальный ЦП ничего не делает, а только ждет, пока гипервизор выделит физический ЦП. К счастью, такая ситуация встречается очень редко. Если st ЦП меньше 10, то беспокоиться не о чем, и приложение должно работать без сбоев. Однако виртуальная машина, вероятно, работает медленнее, чем ожидалось, если значение времени кражи превышает 10, т. е. превышает нормальное значение примерно на 20–30 минут.

Состояние оперативной памяти (ОЗУ). Top показывает, что на компьютере установлено 16GB ОЗУ.

Mem:  16466952k total,  6696972k used,  9769980k free,    39484k buffers
  • total - общее количество оперативной памяти (16466952k / 1024 = 16081MB (мегабайт) = 16GB);
  • used - количество использованной оперативной памяти (6540MB);
  • free - количество свободной оперативной памяти (9540MB);
  • buffers - (38MB).
top показывает объем занятой памяти вместе с кэш. htop выдает объём реально занятой памяти без кэша. Для проверки достоверности данных можно использовать утилиту free как правильно смотреть свободное ОЗУ Linux, которая покажет сколько занято памяти с кэш и без.

Использование Swap- раздела:

Swap: 33554428k total,    45812k used, 33508616k free,  4965696k cached
  • total — общее количество swap- раздела (33554428k / 1024 = 32767 MB);
  • used — количество использованного swap- раздела (45812k = 44 MB);
  • free — количество свободного swap- раздела.
  • PID
  • USER
  • PR
  • NI
  • VIRT - (kb - килобайты). Общее количество виртуальной памяти, используемой программой. VIRT = SWAP + RES.
  • RES - (kb). Количество резидентной (не перемещаемой в swap) памяти. RES = CODE + DATA.
  • SHR - (kb). Количество разделяемой (shared) памяти программы.
  • S - статус процесса.
  • %CPU
  • %MEM
  • TIME+
  • COMMAND

htop

Homepage: htop

Htop – основанный на ncurses просмотрщик процессов подобный top, htop, atop определение загрузки ОС (Load average, LA), но позволяющий прокручивать список процессов вертикально и горизонтально, чтобы видеть их полные параметры запуска. Управление процессами (остановка, изменение приоритета) может выполняться без ручного ввода их идентификаторов.

Htop экономит одну колонку и показывает в колонке PID(процесс) то, что Использование ps для мониторинга процессов (ps -eLf) показывает в колонке LWP(поток; процесс - контейнер для потоков)
  • htop в CentOS теперь CentOS Stream установка из репозитория см. rpm
    # wget http://download.fedora.redhat.com/pub/epel/5/x86_64/htop-0.8.3-1.el5.x86_64.rpm
    # rpm -i htop-0.8.3-1.el5.x86_64.rpm
  • Замечания к BSD системам, при использовании htop

При установки htop на FreeBSD требует смонтированную систему linprocfs, для совместимости с Linux. linprocfs - the Linux process file system, or linprocfs, emulates a subset of Linux' process file system and is required for the complete operation of some Linux binaries.

> man linprocfs
...
> mount -t linprocfs linproc /compat/linux/proc
> df -h
...
linprocfs             4.0K    4.0K      0B   100%    /usr/compat/linux/proc
> cd /usr/ports/sysutils/htop
> make install clean

Скрипт для монтирования linprocfs при загрузки FreeBSD:

> ee /usr/local/etc/rc.d/0start.sh
#! /bin/sh
 
#for htop
/sbin/mount -t linprocfs linproc /compat/linux/proc

Или прописать в fstab строку и для проверки примонтировать командой mount linproc

linproc                 /usr/compat/linux/proc  linprocfs rw    0       0

atop

Домашняя страницаatop. Atop - это ASCII полноэкранный монитор производительности для Linux, который способен сообщать об активности всех процессов (даже если процессы завершились во время интервала), ежедневно записывать в журнал активность системы и процессов для долгосрочного анализа, выделять перегруженные системные ресурсы с помощью цветов и т.д. Через регулярные интервалы времени он показывает активность на уровне системы, связанную с процессором, памятью, подкачкой, дисками (включая LVM) и сетевым уровнем, и для каждого процесса (и потока) показывает, например, использование процессора, рост памяти, использование диска, приоритет, имя пользователя, состояние и код завершения.

В сочетании с дополнительным модулем ядра netatop, он даже показывает сетевую активность для каждого процесса/потока.

CentOS:
yum install atop
 
Daebian: Ubuntu
apt install atop

автозапуск

systemctl enable atop

запуск

systemctl start atop

Конфигурационный файл /etc/default/atop считается устаревшим в некоторых системах, если это так изучайте /usr/share/atop/atop.daily

Запуск

atop

Команда atop имеет несколько основных преимуществ по сравнению с другими инструментами мониторинга производительности:

  • Потребление ресурсов всеми процессами. Она показывает потребление ресурсов всеми процессами, которые были активны в течение интервала, а также потребление ресурсов теми процессами, которые завершились в течение интервала.
  • Использование всех соответствующих ресурсов. Очевидно, что он показывает счетчики системного уровня, касающиеся использования процессора и памяти/swap, однако он также показывает счетчики дискового ввода-вывода и использования сети на системном уровне.
  • Постоянное протоколирование использования ресурсов. Он способен сохранять необработанные счетчики в файл для долгосрочного анализа на системном уровне и на уровне процессов. Эти необработанные счетчики сжимаются в момент записи, чтобы минимизировать использование дискового пространства. По умолчанию ежедневные файлы журнала сохраняются в течение 28 дней. Отчеты об активности системы могут быть сгенерированы из файла журнала с помощью команды atopsar.
  • Выделить критические ресурсы. Выделяет ресурсы, которые (почти) достигли критической нагрузки, с помощью цветов для системной статистики.
  • Масштабируемая ширина окна. Он способен динамически добавлять или удалять колонки в тот момент, когда вы увеличиваете или уменьшаете ширину окна.
  • Потребление ресурсов отдельными потоками. Он может показывать потребление ресурсов для каждого потока в рамках процесса.
  • Смотреть только активность. По умолчанию показывает только те системные ресурсы и процессы, которые были действительно активны в течение последнего интервала, поэтому вывод, относящийся к ресурсам или процессам, которые были полностью пассивны в течение интервала, по умолчанию подавляется.
  • Смотреть только отклонения. Для активных системных ресурсов и процессов отображается только загрузка за последний интервал (не накопленное использование с момента загрузки системы или запуска процесса).
  • Накопленная активность процессов для каждого пользователя. Для каждого интервала можно накопить потребление ресурсов для всех процессов по каждому пользователю.
  • Накопленная активность процессов для каждой программы. Для каждого интервала, он способен накапливать потребление ресурсов для всех процессов с одинаковым именем.
  • Сетевая активность на процесс. В сочетании с дополнительным модулем ядра netatop, он показывает счетчики на уровне процесса, касающиеся количества переданных TCP и UDP пакетов, а также потребленной пропускной способности сети для каждого процесса.

Как пользоваться atop

Команда atopsar — это встроенный анализатор логов atop, который позволит быстро найти проблему и смотреть лог в нужное вам время.

Основные ключи:

  • -b — с какого времени надо вывести лог
  • -e — до какого времени надо вывести лог

Общая нагрузка:

  • -d — нагрузка на каждый диск отдельно
  • -m — нагрузка на оперативную память и swap
  • -с — нагрузка на процессор, отдельно по каждому ядру
  • -p — количество процессов и тредов
  • -w — нагрузка на ipv4
  • -W — ошибки на ipv4
  • -i — нагрузка на интерфейс

Поиск отдельных процессов:

  • -O — top-3 процессов CPU
  • -G — top-3 процессов RAM
  • -D — top-3 процессов диск
  • -N — top-3 процессов сеть

Если вам этого недостаточно, можно посмотреть полный снимок нагрузки на сервер командой: atop -r путь до лога, можно сразу указать временные рамки.

Например: Общий вывод

atop -r /var/log/atop/atop_20220606 -b 21:26:59 -e 23:26:59

Нагрузка на диски:

atop -r /var/log/atop/atop_20220606 -d -b 21:26:59 -e 23:26:59

Откроется тот же atop, в котором видна вся нагрузка на сервере, где можно выставлять сортировку по процессам, но за только на нужное время. Чтобы открыть следующий снимок нагрузки, нажмите t, предыдущий снимок — T. Время снимка указано в первой строке посередине экрана.

Заключение

Существует ряд аналогичных программ, например bashtop.

PQ VPS сервера в 28+ странах.