본문 바로가기

OS/Linux

CentOS - top 명령

시스템 정보를 모니터링 할 수 있다. 기본 사용법을 알아보면,

 명령어  용도
 q  종료
 P  cpu 사용률에 따른 정렬
 T  누적 시간순 정렬
 A  최근 pid순 정렬
 N  pid 번호순 정렬
 u  입력한 user의 정보만 출력
 f  화면에 표시될 프로세스 관련
 l  load average 정보 on/off 
 m  메모리 사용량 정보 on/off 
 t  CPU사용률 정보 on/off
 c  사용한 명령어의 옵션등 세부적인 내용 on/off
 h  도움말 보기

위 정도의 명령어면 어느정도 필요한 정보를 알 수 있다.
화면에 띄는 정보는 다음과 같다.

 10:08:33  up 365 days, 13:14,  3 users,  load average: 1.82, 1.90, 2.80

749 processes: 744 sleeping, 3 running, 0 zombie, 2 stopped

CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle

                  total    1.5%    0.0%    3.0%   0.0%    25.4%    1.0%   68.9%

                cpu00    0.9%    0.0%    0.9%   0.0%    28.9%    0.0%   69.1%

                cpu01    2.3%    0.0%    2.8%   0.0%    35.5%    0.0%   59.3%

                cpu02    2.3%    0.0%    6.5%   0.0%     8.8%    2.3%   79.9%

                cpu03    0.4%    0.0%    1.8%   0.0%    28.3%    1.8%   67.4%

Mem:  3921884k av, 3842128k used,   79756k free,       0k shrd,  205836k buff

                   2820092k actv,  554012k in_d,   61376k in_c

Swap: 4194232k av,  616324k used, 3577908k free                 1638300k cached


  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND


화면에 나온 내용을 살펴보면,

-- 1행 --
10:08:33 -> 시스템 시간
up 365 days -> uptime
13:14 -> 로그인한 시간
 3 users -> 현재 로그인한 user수
 load average: 1.82, 1.90, 2.80 -> 시스템의 최근 1분, 5분, 15분에 대한 각각의 평균 부하율

-- 2행 --
749 processes -> 실행된 프로세스 수
744 sleeping -> 유휴상태 프로세스
3 running -> 실행중인 프로세스
0 zombie -> 좀비 프로세스( 프로세스 종료후에도 메모리에 상주되어 있는 프로세스 )
2 stopped -> 정지된 프로세스
 
-- 3행 --
cpu    -> cpu 종류
user    -> 사용율
nice  -> NICE 정책에 의해 사용되는 사용율
system  -> 시스템이 사용하는 사용율
 irq  -> 
softirq  -> 
iowait   -> io 대기율
 idle -> 사용되지 않는 미사용율


-- 9행,10행,11행: 메모리 정보 --
Mem -> 물리적인 메모리
3921884k av -> 전체 메모리
3842128k used -> 사용중인 메모리
  79756k free -> 남은 메모리
      0k shrd -> 
 205836k buff -> 버퍼에 사용된 메모리
2820092k actv -> 
 554012k in_d -> 
  61376k in_c -> 
Swap ->  스웹 메모리
4194232k av -> 전체 메모리
 616324k used -> 사용중인 메모리
3577908k free  -> 남은 메모리
1638300k cached -> 

-- 13행: 프로세스 정보 -- 
PID -> 프로세스 ID
USER -> 프로세스를 실행시킨 사용자
PRI(Priority) -> 프로세스 우선순위
NI(Nice value) -> 프로세스 NICE 값(음수값이 우선순이가 높음)
SIZE -> 프로세스가 사용하고 있는 가상 메모리 사용량
RSS ->  프로세스가 사용하고 있는 페이지의 크기
SHARE  -> 프로세스가 사용하고 있는 공유 메모리 크기
STAT -> 프로세스 상태(R(Running), S(Sleeping), T(stopped Trace) W(Swapped out), Z(Zombie))
%CPU -> 프로세스의 CPU 사용률
%MEM -> 프로세스의 메모리 상용률
TIME -> 프로세스가 CPU 를 사용한 시간
CPU -> 사용하는 cpu 번호 
COMMAND -> 프로세세를 실행한 명령 

검색하다가 잘 모르는 내용이 있어  긁어왔다.
----------------------------------------------
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를 사용하는 것은 임시 방편적인 방법으로만 써야 한다. 만약 시스템의 
        워크로드가 증가하게 된다면 이런 방법으로는 충분하지 않으며, 시스템을 업그레이드 하든지 교체 혹은 다름 시스템을
        구입해 로드를 공유, 분산해야 한다.

출처: http://jace.tistory.com/96 
 
iowait가 높은데 도저히 내릴 방법이 없다면 메모리를 증설하는 것도 방법이 되겠다.
참고: http://theeye.pe.kr/entry/simple-tips-for-finding-cause-of-load-using-sar-on-linux 

'OS > Linux' 카테고리의 다른 글

vi 명령어  (0) 2013.03.12
CentOS - sar 명령  (0) 2011.11.04
CentOS(x86_64)에서 ant 설치  (0) 2011.11.02
CentOS6(x86_64)에서 아파치 설치하기  (0) 2011.11.01
CentOS에서 cannot remove `libtoolT': No such file or directory  (0) 2011.10.28