[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по настройке производительности


Определение программ, интенсивно использующих процессор

Существует две стандартных команды, позволяющих определить, какие процессы используют больше всего ресурсов CPU: команды ps и acctcom. Кроме того, для этой цели можно запустить монитор topas, который описан в разделе Работа с монитором topas.

Применение команды 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

Показатель использования CPU, подсчитанный за последнее время, указан в четвертом столбце (C). В начале списка находится процесс зацикленной программы. Обратите внимание, что в случае зацикленного процесса значение C может не совпадать с истинным показателем использования CPU, так как планировщик ограничивает его величиной 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. В операционной системе AIX версии старше 4.3.3 этот процесс называется wait.

Более подробная информация о команде ps приведена в книге AIX 5L Version 5.1 Commands Reference.

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

Команда acctcom выводит хронологическую информацию об использовании CPU. Для ее работы должна быть активирована система учета ресурсов. Запуск системы учета ресурсов создает значительную нагрузку на систему. В связи с этим ее рекомендуется запускать только в крайних случаях. Для активации системы учета ресурсов выполните следующие действия:

  1. Создайте пустой файл учета ресурсов:

    # touch acctfile
    
  2. Включите систему учета ресурсов:

    # /usr/sbin/acct/accton acctfile
    
  3. После сбора всей необходимой информации выключите систему учета ресурсов:

    # /usr/sbin/acct/accton
    
  4. Просмотрите информацию, собранную системой учета ресурсов, с помощью следующей команды:

    # /usr/sbin/acct/acctcom acctfile
    Имя                 Имя     Время    Время       Фактич.    CPU   Средний
    команды    Польз.   TTY     запуска  заверш.     время(с)   (с)  разм.(Кб)
    #accton    root     pts/2   19:57:18 19:57:18     0.02     0.02   184.00
    #ps        root     pts/2   19:57:19 19:57:19     0.19     0.17    35.00
    #ls        root     pts/2   19:57:20 19:57:20     0.09     0.03   109.00
    #ps        root     pts/2   19:57:22 19:57:22     0.19     0.17    34.00
    #accton    root     pts/2   20:04:17 20:04:17     0.00     0.00     0.00
    #who       root     pts/2   20:04:19 20:04:19     0.02     0.02     0.00
    

Если вы еще раз запустите систему учета ресурсов с тем же файлом, то все новые процессы будут следовать в списке за процессом accton (процесс, с помощью которого работа системы учета ресурсов была завершена в первый раз).


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]