top
Команда позволяет пользователям отслеживать процессы и использование системных ресурсов в Linux, это один из самых полезных инструментов в наборе инструментов системного администратора, который предустановлен в каждом дистрибутиве. а такжеps
В отличие от других команд, она интерактивна, мы можем просматривать список процессов, убивать процессы и т. д. В этой статье мы узнаем, как использоватьtop
Заказ.
Getting started
top
Команда очень простая, нужно просто ввести в терминалеtop
Вот и все.top
Команда запустит интерактивное приложение командной строки, как показано ниже, верхняя часть вывода содержит статистику о процессах и использовании ресурсов, а нижняя часть содержит список запущенных в данный момент процессов. Список можно просматривать с помощью клавиш со стрелками и клавиш страницы вверх/вниз. Если вы хотите выйти, просто нажмитеq
ключ.
$ top
top - 21:07:28 up 21 days, 4:31, 1 user, load average: 0.12, 0.06, 0.07
Tasks: 33 total, 1 running, 31 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 89.7 id, 0.0 wa, 0.0 hi, 0.0 si, 9.6 st
KiB Mem : 33554432 total, 31188884 free, 513100 used, 1852448 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 31188884 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
52601 root 39 19 1310268 14900 9836 S 0.3 0.0 22:59.21 logagent-collec
1 root 20 0 45416 5244 3968 S 0.0 0.0 5:35.71 systemd
340 root 20 0 64700 21336 17684 S 0.0 0.1 8:33.90 systemd-journal
357 root 20 0 101836 2768 2312 S 0.0 0.0 0:01.13 gssproxy
384 dbus 20 0 28632 2800 2464 S 0.0 0.0 0:00.04 dbus-daemon
432 root 20 0 84760 5852 4984 S 0.0 0.0 0:00.01 sshd
461 agent 20 0 52376 5200 3684 S 0.0 0.0 0:00.01 ilogtail
1690 agent 20 0 2193388 246304 11264 S 0.0 0.7 23:45.88 java
2527 admin 20 0 161744 4268 3704 R 0.0 0.0 0:00.72 top
3245 root 20 0 559140 12412 5860 S 0.0 0.0 64:48.67 logagent
3420 root 20 0 745052 58464 43820 S 0.0 0.2 11:16.32 metricbeat
3447 root 20 0 957796 55548 43708 S 0.0 0.2 10:14.47 metricbeat
5093 root 20 0 1905356 159280 9584 S 0.0 0.5 35:00.14 java
7458 root 20 0 13700 2564 2356 S 0.0 0.0 0:00.00 bash
7464 root 20 0 86268 4436 3740 S 0.0 0.0 0:00.00 sudo
# ... 省略其他
top
Есть много вариантов, но в оставшейся части этой статьи мы обсудим наиболее распространенные из них —props -ng
Вариант, который поставляется с пакетом, давайте запустим проверку ниже:
$ top -v
procps-ng version 3.3.10
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
существуетtop
В интерфейсе происходит довольно много всего, и мы проанализируем их один за другим в следующем разделе.
Понимание интерфейса top — сводная область
в первом разделеtop
Выходной интерфейс , мы можем ясно видеть, что он разделен на две части, В этом разделе мы сосредоточимся на верхней части информации, которая обычно называется:summary area
Системное время, время безотказной работы и сеансы пользователей
- системное время: текущее системное время (
21:07:28
) - Нормальная работа: время работы системы (
21 days, 4:31
) - Активные сеансы пользователей: 1
top - 21:07:28 up 21 days, 4:31, 1 user,
Активные пользовательские сеансы включаютTTYа такжеPTYдва вида. На самом деле, если вы войдете в систему через среду рабочего стола, чтобыLinux
system, затем запустите эмулятор терминала, и вы обнаружите, что будет два активных сеанса.
TTY: работает физически в системе через командную строку или среду рабочего стола. PTY: Окно эмулятора терминала или через SSH
Если мы хотим получить больше информации об активных пользовательских сеансах, мы можем сделать это черезwho
команду получить следующим образом:
$ who
admin pts/0 2020-10-31 17:15 (xx.xx.xx.xx)
использование памяти
Memory
В этом разделе отображается информация об использовании системной памяти следующим образом:
KiB Mem : 33554432 total, 31188208 free, 513488 used, 1852736 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 31188208 avail Mem
Mem
а такжеSwap
Показаны соответственноRAM
а такжеswap
пространственная информация; когдаRAM
Когда коэффициент использования близок к полному,RAM
редко используемые области будут записаны вSwap
место, чтобы восстановить позже, если это необходимо. Однако из-за низкой скорости доступа к диску чрезмерное довериеSwap
Может ухудшить производительность системы.
Об обмене
Физическая память — это фактический объем памяти компьютера, определяемый
RAM
состоит из чипсов. Виртуальная память виртуализирована и использует диск вместо памяти. Появление виртуальной памяти частично решило проблему нехватки машинной памяти. Когда программа работает, операционная система выполняет замену и загрузку определенной виртуальной памяти в физическую память (управление виртуальной памятью соответствующих страниц и сегментов). Виртуальная память здесь — это так называемый своп;Когда пользователь отправляет программу, процесс запускается и запускается на машине. Машина определит, свободна ли текущая физическая память, чтобы позволить процессу быть перенесенным в память для запуска.Если да, он будет непосредственно передан в память для запуска; если нет, он выберет процесс для приостановки в соответствии с приоритет, и подкачать процесс, чтобы подкачать, чтобы ждать. , а затем перенести новый процесс в память для запуска. В соответствии с этой заменой и заменой реализуется повторное использование памяти, так что пользователь не чувствует ограничения памяти. Из этого также видно, что swap играет очень важную роль, заключающуюся во временном хранении выгружаемого процесса.
Обмен данными между памятью и подкачкой осуществляется в единицах страниц памяти, обычно размер страницы в Linux устанавливается равным 4 КБ. Память и диск обмениваются данными блоками
total
,free
,used
Это то же самое, что и значение этих слов, которые представляют собой общий размер, свободный размер и используемый размер текущего соответствующего пространства.avail mem
Значение относится к объему памяти, который может быть выделен процессу без увеличения объема подкачки.
Уровень ядра Linux всегда пытается уменьшить количество обращений к диску другим способом;RAM
На диске поддерживается «дисковый кеш» для хранения часто используемых областей диска, кроме того, записи на диск хранятся в «дисковом буфере», и ядро в конечном итоге записывает их на диск. Общая потребляемая ими память составляетbuff/cache
ценность. Это выглядит плохо, но это не так, причина в том, что память, используемая кешем, будет выделяться процессу по мере необходимости.
Задачи - Задачи
Tasks
Раздел показывает статистику о запущенных в системе процессах
Tasks: 33 total, 1 running, 31 sleeping, 0 stopped, 1 zombie
total
Это легко понять, он представляет собой общее количество процессов, запущенных в текущей системе. Но для нескольких других чисел, связанных с состоянием, нам нужно немного понятьLinux
Базовые знания о том, как ядро обрабатывает процессы.
Выполнение процесса — это гибридный режим работы, связанной с вводом-выводом (например, чтение с диска), и работы, связанной с процессором (например, выполнение арифметических операций). Когда процесс выполняет ввод-вывод, ЦП простаивает, поэтому ОС в это время переключается на выполнение других процессов. Кроме того, ОС позволяет данному процессу выполняться в течение очень короткого времени, прежде чем он переключится на другой процесс. Вот что такое «многозадачность» операционной системы. Выполнение всего этого требует от нас отслеживания «состояния» процесса. В Linux процесс может находиться в следующих состояниях:
- 1. Runnable (R): Процесс в этом состоянии либо выполняется на ЦП, либо существует в очереди выполнения, готовый к выполнению.
- 2. Прерываемый сон (S): процесс в этом состоянии ожидает завершения события.
- 3. Непрерывный сон (D): в этом случае процесс ожидает завершения операции ввода-вывода.
- 4. Остановлено (T): эти процессы были остановлены по сигналу управления заданием (например, по нажатию Ctrl+Z) или из-за того, что они отслеживаются.
- 5. Зомби (Z): зомби-процесс
Процесс может создать множество дочерних процессов, и эти дочерние процессы могут завершиться, пока родительский процесс все еще существует, однако эти структуры данных должны сохраняться до тех пор, пока родительский процесс не получит состояние дочернего процесса. Завершенный процесс, структура данных которого все еще существует, называется зомби-процессом. Оба состояния D и S находятся вtop
информация отражается вsleeping
, состояние T представлено какstopped
,Z
Состояние проявляется какzombie
.
использование процессора
Загрузка ЦП, показывающая процент времени ЦП, затрачиваемого на различные задачи.
%Cpu(s): 0.3 us, 0.4 sy, 0.0 ni, 90.3 id, 0.0 wa, 0.0 hi, 0.0 si, 9.0 st
us
Относится ко времени, которое ЦП тратит на выполнение процесса в пользовательском пространстве. Так же,sy
Относится ко времени, затраченному на выполнение процесса пространства ядра. Используется в Linuxnice
Значение представляет собой приоритет процесса. Чем выше значение, тем ниже приоритет. Позже мы узнаем, что значение по умолчаниюnice
Значение можно изменить. в ручной настройкеnice
В случае время, затраченное на выполнение процесса, отображается какni
ценность.ni
позадиid
, то есть количество времени, в течение которого ЦП остается бездействующим, и большинство операционных систем устанавливают его в «режим энергосбережения», когда ЦП бездействует. Далееwa
Значение, которое представляет собой время, которое ЦП тратит на ожидание завершения ввода-вывода.
Прерывание — это сигнал процессору о событии, требующем немедленного внимания; периферийные устройства обычно используют аппаратные прерывания для информирования системы о событии, например о нажатии клавиши на клавиатуре. С другой стороны, программные прерывания генерируются из-за определенных инструкций, выполняемых процессором. В обоих случаях их будет обрабатывать операционная система, а время, затрачиваемое на обработку аппаратных и программных прерываний, определяетсяhi
а такжеsi
данный.
В виртуализированной среде часть ресурсов ЦП выделяется каждой виртуальной машине (ВМ). ОС определяет, когда есть работа, и если она обнаруживает, что ему нужно это сделать, но не может, потому что ЦП занят другими виртуальными машинами, время, потраченное впустую таким образом, является «украденным» временем, показанным какst
.
Средняя нагрузка - Средняя нагрузка
load average
Разделы представляют собой среднюю «нагрузку» системы за последние 1, 5 и 15 минут.
load average: 0.11, 0.07, 0.07
нагрузкаявляется мерой вычислительных усилий, выполняемых системой. В Linux нагрузка в любой момент времениR
а такжеD
Количество процессов в состоянии.load averageЗначение дает вам относительную меру того, как долго вам придется ждать завершения задачи. Вот несколько небольших примеров, давайте интуитивно разберемся в этих двух понятиях.
- 1. В одноядерной системе
load average
Значение 0,4 означает, что система выполняет только 40% работы, которую может.load average
Значение 1 означает, что система работает точно на полную мощность — даже небольшая дополнительная работа может привести к перегрузке системы. Одинload average
Система на уровне 2.12 означает, что она перегружена работой на 112% больше, чем может выполнить. - 2. В многоядерных системах сначала следует использовать
load average
Разделите на количество ядер ЦП, чтобы получить аналогичный показатель.
также,load average
На самом деле не типично, как известно большинству из нассредняя нагрузка. Это «экспоненциальная скользящая средняя», что означает, что предыдущаяload average
Для текущего значения учитывается малая доля (для этой точки можно перейтиэта статьядля более подробной технической информации).
Разберитесь с интерфейсом верхней - область задач
summury area
Относительно простой, с помощью которого мы можем быстро узнать некоторую сводную статистику текущей работы системы. А вот подробную информацию мы можем передать толькоtask area
приходите получать.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
52601 root 39 19 1310268 14900 9836 S 0.3 0.0 22:59.21 logagent-collec
1 root 20 0 45416 5244 3968 S 0.0 0.0 5:35.71 systemd
340 root 20 0 64700 21336 17684 S 0.0 0.1 8:33.90 systemd-journal
357 root 20 0 101836 2768 2312 S 0.0 0.0 0:01.13 gssproxy
384 dbus 20 0 28632 2800 2464 S 0.0 0.0 0:00.04 dbus-daemon
432 root 20 0 84760 5852 4984 S 0.0 0.0 0:00.01 sshd
461 agent 20 0 52376 5200 3684 S 0.0 0.0 0:00.01 ilogtail
1690 agent 20 0 2193388 246304 11264 S 0.0 0.7 23:45.88 java
2527 admin 20 0 161744 4268 3704 R 0.0 0.0 0:00.72 top
3245 root 20 0 559140 12412 5860 S 0.0 0.0 64:48.67 logagent
3420 root 20 0 745052 58464 43820 S 0.0 0.2 11:16.32 metricbeat
3447 root 20 0 957796 55548 43708 S 0.0 0.2 10:14.47 metricbeat
5093 root 20 0 1905356 159280 9584 S 0.0 0.5 35:00.14 java
7458 root 20 0 13700 2564 2356 S 0.0 0.0 0:00.00 bash
7464 root 20 0 86268 4436 3740 S 0.0 0.0 0:00.00 sudo
Давайте сначала объясним значение следующих столбцов:
PID
Это идентификатор процесса, уникальное положительное целое число, идентифицирующее процесс.
USER
Это «эффективное» имя пользователя (сопоставленное с идентификатором пользователя) пользователя, запустившего процесс. Linux присваивает процессу реальный идентификатор пользователя и эффективный идентификатор пользователя; последний позволяет процессу действовать от имени другого пользователя. (Например, пользователи без полномочий root могут получить права root для установки программного обеспечения.)
PR NIПоле «NI» показывает «хорошее» значение процесса, поле «PR» показывает приоритет планирования процесса с точки зрения ядра, а «хорошее» значение влияет на приоритет процесса.
VIRT, RES, SHR and %MEM
VIRT
,RES
,SHR
Все три поля связаны с потреблением памяти процессом.VIRT
общий объем памяти, потребляемой процессом. Это включает в себя программный код, данные, которые процесс хранит в памяти, иswap
в любую область памяти на диске.RES
это память, потребляемая процессом в оперативной памяти,%MEM
Указывает это значение в процентах от общего объема доступной оперативной памяти. наконец-то,SHR
это объем памяти, совместно используемой с другими процессами.
SУказывает состояние процесса
TIME+
TIME+
Столбец представляет общее время ЦП, использованное процессом с момента его запуска, с точностью до сотой доли секунды.
COMMAND
COMMAND
Столбец представляет имя текущего процесса.
Пример использования верхней команды
До сих пор мы обсуждалиtop
Значение, описываемое интерфейсной информацией. но,top
Помимо отображения этой информации, он также может управлять процессами, и мы можем контролироватьtop
аспекты выпуска. В этом разделе мы приведем несколько примеров. (В большинстве приведенных ниже примеров вы должныtop
Нажмите клавишу во время бега. Эти клавиши чувствительны к регистру, поэтому, если вы нажметеk
, вы действительно нажалиk
, но эта команда не будет работать)
убить процесс
Если вы хотите убить процесс, просто вtop
Нажмите во время бегаk
. Это вызовет приглашение, которое запросит идентификатор процесса процесса и нажмитеenter
.
PID to signal/kill [default pid = 384]
Конечно, за приведенным выше выводом следует идентификатор процесса, который можно ввести вручную.
PID to signal/kill [default pid = 384] 34444444444444
Если оставить пустым,top
будет использоватьSIGTERM
, что позволяет завершить процесс корректно. Если вы хотите принудительно убить процесс, вы можете ввести здесьSIGKILL
. Здесь также можно ввести номер сигнала, например,SIGTERM
Цифры384
,а такжеSIGKILL
Цифры。如果你将进程ID留空并直接按
enter`, который уничтожит самый верхний процесс в списке. Как упоминалось ранее, мы также можем использовать клавиши со стрелками для прокрутки и изменения процесса, который мы хотим убить таким образом.
Сортировать список процессов
использовать что-то вродеtop
Одна из самых распространенных причин использования такого инструмента — выяснить, какой процесс потребляет больше всего ресурсов. Мы можем отсортировать список по следующим ключам:
- M: для сортировки по использованию памяти
- P: для сортировки по загрузке ЦП
- N: сортировать по идентификатору процесса
- T: сортировать по времени работы
по умолчанию,top
Все результаты отображаются в порядке убывания, но мы можем сделать это, нажавR
клавишу для переключения в порядке возрастания. также можно использовать-o
переключатель для сортировки списка. Например, если вы хотите отсортировать процессCPU
Чтобы использовать, вы можете сделать это:
top -o %CPU
Показать список потоков вместо списка процессов
Мы уже рассмотрели, как Linux переключается между процессами. Мы знаем, что процессы не разделяют память или другие ресурсы, что делает это переключение довольно медленным. Как и другие операционные системы, Linux поддерживает «облегченную» альтернативу, называемую «потоками». «Поток» является частью процесса, «потоки» могут совместно использовать определенные области памяти и другие ресурсы, а также могут работать одновременно, как процессы. по умолчанию,top
Отображает список процессов в своем выводе. Если вы хотите перечислить потоки вместо процессов, нажмитеH
Вот и все, в строке «Задачи» теперь будут отображаться «Потоки», показывающие количество потоков, а не количество процессов.
Threads: 351 total, 2 running, 349 sleeping, 0 stopped, 0 zombie
Внимательные читатели могут обнаружить, что строка "Задачи" в области сводки изменена на "Потоки", но в области задач атрибуты в соответствующем списке не изменились. Поскольку процессы и потоки разные, то как это сделать ?Возможно?Причина в том,Linux
Внутри ядра потоки и процессы используют одни и те же структуры данных для обработки, поэтому каждый поток имеет свой собственный идентификатор, состояние и так далее. Если мы хотим вернуться к просмотру процесса, снова нажмитеH
Вот и все. Кроме того, вы также можете использоватьtop -H
Темы отображаются по умолчанию.
Показать полный путь процесса
По умолчанию все имена процессов в столбце КОМАНДА отображают суммарное имя.Если мы хотим отобразить путь завершения текущего процесса, мы можем нажатьc
для переключения угла обзора или непосредственного использованияtop -c
для запуска интерактивного интерфейса.
Отображение родительских и дочерних процессов в древовидной структуре
Это можно сделать, нажав в верхнем диалогеV
сократить доforest view
Перспектива, то есть отображение родительского и дочернего процессов в древовидной структуре.
432 root 20 0 84760 5852 4984 S 0.0 0.0 0:00.01 `- /usr/sbin/sshd -D
98518 root 20 0 118432 6884 5792 S 0.0 0.0 0:00.00 `- sshd: admin [priv]
98520 admin 20 0 118432 3648 2556 S 0.0 0.0 0:01.32 `- sshd: admin@pts/0
98521 admin 20 0 120656 4936 3768 S 0.0 0.0 0:00.34 `- -bash
130138 admin 20 0 161748 4208 3624 R 0.0 0.0 0:00.27 `- top -c
Список процессов пользователя
Чтобы перечислить процессы пользователя, вtop
Нажмите во время бегаu
. Затем введите имя пользователя или оставьте его пустым, чтобы отобразить процессы для всех пользователей; или просто передайтеtop -u xxx
чтобы указать всю информацию о процессе для пользователя xxx.
KiB Swap: 2097148 total, 2097148 free, 0 used. 31179088 avail Mem
Which user (blank for all) root # waiting for input
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 45416 5244 3968 S 0.0 0.0 5:37.57 /usr/lib/systemd/systemd --system --deserialize 18
340 root 20 0 72892 30836 27184 S 0.0 0.1 8:36.56 /usr/lib/systemd/systemd-journald
357 root 20 0 101836 2768 2312 S 0.0 0.0 0:01.14 /usr/sbin/gssproxy -D
432 root 20 0 84760 5852 4984 S 0.0 0.0 0:00.01 /usr/sbin/sshd -D
процесс фильтрации
Если нам нужно иметь дело со многими процессами, то простая сортировка нам особо не поможет. Тогда в этом случае мы можем нажатьo
активироватьtop
, а затем отфильтруйте наш текущий процесс, введя выражение фильтра. Выражения фильтра — это операторы, определяющие отношения между свойствами и значениями, например:
- КОМАНДА=java: имя процесса=java
- !COMMAND=java: имя процесса !=java
- %CPU>3.0: для CPU > 3.0
Чтобы очистить все фильтры, нажмите=
Вот и все.
Суммировать
Эта статья в основном оРуководство по команде «Top» в LinuxНекоторые переводы этой статьи, спасибо оригинальному автору за то, что поделились
top
Команды очень полезны для мониторинга и управления процессами в системе Linux, эта статья лишь коснулась поверхности, мы не рассмотрели много вещей, например, какtop
чтобы добавить больше столбцов. Дополнительную информацию можно получить, запустивman top
Посетите справочную страницу для более глубокого изучения.