Применение команды ps

Команда ps является очень гибким инструментом для определения работающих в системе программ и оценки используемых ими ресурсов. Она выводит статистику и информацию о состоянии процессов в системе, в том числе ИД процесса или нити, объем выполняемого ввода-вывода и используемый объем ресурсов процессора и памяти.

В этом разделе описаны опции и поля вывода, которые относятся к процессору.

Информацию об использовании процессора содержат три столбца вывода команды ps.

Столбец
Значение:
C
Показатель использования процессора процессом (в тактах)
TIME
Общее процессорное время, затраченное на выполнение процесса (в минутах и секундах)
%CPU
Процессорное время, затраченное на выполнение процесса с момента его запуска, поделенное на время, прошедшее с момента запуска процесса. Этот параметр отражает зависимость программы от процессора.

Интенсивность использования процессора

Следующий сценарий оболочки:
# ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15
позволяет найти пользовательские процессы, которые потребляют больше всего ресурсов CPU (для большей наглядности была вставлена строка заголовка).
     UID   PID  PPID   C    STIME    TTY  TIME CMD
    mary 45742 54702 120 15:19:05 pts/29  0:02 ./looper
    root 52122     1  11 15:32:33 pts/31 58:39 xhogger
    root  4250     1   3 15:32:33 pts/31 26:03 xmconsole allcon
    root 38812  4250   1 15:32:34 pts/31  8:58 xmconstats 0 3 30
    root 27036  6864   1 15:18:35      -  0:00 rlogind
    root 47418 25926   0 17:04:26      -  0:00 coelogin <d29dbms:0>
    bick 37652 43538   0 16:58:40  pts/4  0:00 /bin/ksh
    bick 43538     1   0 16:58:38      -  0:07 aixterm
     luc 60062 27036   0 15:18:35 pts/18  0:00 -ksh

Столбец (C) означает недавно использованный процессор. В начале списка находится процесс зацикленной программы. Значение C может минимизировать использование процессором зацикленной программы, так как планировщик остановит процесс при счете 120. Для многопотокового процесса в этом поле отображается сумма для всех потоков в этом процессе.

В следующем примере показана простая программа с пятью потоками, которые находятся в бесконечной зацикленной программе:
ps -lmo THREAD -p 8060956
    USER PID   PPID  TID   ST CP PRI SC WCHAN F      TT    BND COMMAND
    root 8060956 6815882         - A  720 120  0        -   200001  pts/0   - ./a.out
       -       -       -   8716483 R  120 120  0        -   400000      -   - -
       -       -       -  17105017 R  120 120  0        -   400000      -   - -
       -       -       -  24182849 R  120 120  0        -   400000      -   - -
       -       -       -  24510589 R  120 120  0        -   400000      -   - -
       -       -       -  30277829 R  120 120  0        -   400000      -   - -
       -       -       -  35913767 R  120 120  0        -   400000      -   - -
Значение 720 в столбце CP означает сумму отдельных потоков, указанных под этим значением: (5 * 120) + (120).

процессор, коэффициент использования

В столбце TIME вывода команды ps, запускаемой периодически, указывается обычное время работы процессора, а в столбце %CPU - отношение времени работы процессора к фактическому времени. Найдите процессы, выполнение которых отнимает у процессора больше всего времени. Опции au и v позволяют получить такую информацию для пользовательских процессов. Опции aux и vg выводят информацию как о пользовательских, так и о системных процессах.

Ниже приведен пример вывода команды, запущенной в четырехпроцессорной системе:
# ps au
USER       PID %CPU %MEM   SZ  RSS    TTY STAT    STIME TIME COMMAND
root     19048 24.6  0.0   28   44  pts/1 A    13:53:00  2:16 /tmp/cpubound
root     19388  0.0  0.0  372  460  pts/1 A      Feb 20  0:02 -ksh
root     15348  0.0  0.0  372  460  pts/4 A      Feb 20  0:01 -ksh
root     20418  0.0  0.0  368  452  pts/3 A      Feb 20  0:01 -ksh
root     16178  0.0  0.0  292  364      0 A      Feb 19  0:00 /usr/sbin/getty
root     16780  0.0  0.0  364  392  pts/2 A      Feb 19  0:00 -ksh
root     18516  0.0  0.0  360  412  pts/0 A      Feb 20  0:00 -ksh
root     15746  0.0  0.0  212  268  pts/1 A    13:55:18  0:00 ps au
Значение %CPU указывает, какой процент процессорного времени был потрачен на выполнение процесса с момента его запуска. Это значение подсчитывается по следующей формуле:
(время CPU, затраченное на выполнение процесса / время выполнения
процесса) * 100

Представим, что было запущено два процесса: первый проработал с момента запуска пять секунд, а затем был прерван, после чего был запущен второй процесс, который также проработал пять секунд, а затем был прерван. В результате в столбце %CPU вывода команды ps для первого процесса будет указано значение 50 процентов (процессор работал в течение 5 из 10 прошедших секунд), а для второго процесса - 100 процентов (процессор работал в течение всех пяти секунд, прошедших с момента запуска процесса).

В системе SMP это значение делится на число CPU, работающих в системе. По этой причине значение %CPU для процесса cpubound из предыдущего примера никогда не будет больше 25, так как он выполняется в четырехпроцессорной системе. Процесс cpubound полностью загрузил один из процессоров, однако значение %CPU будет равно всего лишь 25, так как оно делится на число работающих процессоров.

Опция THREAD

Команда ps позволяет получить информацию о том, с какими процессорами связаны нити и процессы. Для этого нужно вызвать команду ps -mo THREAD. Пример приведен ниже:
# ps -mo THREAD
USER PID   PPID  TID   ST CP PRI SC WCHAN F      TT    BND COMMAND
root 20918 20660 -     A  0  60  1  -     240001 pts/1 -   -ksh
-    -     -     20005 S  0  60  1  -     400    -     -   -

В столбце TID указывается ИД нити, а в столбце BND - процессор, с которым связана нить или процессор.

В некоторых случаях может быть показано, что в системе запущен процесс kproc (в операционной системе версии 4 его PID равен 516), на выполнение которого тратится значительная доля процессорного времени. Если ни одна нить в системе не готова к выполнению в течение следующего кванта времени, то планировщик выделяет этот квант времени процессора процессу ядра (kproc), который также называется процессом idle или wait. В системах SMP для каждого процессора есть свой idle kproc.

Более подробная информация о команде ps приведена в книге в книге Справочник по командам.