본문 바로가기

Programming/Linux_Kernel

리눅스명령어top 사용법과 설명과 CPU과부하(CPU used 100%)

원본 : http://weezzle.net/1360


top이라고 친 후 h라고 입력 하면 도움말이 나옵니다. 거기에서 보고싶은 걸 입력하면 됩니다.
 
>#top
----------------------------------------------------------------------------
top - 11:35:19 up 44 days,  5:09,  5 users,  load average: 0.03, 0.05, 0.05
Tasks: 343 total,   1 running, 342 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.2% us,  0.1% sy,  0.0% ni, 96.7% id,  1.9% wa,  0.0% hi,  0.0% si
Mem:   2070100k total,  1748748k used,   321352k free,   233704k buffers
Swap:  2096472k total,      236k used,  2096236k free,   642728k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                              
 1629 webadmin  16   0  2808 1116  756 R    1  0.1   0:00.15 top 
----------------------------------------------------------------------------

@각 행별 내용
1) 1행 : 시스템의 가동 시간과 평균 부하의 숫자를 출력
 
top - 11:35:19 up 44 days,  5:09,  5 users,  load average: 0.03, 0.05, 0.05
 
-> 현재시간(11:35:19 )과 uptime 값(up 44 day)를 알수 있으며, 현재 로그인 된 사용자의 수(5 users)와 
    시스템의 최근 1분, 5분, 15분에 대한 각각의 평균 부하율(load average: 0.03, 0.05, 0.05)를 나타냄
->
 i.  Load average: 작업의 대기시간을 말한다. 값이 1이 나왔다면 1분 동안 평균 1개 정도의 프로세서가 대기상태에 있다는 것이다. 서버마다 차이가 있긴 하지만 5 정도면 서버가 부하를 받는 다고 생각한다. 과부하는 10 ~ 15이상이면 과부하라고 본다.
@ 시스템 평균 부하율 정보 : uptime
 
- 시스템의 평균 부하율을 확인할 수 있는 명령어
-1분, 5분, 15분간의 시스템 평균 부하율을 출력
-# uptime
 11:35:19 up 44 days,  5:09,  5 users,  load average: 0.03, 0.05, 0.05
-현재시간(11:35:19), 44일 동안 시스템 재부팅 없이 운영중임(up 44 day),  로그인한 시간(5:09), 현재 시스템에 접속한 사용자(5 users), 1분, 5분, 15분간의 시스템 평균 부하율(load average: 0.03, 0.05, 0.05) 정보를 출력
 
 
2) 2행 : 현재 실행중인 프로세스들의 상황
 
Tasks: 343 total,   1 running, 342 sleeping,   0 stopped,   0 zombie
 
-> 전체 실행된 현재 프로세스의 수는 (343 total), 실행중인 프로세스 ( 1 running), 유휴상태의 프로세스(342 sleeping), 
정지 된 프로세스( 0 stopped), 좀비 프로세스(0 zombie)들의 상황을 알려줌
 
3) 3행 : CPU의 사용에 대한 상황 (이 정보를 통해 CPU의 사용현황을 파악하여 CPU의 추가적인 보강 계획이나 
업그레이드 등의 계획을 세울수 있슴)
 
Cpu(s):  1.2% us,  0.1% sy,  0.0% ni, 96.7% id,  1.9% wa,  0.0% hi,  0.0% si
 
-> 사용자가 사용중인 CPU의 사용율(1.2% us), 시스템이 사용하는 CPU의 사용율(0.1% sy), NICE 정책에 의해 사용되는 CPU의 사용율( 0.0% ni), 사용되지 않는 CPU의 미사용율(96.7% id), 입출력 대기상태의 사용율(1.9% wa)등의 상황에 대해 
알려줌
 
4) 4행 : 메모리의 사용에 대한 상황 (이 정보를 통해 메모리의 사용 현황에 대해 파악하고 메모리의 부족 현상 등을 분석하여 추가적인 메모리의 확장에 대해 고려할수 있슴)
 
Mem:   2070100k total,  1748748k used,   321352k free,   233704k buffers
 
-> 전체 물리적인 메모리(2070100k total), 사용중인 메모리(1748748k used), 사용되지 않는 여유 메모리(321352k free), 버퍼된 메모리의 ㅣ양(233704k buffers)등의 상황에 대해 알려줌
 
5) 마지막행 : 스왑메모리의 사용에 대한 상황(스왑 메모리의 사용이 증가할 경우에는 물리적 메모리의 확장을 고려)
 
Swap:  2096472k total,      236k used,  2096236k free,   642728k cached
 
-> 전체 스왑 메모리(2096472k total), 사용중인 스왑 메모리( 236k used), 남아있는 스왑메모리(2096236k free), 캐싱메모리(642728k cached)등의 상황에 대해 알려줌
 
 
@ 세부 정보 필드별 항목
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
 
PID : 프로세스 ID (PID)
 
USER : 프로세스를 실행시킨 사용자 ID
 
PRI : 프로세스의 우선순위 (priority)
 
NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높다.
 
VIRT : 가상 메모리의 사용량(SWAP+RES)
 
SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
 
S : 프로세스의 상태
 
%CPU : 프로세스가 사용하는 CPU의 사용율
 
%MEM : 프로세스가 사용하는 메모리의 사용율
 
COMMAND : 실행된 명령어
 
RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
 
---------------------------------------------------------------------------------
 
A. CPU 과부하를 인지하는 것은 매우 어렵다.
    씨피유의 과부하는 실제로 메모리 문제들과 I/O 문제들 사이의 틈에 끼워져 있다. CPU과부하 여부를 확인하는 방법
    i. Uptime을 사용해 로드 평균값을 확인해 증가 하는지 혹은 감소 하는지 본다. 통상 시스템의 CPU개수에 2를 곱한 값을 
       로드 평균의 적정 수준으로 보기 때문에 해당 시스템의 CPU개수에 따라 적절한 로드 평균값은 달라질 수 있다.
    ii. 디스크 접근이나 페이징을 위해 대기하고 있는 프로세스가 있나?
1. 그럼 프로세스가 있다면 I/O와 메모리 서브 시스템을 검사한다.
    iii. CPU의 대부분을 사용하고 있는 프로세스는 무엇인가?
1. CPU를 많이 사용하고 있는 프로세스들을 적절히 재배치 해 워크 로드를 보다 좋게 분산 시키도록 도와 준다.
    iv. 시스템 스테이트에서 CPU의 대부분 50% 이상의 시간을 소비 하고 있는가?
1. 그렇다면 I/O를 의심해 볼 필요가 있다. 소스 코드를 액세스 할 때 애플리케이션이 I/O를 효과적으로 사용하고 있는지 검사한다.
    v.  CPU로드가 높은데도 불구하고 IDLE 스테이트에서 CPU를 많이 10% 이상 사용하고 있는가?
1. 그렇다면 I/O나 메모리에 의심
    vi. CPU IDLE시간이 끊임 없이 0인가?
1. CPU가 활동량이 많은 것은 시스템을 잘 사용하고 있는 것이지만 항상 100% 사용하고 있다면 일은 어떤 곳에서 계속 쌓인다는 것이다. 즉, CPU 오버로드 발생하고 있다는 것이다.

B. 처방
     i. 불필요한 데몬 프로세스를 제거한다. Rwhod, routed는 성능에 문제를 주는 프로세스이다. Kill 한다.
     ii. at이나 다른 큐잉시스템을 이용해 사용자의 일을 야간에 수행하도록 한다. CPU(메모리, I/O 시스템)가 야간에는 
        과부하가 걸린다고 하더라도 아침에 그 작업이 끝나면 보통 별 문제가 되지 않는다.
    iii. CPU에 의존적인 일의 우선순위를 낮추는데 nice를 사용함으로써 인터랙티브 퍼포먼스를 향상시킬 수 있다. 
        여기서 CPU내에 의존적인 일의 우선순위를 높이는데 nice를 사용함으로써 그 일은 성능을 향상시키겠지만 
        인터랙티브 퍼포먼스는 해치게 된다. Nice를 사용하는 것은 임시 방편적인 방법으로만 써야 한다. 만약 시스템의 
        워크로드가 증가하게 된다면 이런 방법으로는 충분하지 않으며, 시스템을 업그레이드 하든지 교체 혹은 다름 시스템을
        구입해 로드를 공유, 분산해야 한다.