2006/08/31

Инструментарий#1 [procps]

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

free
Возвращает информацию о свободной и используемой памяти в системе, как физической, так и виртуальной. Физическая память - реальный объем оперативной памяти, виртуальная - часть диска, использующаяся как продолжение физической памяти. Виртуальная память = swap область на диске.
Пример вывода
#free
total used free shared buffers cached
Mem: 516588 480172 36416 0 5524 75704
-/+ buffers/cache: 398944 117644
Swap: 1975976 70200 1905776
  • total - всего доступной физической памяти. Некоторая область оперативной памяти может быть зарезервирована ядром, поэтому показатель total может быть меньше реального объема оперативной памяти.
  • used - используется памяти (used=total-free)
  • free - незадействованая память. На самом деле память задействованная в кэшах(cached) тоже является свободной и может быть использована в любое время, если есть на то нужда какого-то процесса. Работает принцип "свободная память - потерянная память".
  • shared - память распределенная между процессами, но по непонятной причине всегда показывает 0.
  • buffers - память используемая в буферах.
  • cached - память используемая для кэширования.
  • -/+ buffers/cache - использованная память без учета буферов и кэшей/свободная память с учётом буферов и кэшей
  • swap - использование swap-области
Разница между буферами и кэшами следующая: буфер - это временное хранилище данных, работающих в данный момент процессов, своеобразный временный терминал; кэш - это данные, к которым уже обращались(они были считаны с устройств ввода/вывода), но они были оставлены в памяти для того, чтобы сократить издержки из-за доступа к устройствам ввода/вывода(I/O), скорость доступа к которым значительно(в 1000-чи раз) ниже по сравнению с оперативной памятью.

pmap
Возвращает карту памяти указанного процесса. Ключ -d выводит значение используемой writeable/private-памяти - памяти, которую занимает сам процесс, исключая использование общих(shared)-библиотек.

ps
Выводит список текущих процессов. Много полезной информации выводится с ключами aux. Ключ f показывает процессы с ветвлением от родителей.
Столбцы :
  • UID - идентификатор пользователя;
  • PID - идентификатор процесса
  • PPID - идентификатор родительского процесса. Родителем всех процессов является процесс init с PID равной 1
  • C - приоритет процесса, используемый планировщиком задач;
  • STIME - время старта процесса;
  • TTY - терминал, с которым связан данный процесс;
  • TIME - общее время работы процесса;
  • CMD - команда, запустившая данный процесс «с некоторыми опциями выводит и каталог откуда процесс был запущен»;
  • STAT - состояние, в котором на данный момент находится процесс.
Параметры STAT:
  • R - процесс выполняется в данный момент
  • S - процесс ожидает выполнение ("спит" менее 20 секунд)
  • D - процесс в полной (непрерываемой) спячке, например, ожидает ввода/вывода
  • Z - zombie или defunct процесс, то есть процесс у которого нет родителя.
  • T - процесс остановлен.
  • W - процесс в свопе
  • < - процесс в приоритетном режиме.
  • N - процесс в режиме низкого приоритета
  • L - real-time процесс, имеются страницы заблокированные в памяти.
  • D – процесс находится в ожидании дисковой (непрерываемой) операции
  • I – процесс в ожидающем режиме (процесс "спит" более 20 секунд)
  • J – процесс в "тюрьме" (см. man 2 jail)
Символ + показывает что процесс выполняются на переднем плане (foreground-процессы), s говорит о том, что процесс является начальным в сеансе.

sysctl
Модифицирует параметры ядра во время его работы. Полезна, если необходимо изменить какие-то переменные ядра, без перезагрузки и перекомпиляции.

tload
Отображает график загрузки системы(load average). График выводится с заданной задержкой на терминал в виде столбиков.

top
Отображает загрузку процессора. Используется для слежения за активностью процессора в реальном времени.
Полезные команды:
  • c - Включает/выключает отображение имени программы/полной командной строки в поле COMMAND
  • x - Включает/выключает подсветку колонки, по которой происходит сортировка процессов
  • <,> - сортировка по выбранному столбцу
  • z - Включает/выключает цвет
  • u - показать процессы указанного пользователя
  • Пробел - Заставляет программу перечитать список процессов
Состояние процессора:
  • us - процент использования процессорного времени программами пользователей.
  • sy - процент использования процессорного времени процессами ядра.
  • ni - процент использования процессорного времени программами с измененным приоритетом.
  • id - простой процессора.
  • wa - процент процессорного времени, потраченного на завершение ввода/вывода(IO)
  • hi - процент процессорного времени, потраченного на обработку hard-прерываний (IRQ)
  • si - процент процессорного времени, потраченного на обработку soft-прерываний (network)
Столбцы:
  • VIRT — общий объем виртуальной памяти, используемой процессом, включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100.
  • RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса: а) RES не показывает сколько данных было перемещено в swap, б) часть RES-памяти может быть разделяемой.
  • SHR — количество разделяемой (shared) памяти программы в килобайтах, т.е. памяти, которая может быть использована другими приложениями.
  • DATA - объем памяти, занятой данными, используемые процессом в ходе выполнения.
  • SWAP - объем памяти, используемой процессом, но перемещенной в swap-область.
  • CODE - объем памяти, содержащая исполняемый код процесса.
Эмпирически можно вычислить следующее отношение: VIRT = RES + SWAP.
Все остальные столбцы аналогичны столбцам команды ps.
Кроме интерактивного режима, в котором top выводит данные на экран, можно использовать так называемый командный режим (Batch mode). Он применяется, когда результаты работы программы необходимо передать другим программам или сохранить в файле.
Для запуска программы в командном режиме используют параметр –b. В этом случае список отсортированных процессов (по умолчанию, процессы сортируются по проценту использования процессорного времени) будет с определенной задержкой (по умолчанию три секунды) выводится на стандартный вывод. Количество повторов не ограничено, поэтому необходимо явно завершать работу программы, например, при помощь комбинации клавиш Ctrl+C.
  • n - количество повторов.
  • d - задержка между повторами в секундах.
  • u - определяет пользователя, с правами которого выполняются процессы.
  • p - определяет PID процессов, за которыми должна следить программа.
Например, необходимо с задержкой в четыре секунды два раза получить список процессов, выполняемых с правами пользователя daemon. Для этого программу запускают со следующими параметрами:
#top -b -d 4 -n 3 -u daemon
top - 17:28:22 up 34 min, 1 user, load average: 0.15, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.1% us, 0.6% sy, 0.0% ni, 91.7% id, 5.5% wa, 0.1% hi, 0.0% si
Mem: 246832k total, 242968k used, 3864k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

top - 17:28:26 up 34 min, 1 user, load average: 0.13, 0.05, 0.03
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.8% us, 0.0% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.2% hi, 0.0% si
Mem: 246832k total, 242928k used, 3904k free, 2708k buffers
Swap: 514072k total, 0k used, 514072k free, 107936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3753 daemon 16 0 4972 2616 1940 S 0.0 1.1 0:00.01 named
3787 daemon 16 0 1684 688 584 S 0.0 0.3 0:00.00 atd

uptime

Возвращает время работы системы, количество вошедших в нее пользователей и загрузку системы. Всё то же самое выводит в реальном времени команда top, но top "ест" больше ресурсов.

vmstat
Отображает статистику виртуальной памяти, включая информацию о процессах, памяти, страницах, блоках ввода-вывода, прерываниях и активности CPU. В отчете, выдаваемом по умолчанию, имеются следующие поля:
procs - число процессов, которые:
r - находятся в очереди на выполнение;
b - заблокированы в ожидании ресурсов, например, пока закончатся дисковые операции ввода/вывода или paging;
w - выключены из обмена. Эти значения всегда отражают текущую ситуацию, если даже высвечивается полная информация с момента загрузки.
memory - выводит информацию о памяти(в Кб)
swpd - размер используемой в данный момент виртуальной памяти
free - размер свободной памяти
buff - объем памяти, задействованной в буферах
cache - объем памяти, задействованной на кэширование
swap - сообщает о производительности системы при выполнении замещения страниц по требованию. Пока не будет высвечена полная информация с момента загрузки, эта информация усредняется по производительности на интервале в (interval)-секунд.
si - число загруженных процессов.
so - число выгруженных процессов.
io - содержит информацию об общении с устройствами ввода/вывода
bi - принято блоков из блочного устройства (блоков/сек)
bo - послано блоков на блочное устройство (блоков/сек)
system - сообщает об активности основной системы. Пока не будет высвечена суммарная информация с момента загрузки, эти позиции показывают средние значения за последние (interval)-секунд.
in - число прерываний(в секунду) устройств (несинхронных).
cs - число переключений(в секунду) контекста.
cpu - процент цикла процессора, затрачиваемый на различные режимы:
us - пользователь
sy - система
id - ожидание
wa - операции i/o(ввода/вывода). До Linux 2.5.41 показывала 0.

Литература:
  1. FAQ Linux Memory Management
  2. Перевод статьи Understanding memory usage on Linux
  3. Ps - Википедия
  4. Исследуем процессы
  5. Top - Wiki Open Book
  6. On measuring memory usage

No comments: