Мониторинг Linux: программа PS

Автор: logi. Рубрика: Linux Дата: 03.09.2010
Метки: ps, программы

Сегодня я хочу познакомить Вас с очередной замечательной программой для мониторинга Linux систем, это две не замысловатые буквы ps, в которых вложено много смысла. Как в общем почти во все программы…

ps – показывает процессы происходящие в системе в текущий момент. Чтобы посмотреть все процессы используйте опцию -A или -e:

# ps -A


Вот вывод программы на одном из моих VDS:

  PID  TT  STAT      TIME COMMAND
 8478  ??  SJ     0:10.18 /usr/local/sbin/httpd -DSSL
 9245  ??  IJ     0:18.28 /usr/local/sbin/httpd -DSSL
15881  ??  IJ     0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-
15916  ??  SJ    44:12.30 /usr/local/libexec/mysqld --defaults-extra-file=/var
35488  ??  SsJ    0:37.21 /usr/sbin/named -u bind
35712  ??  SsJ    6:23.88 /usr/local/sbin/dovecot -c /usr/local/etc/dovecot.co
35713  ??  SJ     1:44.25 dovecot-auth
35734  ??  IJ     0:14.67 pop3-login
35735  ??  IJ     0:01.01 imap-login
35758  ??  SsJ    5:26.60 sendmail: accepting connections (sendmail)
35764  ??  IsJ    2:19.35 /usr/sbin/cron -s
35781  ??  IsJ    3:02.96 /usr/sbin/inetd -wW -C 60
56590  ??  SsJ    0:00.25 sshd: root@ttyp2 (sshd)
97612  ??  SJ     0:32.97 /usr/local/sbin/httpd -DSSL
99771  ??  SsJ    0:01.58 /usr/local/sbin/httpd -DSSL
99778  ??  IJ     0:00.01 /usr/local/sbin/httpd -DSSL
39104  p2  R+J    0:00.00 ps -A
56641  p2  SsJ    0:00.04 -csh (csh)

Как правило, у «самостоятельного» сервера текущих процессов гораздо больше:

  PID TTY          TIME CMD
    1 ?        00:00:05 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:03 ksoftirqd/0
    5 ?        00:00:00 watchdog/0
    6 ?        00:00:00 migration/1
    7 ?        00:00:03 ksoftirqd/1
    8 ?        00:00:00 watchdog/1
    9 ?        00:00:05 events/0
   10 ?        00:00:05 events/1
   11 ?        00:00:00 khelper
   86 ?        00:00:44 kblockd/0
   87 ?        00:00:46 kblockd/1
   90 ?        00:00:00 kacpid
   91 ?        00:00:00 kacpi_notify
  170 ?        00:00:00 ata/0
  171 ?        00:00:00 ata/1
  172 ?        00:00:00 ata_aux
  173 ?        00:00:00 ksuspend_usbd
  178 ?        00:00:00 khubd
  181 ?        00:00:00 kseriod
  231 ?        00:10:44 kswapd0
  272 ?        00:00:00 aio/0
  273 ?        00:00:00 aio/1
  953 ?        00:00:00 scsi_eh_0
  955 ?        00:00:00 scsi_eh_1
  957 ?        00:00:00 scsi_eh_2
  959 ?        00:00:00 scsi_eh_3
  961 ?        00:00:00 scsi_eh_4
  963 ?        00:00:00 scsi_eh_5
  986 ?        00:00:00 khpsbpkt
 1054 ?        00:00:00 kpsmoused
 1057 ?        00:00:00 kondemand/0
 1058 ?        00:00:00 kondemand/1
 1064 ?        00:00:00 rpciod/0
 1065 ?        00:00:00 rpciod/1
 1066 ?        00:00:00 reiserfs/0
 1067 ?        00:00:00 reiserfs/1
 1160 ?        00:00:01 udevd
 2383 ?        00:02:28 apache2
 2742 ?        00:07:57 kjournald
 4319 ?        00:00:08 syslog-ng
 4856 ?        3-12:31:18 mysqld
 4934 ?        00:00:06 sshd
 5114 ?        00:00:00 cron
 5185 tty1     00:00:00 agetty
 5186 tty2     00:00:00 agetty
 5187 tty3     00:00:00 agetty
 5189 tty4     00:00:00 agetty
 5191 tty5     00:00:00 agetty
 5193 tty6     00:00:00 agetty
 8524 ?        00:00:00 pdflush
 8537 ?        00:00:02 pdflush
13516 ?        00:00:00 apache2
13674 ?        00:00:00 apache2
...
....
13924 ?        00:00:00 apache2
13929 ?        00:00:00 sshd
13932 pts/0    00:00:00 bash
13940 ?        00:00:00 apache2
13941 ?        00:00:00 apache2
13942 ?        00:00:00 apache2
..
....
13974 ?        00:00:00 apache2
13975 ?        00:00:00 apache2
13976 pts/0    00:00:00 ps

Плюс ps в её информативности. Давайте далее рассмотрим несколько полезных параметров программы:

Более подробный вывод

# ps -Al

Так же можно переключиться в так называемый экстра полный режим. Тут показываются переменные для каждого процесса системы. Делается это командой:

# ps -AlF

По видимому в системах FreeBSD, как минимум 6 и 7 версии экстра полный режим вывода команды ps отсутствует, в то время как система Gentoo мне в нём не отказала…

Увидеть Треды(Threads) ( LWP и NLWP)

# ps -AlFH

Показать Треды(Threads) сразу после процессов

# ps -AlLm

Показать все процессы на сервере

# ps ax
# ps axu

Показать дерево процессов

# ps -ejH
# ps axjf
# pstree

Показать конфиденциальную информацию

# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM

Показать все процессы запущенные с правами юзера Ivan

 # ps -U Ivan -u Ivan u

Показать вывод программы в формате определённым пользователем

# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan

Показать только все ID процесса apache2

# ps -C apache2 -o pid=

или

# pgrep apache2

Показать имя процесса с ID 15246

# ps -p 15246 -o comm=

Показать Топ 10 процессов «пожирателей» памяти

# ps -auxf | sort -nr -k 4 | head -10

Показать Топ 10 процессов «пожирателей» процессора

# ps -auxf | sort -nr -k 3 | head -10

И это малая часть возможностей программы. Более подробно о программе ps можно почитать на официальном сайте: http://procps.sf.net/.

Я лишь могу добавить, что чаще всего использую параметры:
Для просмотра процессов системы

# ps aux

Для нахождения определённого процесса в системе и определения его параметров
В данном случае – apache.

# ps aux | grep apache