Руководство по основным командам Linux

программист Linux

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два вида. На самом деле, если вы войдете в систему через среду рабочего стола, чтобыLinuxsystem, затем запустите эмулятор терминала, и вы обнаружите, что будет два активных сеанса.

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Посетите справочную страницу для более глубокого изучения.