Ключевые слова:linux, monitor, proc, memory, process, (найти похожие документы)
From: Roman Sozinov <http://sozinov.blogspot.com>
Date: Mon, 19 Dec 2007 14:31:37 +0000 (UTC)
Subject: Инструкция к командам мониторинга из Linux пакета procps
Оригинал: http://sozinov.blogspot.com/2006/08/1-procps.html
В большинстве стандартых поставок 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