Существует две стандартных команды, позволяющих определить, какие процессы используют больше всего ресурсов CPU: команды ps и acctcom. Кроме того, для этой цели можно запустить монитор topas, который описан в разделе Работа с монитором topas.
Команда ps является очень гибким инструментом для определения работающих в системе программ и оценки используемых ими ресурсов. Она выводит статистику и информацию о состоянии процессов в системе, в том числе ИД процесса или нити, объем выполняемого ввода-вывода и используемый объем ресурсов процессора и памяти. В этом разделе описаны только те опции и поля вывода, которые относятся к процессору.
Информацию об использовании процессора содержат три столбца вывода команды ps.
Следующий сценарий оболочки:
# 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, так как оно делится на число работающих процессоров.
Команда 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 выводит хронологическую информацию об использовании CPU. Для ее работы должна быть активирована система учета ресурсов. Запуск системы учета ресурсов создает значительную нагрузку на систему. В связи с этим ее рекомендуется запускать только в крайних случаях. Для активации системы учета ресурсов выполните следующие действия:
# touch acctfile
# /usr/sbin/acct/accton acctfile
# /usr/sbin/acct/accton
# /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 (процесс, с помощью которого работа системы учета ресурсов была завершена в первый раз).