ps 명령 사용

ps 명령은 시스템에서 실행 중인 프로그램과 프로그램이 사용 중인 자원을 식별하는 매우 유연한 도구로서, 프로세스 또는 스레드 ID, I/O 활동, CPU 및 메모리 사용량 등 시스템의 프로세스에 대한 통계와 상태 정보를 표시합니다.

이 절에서는 CPU와 관련된 옵션과 출력 필드에 대해 설명합니다.

세 개의 가능한 ps 출력 열은 CPU 사용량을 각기 다른 방식으로 보고합니다.

값:
C
최근에 프로세스에 사용된 CPU 시간입니다(클럭 틱 단위).
TIME
프로세스가 시작된 이후로 프로세스에 사용된 총 CPU 시간입니다(분 및 초 단위).
%CPU
프로세스가 시작된 이후로 프로세스에 사용된 총 CPU 시간을 프로세스 시작 이후 경과 시간으로 나눈 값입니다. 이 시간은 프로그램의 CPU 의존도를 측정한 것입니다.

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)은 최근에 사용된 CPU를 나타냅니다. 루핑 프로그램의 프로세스가 리스트를 생성합니다. 스케줄러는 120에서 계수를 중지하기 때문에 C 값은 루핑 프로세스의 CPU 사용량을 최소화할 수 있습니다. 멀티스레드 프로세스의 경우 이 필드는 해당 프로세스 내의 모든 스레드에 대해 나열되는 CP의 합계를 나타냅니다.

다음 예에서는 모든 스레드가 무한 루핑 프로그램에 있는 5개 스레드로 구성된 단순 프로그램을 보여줍니다.
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      -   - -
CP 열에서 값 720은 이 값 아래에 나열되는 개별 스레드의 합계 즉, (5 * 120) + (120)을 나타냅니다.

CPU 시간 비율

정기적으로 실행되는 ps 명령은 TIME 열 아래에 CPU 시간을 표시하고, %CPU 열 아래에 실제 시간 대비 CPU 시간 비율을 표시합니다. 사용량을 주도하는 프로세스를 찾으십시오. auv 옵션은 사용자 프로세스에 대해 유사한 정보를 제공합니다. auxvg 옵션은 사용자 및 시스템 프로세스를 모두 표시합니다.

다음 예는 4방향 SMP 시스템에서 가져온 것입니다.
# 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 시간의 백분율로, 다음과 같이 계산됩니다.
(프로세스 CPU 시간 / 프로세스 지속 시간) * 100

예를 들어, 다음과 같은 두 개의 프로세스가 있습니다. 첫 번째 프로세스는 5초 실행 후에 종료되지 않고 이어서 두 번째 프로세스도 5초 실행 후에 종료되지 않습니다. ps 명령이 첫 번째 프로세스에 대해 50% %CPU(10초 경과 시간 대비 5초 CPU)를 보여주고, 두 번째 프로세스에 대해 100%(5초 경과 시간 대비 5초 CPU)를 보여줍니다.

SMP의 경우, 이 값은 시스템에서 사용 가능한 CPU 수로 나눈 값입니다. 이전 예를 다시 살펴보면, 4방향 프로세서 프로세서 시스템에서 해당 예가 실행되었기 때문에 cpubound 프로세스에 대한 %CPU 값이 25를 초과하지 않습니다. cpubound 프로세스는 한 프로세서의 100%를 사용하지만, %CPU 값은 사용 가능한 CPU 수로 나눈 값입니다.

THREAD 옵션

ps 명령은 ps -mo THREAD 명령을 사용하여 스레드 또는 프로세스가 바인드된 CPU와 스레드를 표시할 수 있습니다. 예를 들면 다음과 같습니다.
# 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 열은 스레드 ID를 표시하며, BND 열은 프로세서에 바인드된 프로세스 및 스레드를 표시합니다.

CPU 시간을 사용하는 kproc(운영 체제 버전 4에서 PID 516)라는 이름의 프로세스가 표시되는 것이 일반적입니다. 시분할 동안 실행할 수 있는 스레드가 없는 경우, 스케줄러는 해당 시분할에 대한 CPU 시간을 유휴 또는 대기 kproc라는 커널 프로세스(kproc)에 지정합니다. SMP 시스템에는 프로세서마다 유휴 kproc가 있습니다.

ps 명령에 대한 자세한 세부사항은 명령 참조의 내용을 참조하십시오.