Мониторинг процессов

Основным инструментом для исследования процессов является команда ps. Она выводит состояние процессов на момент ее выполнения в системе. Без опций она выводит список процессов, связанных с текущим терминалом (пример 5.7).

 

Пример 5.7. Команда ps

 

$ ps

PID TTY TIME CMD

1751 pts/0 00:00:00 bash

1890 pts/0 00:00:00 ps

 

Столбец PID (см. пример 5.7) отображает идентификаторы процессов, TTY — имена терминалов, TIME — суммарное процессорное время, затра- ченное процессом с момента его старта. Столбец CMD — командная строка процесса.

Подробную информацию можно получить с помощью опции -f (full format).

 

Пример 5.8. Подробный формат вывода команды ps -f

 

$ ps -f  
UID PID PPID C STIME TTY TIME CMD
user1 0 21:01 pts/0 00:00:00 bash
user1 0 23:14 pts/0 00:00:00 ps -f

 

Как видно из примера 5.8, в вывод добавляются дополнительные столбцы с информацией о UID владельца процесса, родителе процесса (PPID), столбец STIME показывает время запуска процесса, столбец C — фактор загрузки про- цессора (требуется планировщику для расчета приоритета процесса).

Еще более подробную информацию предоставляет опция -l (long format).


 

Пример 5.9. Длинный формат вывода команды ps -l

 

$ ps -l

 

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 76 - 781 11c541 pts/0 00:00:00 bash
0 R 0 77 - 617 - pts/0 00:00:00 ps

 

В примере 5.9 столбец F показывает флаги процесса (см. man ps).

Столбец S — статус процесса, который может быть:

r D — процесс приостановлен и не может быть прерван (например, ожидает окончания ввода/вывода);

r R — процесс выполняется или находится в очереди;

r S — процесс приостановлен;

r T — процесс трассируется;

r Z — процесс помечен как defunct (zombie).

Столбец NI показывает величину nice number. Эта величина устанавливается пользователем и участвует в вычислении приоритета процесса планировщи- ком. Столбец SZ — количество памяти, занимаемое процессом, а WCHAN — это информация о системном вызове, произведенном процессом.

Исключительно полезна опция -e, позволяющая вывести список всех процессов в системе (аналог — опция –A). Чаще всего для получения списка всех процессов используют команду ps -ef, дающую подробную информацию о процессах.

Бывает необходимо вывести список каких-либо конкретных процессов, вы- бранных по заданному критерию. Далее приведены некоторые опции фильт- рации ps:

r -u — фильтрация по UID;

r -t — фильтрация по терминалу;

r -p — фильтрация по PID искомого процесса;

r -C — фильтрация по командной строке.

Требуется, например, вывести список процессов, запущенных на втором вир- туальном терминале (пример 5.10).

 

Пример 5.10. Фильтрация процессов по заданному терминалу

 

$ ps -ft tty2

UID PID PPID C STIME TTY TIME CMD

root 1557 1 0 06:18 tty2 00:00:00 /sbin/mingetty tty2


 

Вывести список процессов с заданной командной строкой можно, указав по- сле опции -C команды ps имя требуемой команды, например, ps -C bash. Имеется также команда pgrep, позволяющая получить PID процессов по за- данной командной строке, например, pgrep bash.

Все приведенные выше команды соответствуют POSIX-формату, однако GNU-версия программы ps поддерживает также опции и в BSD-стиле. Наи- более популярной командой в таком формате является ps aux — она выводит список всех процессов в системе с указанием их владельцев. В примере 5.11 приведен небольшой фрагмент из ее вывода.

 

Пример 5.11. Опции команды ps в BSD-стиле

 

$ ps aux  
USER   PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root   1 0.0 0.1 1268 60 ? S Oct08 0:04 init

 

Эта команда отобразила в виде процентов уровень загрузки процессора и па- мяти данным процессом. Столбец VSZ — объем используемой процессом виртуальной памяти, а RSS — физической памяти.

Опции POSIX, BSD и длинные опции GNU команды ps можно комбини- ровать.

 

Пример 5.12. Комбинация опций команды ps в POSIX- и BSD-стилях

 

$ ps -f U root

UID PID PPID C STIME TTY STAT TIME CMD

root 1 0 0 06:18 ? S 0:04 init

root 2 1 0 06:18 ? SW 0:00 [keventd]

 

 

Пример 5.12 содержит фрагмент вывода команды ps –f U root. В этом при- мере для выбора процессов пользователя root была использована опция в BSD-стиле U, а POSIX-опция -f была задана для указания подробного форма- та вывода.

В процессах могут быть созданы последовательности параллельно испол- няющихся инструкций, называемых потоками (threads) или облегченными процессами (LWP, Light Weight Process). Для получения информации о пото- ках необходимо использовать опцию –L (пример 5.13).


 

Пример 5.13. Получение информации о потоках

 

$ ps -fLC swriter.bin

 

UID PID PPID LWP C NLWP STIME TTY TIME CMD  
user1 5 Oct13 ? 00:00:50 swriter.bin -writer
user1 5 Oct13 ? 00:00:00 swriter.bin -writer
user1 5 Oct13 ? 00:00:00 swriter.bin -writer
user1 5 Oct13 ? 00:00:00 swriter.bin -writer
user1 5 Oct13 ? 00:00:00 swriter.bin -writer

 

В примере 5.13 демонстрируется, что у процесса swriter.bin (Open Office) PID равен 2891. В этом процессе имеется пять потоков со своими идентифи- каторами, выводимыми в столбце LWP.

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

Утилита top регулярно обновляет информацию о процессах. Для выхода из нее необходимо набрать q. Эта команда позволяет, не выходя из интерактив- ного просмотра процессов, посылать процессам сигналы с помощью нажатия k. Нажатие i отключает вывод top неактивных процессов. В первой строке эк- рана вывода команды приводятся данные о средней загруженности системы (load averages) за последние 1, 5 и 15 минут.

Удобно использовать также команду w, демонстрирующую список всех во- шедших в сеанс пользователей и запущенные ими задания (пример 5.14).

 

Пример 5.14. Команда w

 

$ w

18:17:10 up 22 min, 2 users, load average: 0.30, 0.38, 0.37

 

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 pts/0 :0.0 5:56pm 1.00s 0.05s 0.00s w

 

Исключительно важным инструментом, позволяющим получить информа- цию о процессах в системе, является каталог /proc (пример 5.15). То, что в нем находится, не является в полном смысле файлами — это псевдофайло- вая система, порождаемая ядром. Она позволяет выводить информацию о процессах, получать и устанавливать параметры ядра на лету.


 

Пример 5.15. Файловая система /proc

 

$ ls /proc  
driver kcore mtrr sys
execdomains kmsg net sysvipc
fb ksyms partitions tty
apm filesystems loadavg pci uptime
asound fs locks scsi version
bus ide mdstat self
cmdline interrupts meminfo slabinfo
cpuinfo iomem misc splash
devices ioports modules stat
dma irq mounts swaps

 

Подкаталоги /proc с именами, состоящими из цифр, соответствуют PID про- цессов.

Определим, например, PID текущей оболочки и исследуем соответствующий ее процессу каталог (пример 5.16).

 

Пример 5.16. Файлы в /proc

 

$ pgrep bash 1751

$ ls /proc/1751

cmdline cwd environ exe fd maps mem mounts root stat statm status

$ cat /proc/1751/cmdline bash

 

Файл cmdline содержит в себе командную строку процесса, а файл status — подробную информацию о статусе процесса. Подкаталог fd предназначен для мониторинга файлов, открытых процессом. В нем содержатся символи- ческие ссылки на реально открытые файлы процессом. Имена этих симво- лических ссылок соответствуют номерам файловых дескрипторов откры- тых файлов.

Исключительно важной является команда fuser, позволяющая определить, какие процессы открыли заданный файл. В примере 5.17, приведенном далее, пользователь смонтировал DVD в каталоге /mnt/dvd, перешел в этот каталог и получил информацию о процессе, использующем этот каталог.


 

Пример 5.17. Команда fuser

 

$ mount /mnt/dvd

$ cd /mnt/dvd/

$ /sbin/fuser .

.: 1751c

$ ps –p 1751

PID TTY TIME CMD

1751 pts/0 00:00:00 bash

 

Команда fuser вывела PID процесса оболочки, т. к. для нее этот каталог яв- ляется текущим. Этот факт команда fuser подтверждает, выводя c после PID процесса.

Команда fuser выводит следующие символы после PID процессов:

r c — текущий каталог;

r e — исполняемый файл в момент его работы;

r f — открытый файл;

r r — корневой каталог;

r m — разделяемая библиотека либо отображаемый в память файл.

Опция -m команды fuser позволяет указать, что имя файла является именем смонтированного блочного устройства (пример 5.18).

 

Пример 5.18. Опция -m команды fuser

 

$ /sbin/fuser -m /dev/dvd

/dev/dvd: 1751c

 

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

 

Пример 5.19. Команда pstree

 

$pstree

init-+-2*[automount]

|-cron

|-6*[getty]

|-inetd

 

В примере 5.19 приведен фрагмент иерархического списка процессов.


 








Дата добавления: 2015-06-12; просмотров: 862;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.031 сек.