Мониторинг процессов
Основным инструментом для исследования процессов является команда 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; просмотров: 911;