Server/Linux

iostat

soccerda 2019. 6. 13. 11:09
반응형

CPU 상태와 Disk device의 input/output 통계 정보를 확인할 수 있는 명령어

 

iostat 명령어는 시스템에 로드된 device에 대한 활동 정보(평균 I/O 전송율, 큐잉시간, 서비스타임등)를 device별로 확인할 수 있음

 

각, device에 대한 활동 정보를 검토함으로써 특정 device의 지연현상을 감지하고 적절한 대처(옵션변경,구성변경등)를 통해 성능 및 안정성을 확보할 수 있음

 

- Usage
  . 일반적인 명령어 실행 방식
    . iostat [옵션] [수행 interval] [수행 횟수]
  . 주요 옵션
    . -c  : display CPU utilization
    . -d  : display disk utilization
    . -k  : use kilobites instead of(512-byte) blocks
    . -m  : use megabytes instead of(512-byte) blocks
    . -p  : include per-partition statistics
    . -t  : timestamp output
    . -x  : extended statistics
    . -z  : skip displaying zero-activity summaries
  . 주요 사용 옵션 조합
    . iostat -xkdzt -p ALL 3
      . 설명 : 3초 간격 정보를 출력하며 KB 단위(-k)로 disk의 상태(-d)를 출력함
               출력 시 timestamp를 추가(-t)하며, 확장된 정보(-x)도 같이 출력함
               idle disk에 대한 출력은 제거(-z)하고 파티션되어 있는 disk는 모두 출력(-p ALL)하게 됨
- Output
  . 출력은 CPU와 Disk로 두가지로 나누어짐
  . 여기서는 Disk에 대한 출력 정보에 대해 다루기로 함
  . 출력 정보
    . Device : Device(Partition) 명
               * Partition은 hard disk를 하나이상의 logical disk 나눈것임 (lsblk 명령으로 확인)
    . tps : 해당 Device에 전송된 초당 request transfer임. transfer의 size는 알 수 없음
    . Blk_read/s (KB_read/s, MB_read/s) : 해당 Device를 통해 읽어들인 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
      * sector : disk 상의 하나의 block임. 전통적으로 512byte의 크기임
    . Blk_wrtn/s (KB_wrtn/s, MB_wrtn/s) : 해당 Device를 통해 기록한 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
    . Blk_read (KB_read, MB_read) : 해당 Device를 통해 읽어들인 전체 block 수
    . Blk_wrtn (KB_wrtn, MB_wrtn) : 해당 Device를 통해 기록한 전체 block 수
    . rrqm/s  : 해당 Device에 초당 큐잉된 Merged read request 수 (그림 9.8 참고)
    . wrqm/s  : 해당 Device에 초당 큐잉된 Merged write request 수 (그림 9.8 참고)
    . r/s : 해당 Device에 Merge후 초당 완료된 read request 수
    . w/s : 해당 Device에 Merge후 초당 완료된 write request 수
    . rsec/s (rKB/s, rMB/s) : 해당 Device로 부터 read한 sector(KB,MB) 수
    . wsec/s (wKB/s, wMB/s) : 해당 Device로 부터 write한 sector(KB,MB) 수
    . avgrq-sz  : 해당 Device에 발생된 request의 평균 size(sector 기준)
    . avgqu-sz  : 해당 Device에 발생된 request들의 queue의 평균 length
    . await : 해당 Device에 발생된 I/O request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . r_await : 해당 Devive에 발생된 read request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . w_await : 해당 Devive에 발생된 write request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
    . svctm : 해당 Device에 발생된 I/O request의 서비스 Time (milliseconds).  Do not trust this field any more.  This field will be removed in a future sysstat version.
    . %util : 해당 Device에 발생된 I/O request의 bandwidth utilization. serial request의 경우 100%에 근접할 경우 Device saturation이 발생함. parallel일 경우 (RAID, SSD등)는 해당 수치가 성능 한계를 반영하지는 않음

 

 

iostat 명령어를 통해 avgrq-sz,avgqu-sz,await,%util의 컬럼 정보를 분석을 통해 현재 device의 I/O 상태를 확인

 

 위이 사례는 단순히 disk I/O를 발생시키는 명령어를 찾아서 조치하는 방법이나, 현실에서는 실제 I/O 증가로 인해 병목이 발생할 수 있으며,
    이를 해결하기 위해서는 다음과 같은 방법들을 적용해야할 필요가 있음
    1) Application Level에서의 불필요한 disk I/O가 발생하는지 점검 (log level등)
    2) OS에서 제공하는 파라미터 튜닝을 통한 개선 (Disk Queuing Algorithm 변경)
    3) Disk 분산을 통한 I/O bandwidth 개선
    . 1)번이 가장 선행되어야할 분석 작업임
    . 2)의 경우 linux에서는 Noop,Deadline,Anticipatory,CFQ 등이 있으며, write로 인한 read 지연을 어느정도 개선할 수 있음
    . 3)의 경우 I/O가 편중되는 FileSystem에 대해 volume을 물리적인 여러 Disk로 분산할 수 있도록 재구성하는 방법(증설,재구성)이며, Disk I/O 개선을 위한 현실적인 방안임

 

출처 : https://m.blog.naver.com/PostView.nhn?blogId=bumsukoh&logNo=221022044759

 

Disk I/O 모니터링을 위한 iostat 명령어 활용법

iostat- Summary . CPU 상태와 Disk device의 input/output 통계 정보를 확인할 수 있는 명령어임 . i...

blog.naver.com

 

 

 

iostat [-V][-k][-t][-x][delay [count]]

-k : 단위를 KB로 출력, 기본은 블록(512byte)

-t :  결과 맨 앞에 시간을 출력

-x : 보다 상세하게 정보를 출력

delay [count]: 출력 주기와 횟수를 지정함, 디폴트 1회

 

output

tps: 초당 입출력 작업 건수. tps가 높다는 것ㅎ은 CPU가 busy라는 의미임

Blk_read/s: 초당 읽어들인 블록(512바이트) 수, KB_read/s(KB단위)

Blk_wrtn/s: 초당 쓰여진 블록(512바이트) 수, KB_wrtn/s(KB단위)

 

Blk_read:  지금까 읽어들인 블록(512바이트) 수, KB_read/s(KB단위)

Blk_wrtn: 지금까지 쓰여진 블록(512바이트) 수, KB_wrtn/s(KB단위)

 

rrqm/s: 디바이스 큐에 대기중인 초당 읽기 요청의 건수

wrqm/s: 디바이스 큐에 대기중인 초당 쓰 요청의 건수

 

r/s: 디바이스 요청한 초당 읽기 요청의 건수

w/s: 디바이스 요청한 초당 쓰기 요청의 건수

 

rsec/s: 디바이스 요청한 초당 읽기 섹터의 건수

wsec/s: 디바이스 요청한 초당 쓰기 섹터의 건수

 

avgrq-sz : 디바이스 요청한 초당 평균 데이터의 크기

avgqu-sz : 디바이스 요청한 초당 평균 큐 길이

 

await: 디바이스에서 처리되기 위해서 요청된 I/O 평균 시간(밀리초, 1/1000초), 큐에서 소용된 시간과 처리된 시간이 합쳐져 출려됨.

 

svctm: 디바이스에서 처리한 I/O 평균 시간 (밀리초, 1/10000초)

 

%util : 디바이스에서 요청한 I/O 작업을 수행하기 위해 사용한 CPU 시간 비율, 이 값이 100%에 가까워지면 디바이스가 한계에 도달했다고 보면 됨.

반응형