'iostat'에 해당되는 글 1건

  1. 2008.02.26 UNIX CPU 메모리 IO 상태 확인

반응형

CPU 사용율을 알아보는 명령어
-------------------------------------------------------------------------------
sar명령어

#sar -u 1 10

SunOS solaris 5.9 Generic_118559-11 i86pc    02/26/2008

15:06:39    %usr    %sys    %wio   %idle
15:06:40       0       0       0     100
15:06:41       0       0       0     100
15:06:42       0       0       0     100
15:06:43       0       0       0     100
15:06:44       0       0       0     100
15:06:45       0       0       0     100
15:06:46       0       0       0     100
15:06:47       0       0       0     100
15:06:48       0       0       0     100
15:06:49       0       0       0     100

Average        0       0       0     100

- sar의 경우 CPU사용량을 %usr(user)와 %sys(system)과 %wio(wait)와 %idle(idle)로 구분
- %wio(wait)의 값은 CPU 사용율과는 무관, 이 값은 CPU가 놀고 있을 때, IO를 기다리고 있는 프로세스가 있는지 여부를 알아보는 힌트이다.
- IO를 기다리는 프로세스가 있다는 것은 그 IO가 완료되면 곧 바로 CPU를 다시 사용할 것이라는 것을 암시한다.

-------------------------------------------------------------------------------
vmstat 명령어

#vmstat 1
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr cd f0 s0 --   in   sy   cs us sy id
 0 0 0 1103660 66172 19  57 32  0  3  0 486 0  0  0  0  324  219   84  0  1 99
 0 0 0 1108392 64636  0  10  0  0  0  0  0  0  0  0  0  320   50   69  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  311   29   60  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  310   29   58  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  317   29   60  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  315   43   67  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  319   39   68  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  315   29   62  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  310   29   56  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  312   29   60  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  316   29   59  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  314   39   61  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  311   29   57  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  317   29   61  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  312   29   59  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  313   29   64  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  321   39   73  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  314  353   76  0  0 100
 0 0 0 1108392 64636  0   0  0  0  0  0  0  0  0  0  0  311   29   58  0  0 100


- kthr (커널 스레드 넘버)
  * r :  in run queue =>run queue에 대기하고 있는 1초당 쓰레드 수임 run queue는 CPU를 점유하기 위하여 프로세서가 대기하고 있는 곳임. 또한 만일 vmstat를 인터

벌을 5초 간격으로 실행시킬 경우, 매초에 측정된 run queue에 대기하고 있는 프로세스 수 를 누적하여 10초로 나눈 값이 r에 나타나게 된다.
  * b :  blocked for resources I/O, paging,  and  so forth => I/O가 완료되기를 기다리는 프로세스 수를 나타냄
  * w :  swapped => swap out된 프로세서 수를 나타냄
   
- memory (가상메모리 및 실제 메모리 사용)
  * swap : 현재 사용가능한 스왑 크기 (Kbytes)
  * free : size of the free list (Kbytes)
    
- page (페이지 fault와 페이징 동작)
  * re : page reclaims - but see the -S  option  for  how this field is modified.
  * mf : minor faults - but see the  -S  option  for  how this field is modified.
  * pi : kilobytes paged in
  * po : kilobytes paged out
  * fr : kilobytes freed
  * de : anticipated short-term memory shortfall (Kbytes)
  * sr : pages scanned by clock algorithm
   
- disk (초당 운영되는 디스크 숫자 s=SCSI, i=IPI 숫자는 LUN임)
   
- faults (trap과 interrupt 비율)
  * in : interrupts
  * sy : system calls
  * cs : CPU context switches
  
- cpu (CPU time의 breaktime 퍼센트) : CPU사용량을 us(user)와 sy(system)과 id(idle)로 구분한다
  * us : user time
  * sy : system time
  * id : idle time
 
-------------------------------------------------------------------------------
mpstat 명령어

#mpstat 1
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0   47   2    0   322  222   78    4    0    3    0   185    0   1   1  98
  0    9   0    0   320  220   85    2    0    0    0   357    0   0   0 100
  0    0   0    0   310  210   55    1    0    1    0    27    0   0   0 100
  0    0   0    0   311  211   59    1    0    1    0    27    0   0   0 100
  0    0   0    0   316  216   60    1    0    1    0    27    0   0   0 100
  0    0   0    0   315  215   65    1    0    1    0    37    0   0   0 100
  0    0   0    0   316  216   65    1    0    1    0    27    0   0   0 100
  0    0   0    0   310  210   56    1    0    1    0    27    0   0   0 100
  0    0   0    0   312  212   58    1    0    1    0    27    0   0   0 100
  0    0   0    0   317  217   61    1    0    1    0    27    0   0   0 100
  0    0   0    0   318  218   71    1    0    1    0    37    0   0   0 100
  0    0   0    0   311  211   59    1    0    1    0    27    0   0   0 100
  0    0   0    0   316  216   62    1    0    1    0    27    0   0   0 100
  0    0   0    0   310  210   52    1    0    1    0    27    0   0   0 100


1. CPU - 프로세서 ID
2. minf -  minor faults
3. mjf -  major faults
=> 프로그램을 실행할 경우에 운영체제는 프로세스에 대한 어드레스 맵핑 테이블을 만들고, 프로세스를 실행한다. 프로세스가 실행되다가 필요한 페이지가 자신의 어드

레스 맵핑 테이블에 연결되어 있지 않으면, 페이지 폴트가 발생한다. 그러면 페이 폴트 핸들러가 필요한 페이지가 메모리에 있는지 찾는다. 이때 그 페이지가 메모리에

있으면 minor fault(minf)가 되고, 메모리에 없으면 disk로 부터 읽어들인다. 이 경우를 major fault(mjf)가 된다.
 
4. xcal -  inter-processor cross-calls (processor-to-processor interrupts)
=> CPU가 여러 개인 시스템에서는 CPU들 간에 동기를 맞추기 위하여 정보를 교환할 필요가 있는데 이때 CPU들 간에 인터럽트가 일어난다. 이것이 xcal에 카운터 된다.

cross-call을 하는 대표적인 목적은 CPU 캐쉬를 플러쉬하거나 무효화하는 것이다.
 
5. intr -  interrupts
6. ithr - interrupts as threads (not counting clock interrupt)
=> 인터럽트는 주변 장치가 데이타의 입출력이 발생할 때 CPU에게 알려주는 방법으로 사용된다. 예를 들어, 사용자가 키보드의 키를 누르면 키보드를 관장하는 하드웨어

가 인터럽트를 발생하여 키보드로 부터 입력이 있다는 것을 CPU에게 알리게 된다. 그러면, CPU는 이미 정의되어 있는 키보드 처리 루틴(인터럽트 핸들러)을 호출하여 입

력을 처리한다. 이처럼 주변장치들은 대부분 인터럽트를 발생하는 기능을 가지고 있다.
이렇게 인터럽트가 발생하면, 인터럽트를 처리하는 방법에는 2가지가 있다.
첫번째는 인터럽트를 받은 쓰레드(실행 중인 쓰레드)가 그것을 수행하는 방법이고,
두번째는 미리 정의되어 있는 해당 인터럽트를 처리하는 쓰레드에게 맏기는 것입니다.
intr은 시스템에서 발생하는 모든 인터럽트에 대하여 카운터하고,
ithr은 미리 지정된 인터럽트 쓰레드가 처리한 것에 대하여 카운터하는데 클럭 인트럽트는 제외한다.
SUN 시스템에는 총 0 에서 15 가지 16 레벨의 인터럽트가 있다. 그 중에 인터럽트 10 번이 클럭 인터럽트이다. 인터럽트 10 번 이하 인 것은 인터럽트 쓰레드에 의해 처

리되고, 인터럽트 11 번 이상 인 것은 현재 실행중인 쓰레드에 의해 처리된다.
인터럽트 15 번이 우선순위가 가장 높은 인터럽트이고, 키보드 인터럽트는 11번 이상이고, 네트웍이나 디스크 인터럽트는 10번 이하이다.
 
7. csw - context switches
8. icsw - involuntary context switches
9. migr - thread migrations (to another processor)
   => Solaris에서 스케줄링은 커널 쓰레드 단위로 한다. 하나의 쓰레드가 실행되다가
   1) 쓰레드에게 주어진 시간을 다 사용하거나,
   2) 자발적인 sleep하거나,
   3) 자원이 준비되기를 기다리며 sleep하거나
   4) 우선순위가 높은 쓰레드가 CPU를 사용하기 위해 대기하고 있다면
   => 다른 쓰레드로 전환이 발생한다. 이것을 컨텍스트 스위칭이라고 하고 csw에 카운터된다.
   그 중에 4) 번의 경우는 쓰레드가 우선 순위가 높은 쓰레드에게 강제적으로 스위칭을 당하는 것은 icsw에 카운터된다.
   CPU가 여러 개인 시스템에서 쓰레드가 스위칭되면, 다음에 어떤 CPU에서 실행될지 알 수 없다.
   그러나 커널은 가능한 한 쓰레드가 동일한 CPU에서 실행될 수 있도록 한다.
   그 이유는 동일한 CPU에서 실행되면 CPU의 캐쉬를 활용할 확률이 높기 때문이다.
   migr에 나타나는 값은 쓰레드가 마지막으로 실행된 CPU가 아닌 다른 CPU에서 다시 실행될 경우에 카운터 된다.
 
10. smtx - spins on mutexes (lock not acquired on first try)
11. srw - spins on readers/writer locks (lock not acquired on first try)
   => 쓰레드가 수행 중에 중요한 코드에 대하여 여러 쓰레드가 동시에 수행되는 것을 방지하기 위하여 프로그램의 코드에 lock를 건다.
   이러한 lock 중에 mutex lock과 read/write lock이 있다.
   smtx는 mutex lock를 걸려고 하는데 이미 다른 쓰레드에 의해 lock이 걸려져 있는 경우에 카운터 된다.
   srw는 read/write lock를 걸려고 하는데 이미 다른 쓰레드에 의해 lock이 걸려져 있는 경우에 카운터 된다.
 
12. syscl - system calls
   => 시스템 콜은 커널이 제공하는 기본적인 서비스 루틴이다. 프로세스의 실행부터 종료될 때까지 시스템 콜의 연속적인 호출이라고 할 수 있다.
   Solaris에는 200가지가 넘는 시스템 콜이 있으며, 가장 흔히 사용하는 시스템 콜에는 read(), write()가 있다.
 
13. usr - percent user time
14. sys - percent system time
15. wt - percent wait time
16. idl  - percent idle time
   => Solaris 운영체제는 1초에 100번씩 CPU가 어떤 일을 하는지 조사한다.
   이때 CPU가 user mode에서 작업을 실행하면 user_tick에 1을 증가 시키고, system mode에서 작업을 실행하면 system_tick에 1을 증가시킨다.
   CPU가 실행할 작업이 없어서 쉬고 있는 경우, I/O(block device: hard disk)를 기다리는 작업이 있으면 wait_tick에 1을 증가시키고,
   그렇지 않으면 idle_tick에 1을 증가시킨다.
   vmstat나 sar 명령어는 이러한 값을 시스템으로 부터 얻어서 주어진 시간간격(interval) 의 차이 값을 구하여 각각을 백분율(%)로 나타낸 것이 CPU 사용량이다.
 

-------------------------------------------------------------------------------
iostat 명령어

# iostat [option]
 - option
   * -c : user mode, system mode, I/O를 위한 Wating, Idle등에 사용된 시간 백분율
   * -t : CH당 터미널에서 사용된 read, write의 Character 수
   * -x : 더 자세한 정보를 출력
 

# iostat
   tty       cmdk0          fd0           sd0           nfs1           cpu
 tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id
   2   42  13   2    9    0   0    0    0   0    0    0   0    0    0  0  0 99

# iostat -x
                  extended device statistics                  
device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b
cmdk0        1.8    0.5   13.6    1.3  0.0  0.0    9.2   0   1
fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
sd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0

# iostat -xn
                    extended device statistics             
    r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
    1.8    0.5   13.6    1.3  0.0  0.0    5.1    3.9   0   1 c0d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 fd0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0
    0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 solaris:vold(pid370)


# iostat -xtc 5 2
                  extended device statistics                      tty         cpu
device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b  tin tout  us sy wt id
cmdk0        1.5    0.4   11.2    1.1  0.0  0.0    9.0   0   0    2   41   0  0  0 99
fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
sd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
                  extended device statistics                      tty         cpu
device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b  tin tout  us sy wt id
cmdk0        0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0    0   90   0  0  0 100
fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
sd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0


iostat 메뉴얼 페이지에는 다음과 같이 각 필드에 대한 정의가 있다.


  r/s     reads per second
  w/s     writes per second
  Kr/s    kilobytes read per second
  Kw/s    kilobytes written per second
  wait    average number of transactions waiting for service
          (queue length)
  actv    average number of transactions  actively  being serviced
          (removed  from  the queue but not yet completed)
  svc_t   average service time, in milliseconds
  %w      percent of time there are transactions  waiting for service
          (queue non-empty)
  %b      percent of time the disk is busy  (transactions in progress)

  wsvc_t  average service time in wait queue, in milliseconds
  asvc_t  average service time active transactions, inmilliseconds



 
-------------------------------------------------------------------------------
시스템 메모리 사용량 확인

# swap 명령어

# swap -l
swapfile             dev  swaplo 블록   사용 가능
/dev/dsk/c0d0s1     102,1       8 2097888 2097888

# swap -s
총: 23320k 바이트 할당 + 6676k 예약 = 29996k 사용, 1108096k 사용 가능

# vmstat 명령어

# vmstat 1 2
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr cd f0 s0 --   in   sy   cs us sy id
 0 0 0 1107228 64956  6  18  9  0  1  0 120 0  0  0  0  314   84   62  0  0 100
 0 0 0 1108008 63792  0  10  0  0  0  0  0  0  0  0  0  324  370   90  0  0 100

# sar 명령어

# sar -r 1 1

SunOS solaris 5.9 Generic_118559-11 i86pc    02/26/2008

16:01:38 freemem freeswap
16:01:39   15869  2215384

-------------------------------------------------------------------------------

반응형
Posted by 공간사랑
,