강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

시스템 관리 top 유틸리티의 실행과 제공정보 분석 및 활용방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

시스템 관리 top 유틸리티의 실행과 제공정보 분석 및 활용방법




 

먼저, top유틸리티의 실행과 종료방법부터 배워보도록 하겠습니다.  

 

 

 

  아래의 예와 같이 top유틸리티를 실행하는 방법은 그냥 쉘상태에서 “top”이라고 하시면 됩니다.  

 

 

 

 

 

그리고 top실행상태에서 top유틸리티를 종료할 때에는 q 또는 CTRL+C키를 눌러서 종료하실 있습니다.  

 

 

 

  아래의 예는 필자가 현재 사용하고 있는 리눅스 시스템에서 top유틸리티를 실행한 것입니다.  

 

 

 

 그냥 쉘상태에서 “top”이라고 입력 실행하시면 됩니다.  

 

 

 

 

 

top - 19:05:38 up 20 min,  2 users,  load average: 0.00, 0.01, 0.04

Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.3%hi,  0.3%si,  0.0%st

Mem:   1033816k total,   213148k used,   820668k free,     8608k buffers

Swap:  2096472k total,        0k used,  2096472k free,    99064k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                            

 1850 root      20   0  8968 1732  712 S  0.3  0.2   0:00.05 sendmail                           

 2318 root      20   0  2428 1036  836 R  0.3  0.1   0:00.05 top                                 

    1 root      20   0  2008  768  564 S  0.0  0.1   0:01.50 init                               

    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd                           

    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0                        

    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.04 ksoftirqd/0                        

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                         

    6 root      15  -5     0    0    0 S  0.0  0.0   0:00.02 events/0                           

    7 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khelper                            

   80 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                      

   82 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 kblockd/0                          

   84 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid                             

   85 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                       

  146 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 cqueue                             

  150 root      15  -5     0    0    0 S  0.0  0.0   0:00.28 ata/0                               

  151 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ata_aux                            

  153 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                      

  158 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khubd                              

  161 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kseriod                            

  201 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pdflush                            

  202 root      20   0     0    0    0 S  0.0  0.0   0:00.03 pdflush                            

  203 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kswapd0                            

  251 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 aio/0                               

  438 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_0                          

  441 root      15  -5     0    0    0 S  0.0  0.0   0:00.05 scsi_eh_1                          

  482 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kpsmoused                          

  487 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kstriped                           

  491 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksnapd                              

  522 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 mpt_poll_0                         

  523 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_2                          

  525 root      15  -5     0    0    0 S  0.0  0.0   0:00.03 kjournald                          

  580 root      16  -4  2564 1136  472 S  0.0  0.1   0:01.30 udevd                              

  912 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kgameportd                         

  928 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kauditd                            

 1234 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kmpathd/0                          

 1236 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kmpath_handlerd                    

 1261 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kjournald                          

 1262 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kjournald                          

 1429 root      16  -4 12780  820  632 S  0.0  0.1   0:00.00 auditd                             

 1431 root      12  -8 12300  748  652 S  0.0  0.1   0:00.00 audispd                            

 1445 root      20   0 33500 1388  928 S  0.0  0.1   0:02.16 rsyslogd

 



위의 결과로 출력되는 시스템운영에 관한 여러 가지 정보들의 의미를 하나씩 설명 드리도록 하겠습니다.  

 

 

 

 

 

위의 top명령의 결과로 확인되는 첫번째 행은 시스템의 부하율을 알려줍니다.  

 

 

 

 

 

top - 19:05:38 up 20 min,  2 users,  load average: 0.00, 0.01, 0.04

 

행에 있는 항목들의 의미는 다음과 같습니다.  

 

 

 

 

 

- 19:05:38 : 시스템의 현재시간


- up 20 min : 시스템이 부팅된 후에 재부팅이나 종료 없이 운영되고 있는 시간


- 2 users   : 현재 로그인 사용자의


- load average: 0.00, 0.01, 0.04 : 시스템의 최근 1,5,15 각각의 평균부하율

 


참고로 위의 첫번째 행의 결과는 uptime명령어의 결과와 거의 같다는 사실도 알아 두시기 바랍니다.  

 

 

 

 

 

 

다음은 두번째 행은 프로세스들의 종합적인 상황을 알려줍니다.  

 

 

 

 

 

Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie

 

두번째 행의 출력 결과는 현재 실행중인 프로세스(Tasks)들의 전체적인 상황을 알려주는 것이 목적입니다.  

 

 

 

  항목들의 의미는 다음과 같습니다.  

 

 

 

 

 

- Tasks:  93 total : 전체 실행된 프로세스   


- 1 running        : 현재 실행되고 있는 프로세스


- 92 sleeping      : 유휴상태에 있는 프로세스


- 0 stopped        : 종료된 프로세스   


- 0 zombie         : 좀비 프로세스

 

여기서 좀비 프로세스에 대한 개념을 간략히 설명하면 다음과 같습니다.  

 

 

 

 대부분의 프로세스는 부모프로세스가 종료되면 자식 프로세스는 종료됩니다.  

 

 

 

 부모프로세스가 종료되었음에도 자식 프로세스(child process) 아직 남아 있는 상태의 프로세스를 좀비프로세스(zombie process)라고 합니다.  

 

 

 

 이런 좀비 프로세스가 많아지면 시스템이 느려지는 원인이 수도 있습니다.  

 

 

 

 따라서 좀비 프로세스는 kill명령으로 강제 종료시키는 것이 좋습니다.  

 

 

 

 하지만, 시스템을 재부팅하면 이런 좀비 프로세스는 자동 제거됩니다.  

 

 

 

 

 

 

그리고 다음 세번째 행은 CPU 상태를 파악하여 알려줍니다.  

 

 

 

 

 

Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.3%hi,  0.3%si,  0.0%st

 

세번째 행은 CPU 전반적인 운용상황(CPU states) 알려주는 것이 목적입니다.  

 

 

 

  항목의 값의 의미는 다음과 같습니다.  

 

 

 

 

 

- 0.3%us  : 사용자가 실행시킨 프로세스의 CPU 사용율(user mode) 


- 0.3%sy  : 시스템자체에서 사용하는 CPU 사용율(system mode) 


- 0.0%ni  : nice 정책에 의해 사용되고 있는 CPU사용율(low priority user mode)  


- 98.7%id : 사용되지 않고 남은 CPU 사용율(idle task) 


- 0.0%wa  : 입출력 대기상태의 CPU 사용율(I/O waiting) 


- 0.3%hi  : IRQs에 사용된 CPU(servicing IRQs) 


- 0.3%si  : soft IRQs에 사용된 CPU (servicing soft IRQs)


- 0.0%st  : steal(다른 instances 실행에 주어진 time) 

 



 , CPU 사용자사용율과, 시스템사용율, 그리고 유휴사용율을 각각 나타내고 있습니다.  

 

 

 

 

 

, 위와 같은 CPU 사용현황으로 파악되는 자료를 가지고 CPU 추가증설계획이나 업그레이드계획을 세울 있습니다.  

 

 

 

  , idle지표인 id값에 대한 특정기간(하루, 일주일, 월단위)동안의 통계결과를 가지고 CPU 증설 또는 업그레이드 계획을 수립하시면 됩니다.  

 

 

 

 

 

 

그리고 네번째 행에서는 실제메모리(RAM) 상태를 파악할 있습니다.  

 

 

 

 

 

Mem:   1033816k total,   213148k used,   820668k free,     8608k buffers

 

, 행에서는 시스템에 장착되어 사용되고 있는 실제메모리(RAM) 사용현황을 알려주고 있습니다.  

 

 

 

  항목의 의미는 다음과 같습니다.  

 

 

 

 

 

- 1033816k total : 실제 메모리의 전체용량


- 213148k used   : 프로세스에 의해 사용되고 있는 메모리 사용량


- 820668k free   : 사용되지 않고 남아있는 메모리양    


- 8608k buffers  : 버퍼링된 메모리양

 


정보를 활용하면 현재 시스템의 메모리가 충분한가 부족한가를 있습니다.  

 

 

 

  전체 메모리 중에서 현재 사용되지 않고 남아있는 메모리의 용량(위의 예에서는 820668k) 특정기간(하루, 일주일, 월단위)동안에 통계를 내어서 메모리 증설 또는 업그레이드 계획을 수립할 있습니다.  

 

 

 

 

 

그리고 다섯번째 행에서는 스왑메모리의 상태를 파악할 있습니다.  

 

 

 

 

 

Swap:  2096472k total,        0k used,  2096472k free,    99064k cached

 

스왑(swap)메모리란 디스크의 일부분을 메모리로 사용하는 가상메모리(Virtual Memory) 의미합니다.  

 

 

 

 스왑메모리의 용량은 리눅스 시스템을 설치할 때에 지정된 것이며, 설치 이후에도 필요하다면 증설할 수도 있습니다.  

 

 

 

 , 행에서 우리는 시스템에서 사용되는 스왑메모리의 상태를 파악할 있으며 행의 의미는 다음과 같습니다.  

 

 

 

 

 

- 2096472k total  : 전체 스왑메모리량


- 0k used         : 프로세스에 의해 사용된 스왑메모리량 


- 2096472k free   : 남아 있는 스왑메모리량   


- 99064k cached   : 캐싱 메모리양

 




현재 시스템의 스왑메모리 운용상황이므로 스왑메모리가 많이 사용되고 있다라는 의미는 실제메모리(RAM) 부족하다는 것을 반증하는 것입니다.  

 

 

 

 따라서 시스템 메모리(RAM) 증설 또는 업그레이드 계획에 스왑메모리의 운용현황도 참고하셔야 합니다.  

 

 

 

  또한 불가피하게 시스템메모리( RAM) 증설할 여유가 없는 경우에 스왑메모리 또한 부족하다고 판단되었다면 스왑메모리를 증설해야 합니다.  

 

 

 

 스왑메모리의 증설과 설정방법에 대한 부분은 책의 mkswap, swapon, 그리고 swapoff명령어편을 참조하시기 바랍니다.  

 

 

 

 

 

 

그리고 마지막으로 여섯번째 전체 개별프로세스들의 시스템 자원 사용현황과 실행상태를 파악할 있습니다.  

 

 

 

 

 

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                            

 1850 root      20   0  8968 1732  712 S  0.3  0.2   0:00.05 sendmail                            

 2318 root      20   0  2428 1036  836 R  0.3  0.1   0:00.05 top                                

    1 root      20   0  2008  768  564 S  0.0  0.1   0:01.50 init                               

    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd                           

    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0                        

    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.04 ksoftirqd/0                        

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                         

    6 root      15  -5     0    0    0 S  0.0  0.0   0:00.02 events/0                           

    7 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khelper                            

   80 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                      

   82 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 kblockd/0                          

   84 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid                             

   85 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                       

  146 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 cqueue                              



 

말씀드린바와 같이 여기에서는 현재 시스템에서 실행중인 모든 개별 프로세스들의 시스템 자원 사용현황과 실행 상태 실행정보들을 상세하게 파악 있습니다.  

 

 

 

 위의 결과에서 우리는 하나의 프로세스당 12개의 정보를 있지만 사실은 개별 프로세스당 모두 26개의 정보를 가지고 있습니다.  

 

 

 

 단지 기본 값으로 12개의 정보만을 출력할 뿐입니다.  

 

 

 

 다른 설정 또는 옵션을 실행하면 26개의 정보들에 대한 값들을 모두 확인할 수도 있습니다.  

 

 

 

 먼저 26 항목에 대한 의미는 다음과 같습니다.  

 

 

 

 

 

- PID


  해당 프로세스의 유일한 프로세스번호(Process ID, 키값 : A)


 

- USER      

프로세스를 실행시킨 사용자 (User Name, 키값 : E)


 

- PR        


프로세스의 우선순위 (Priority, 키값 : H)


 

- NI        

 

프로세스의 NICE(Nice value, 키값 : I). 마이너스값(-)을 가질수록 높은 우선순위를 의미하며 플러스값(+)을 가질수록 낮은 우선순위를 의미함. 0값은 우선순위가 적용되지 않음을 의미함.


 

- VIRT     


해당 프로세스가 사용한 가상메모리의 총량(Virtual Image (kb), 키값 : o)

  VIRT = SWAP + RES

 

- RES       


해당 프로세스의 물리적인 MEMORY 사용량(Resident size (kb), 키값 : q)

RES = CODE + DATA

 

- SHR       


해당 프로세스에 의해 사용된 공유메모리의 총량(Shared Mem size (kb) , 키값 : t)

 

- S         


해당 프로세스의 상태 (Process Status, 키값 : w)를 나타내며 다음 중 하나의 값을 가진다.  

 

 

. D = 중단될 수 없는 sleep상태의 프로세스(uninterruptible sleep)


         . R = 실행중인 프로세스(running)


        . S = 휴먼상태의 프로세스(sleeping)


        . T = Trace되거나 스톱된 프로세스


        . Z = 좀비프로세스.(zombie)

 

- %CPU      

해당 프로세스의 CPU사용율 (CPU usage, 키값 : k )

 

- %MEM      

프로세스가 사용하는 MEMORY사용율 (Memory usage (RES) , 키값 : n)

 

- TIME+     

TIME항목값과 같지만 100분의 1초 단위를 반영하는 CPU사용시간 값을 나타냄.  (CPU Time, hundredths, 키값 : M)

 

- PPID      

해당 프로세스의 부모프로세스의 PID(Parent Process Pid, 키값 : b)

 

- RUSER     

해당 프로세스의 실제 소유자(Real user name)를 의미함. (키값 : c)

 

- UID       

해당 프로세스의 EUID(effective user ID)를 의미함. (키값 : d)

 

- GROUP     

해당 프로세스의 소유 그룹 (Group Name, 키값 : f)

 

- TTY       

시리얼포트(serical port), pty등과 같은 해당 프로세스가 사용하고 있는 장치명   (Controlling Tty, 키값 : g)

 

- P         

가장 최근에 사용된 CPU를 나타내는 숫자.(Last used cpu (SMP) , 키값 : j)

 

- SWAP      

총 가상메모리 중 스왑아웃(swapped out)된 부분(Swapped size (kb) , 키값 : p)

 

- TIME       

해당 프로세스가 시작된 이후에 경과된 총 시간. (CPU Time, 키값 : l)

 

- CODE      

실행코드(code)에 할당된 물리적인 메모리의 총량. 일반적으로 TRS(text resident set size)값으로 알려져 있음. (Code size (kb) , 키값 : r)

 

- DATA      

DATA에 할당된 물리적인 메모리의 총량. 일반적으로DRS(data resident set size)값으로 알려져 있음. (Data+Stack size (kb) , 키값 : s)

 

- nFLT      

해당 프로세스에 발생한 페이지폴트 횟수. 페이지폴트(Page Fault)는 현재 존재하지 않는 가상메모리 주소공간에 read 또는 write를 시도할 때에 발생한다.  

 

 

 

 (Page Fault count, 키값 : u)

 

- nDRT      

마지막으로 디스크에 저장된 이후에 변경된 페이지(data)가 디스크에 저장되지 않은 채로 메모리에 남아 있는 페이지 수(Dirty Page). 쉽게 설명하면 아직 sync되지 않고 메모리에 남아 있는 페이지를 Dirty Page라고 함. , nDRT는 이런 Dirty Page의 수를 의미함. 이런 Dirty Pages는 사용하고 있는 물리적인 메모리공간이 또 다른 가상메모리의 데이터에 의해 사용되기 전에 디스크에 저장되어야 함. (Dirty Pages count, 키값 : v)

 

- WCHAN     

커널 링크맵(System.map)의 가용률에 의해 이 항목의 값은 sleeping된 프로세스의 이름 또는 주소로 표기됨. Running중인 프로세스라면 이 항목의 값은 dash(-)로 표기됨. (Sleeping in Function, 키값 : y)

 

- Flags     

이 항목의 값은 해당 프로세스의 현재 스케줄링기호(scheduling flags) 16진수표기로 나타냄. 이 기호는 공식적으로 <linux/sched.h>문서에 정의되어 있음. (Task Flags <sched.h>, 키값 : z)

 

- COMMAND    

 프로세스명 실행 명령 (Command name/line, 키값 : X)

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  72 명