iostat 옵션 명령어 설명 정리

iostat 를 이용한 디스크 i/o 모니터링

시스템 환경

Cpu : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
Ram : 1G
Hdd : 10G
아키텍쳐: 64bit
KVM 가상화 환경.

1. iostat란 무엇인가?

iostat 는 디스크 입출력에 대한 통계를 보고하고 처리량, 사용률, 대기열 길이, 트랜잭션 비율 및 서비스 시간에 대한 측정 결과를 알수 있는 프로그램이다. 평소 디스크에 베드섹터라든지 이상이 없는데, 서버의 부하가 평소보다 높을 경우에 디스크 사용량 을 알수 있다.

2. iostat 설치와 명령어

1) 설치 방법

기본적인 설치 방법은 간단하다.

yum install sysstat*

2) 명령어 옵션 설명

iostat

디스크의 기본정보를 보여준다.

  • %user : CPU자원이 사용자 모드에서 사용된 백분율을 의미 프로세스는 사용자 혹은 시스템 모드로 실행된다. 사용자 모드에서는 자신의 코드내에서만 운영되며 커널 자원을 필요하지 않는다.
  • %system : 시스템 모드에서 사용된 CPU 자원의 백분율이다. 이는 커널 프로세스들(kprocs)과 커널 자원들을 사용하기 위한 다른 프로세스들이 사용한 CPU 자원을 포함한다.
  • %user와 %system 합계가 80%(복수사용자 가정) 이상이면 CPU는 거의 작업을 하지 못한다고 할 수 있다.
  • %idle : 자신의 디스크 입출력을 기다리지 않으면서,CPU가 놀고 있거나 혹은 기다리면서 소비한 CPU 시간의 백분율을 나타낸다.만일 실행 큐에 아무런 프로세스도 없다면,시스템은 “wait” 라 불리우는 특별한 커널 프로세스를 실행시킨다.
  • %iowait : 지연된 자신의 디스크 입출력을 갖고 CPU가 놀고 있는 시간의 백분율 idle상태와는 디스크 입출력 대기라는 측면에서 다르다. 입출력이 완료되면 프로세스 실행 큐에 놓인다.

일반적으로 높은 iowait은 메모리 부족이나, 비효율적인 I/O부시스템이 구성되있다는 것을 나타낸다.

iowait가 높을 경우 가능한 솔루션 특정한 디스크상에 놓인 활동적인 논리적 볼륨들과 파일의 수 제한 (파일 입출력 부하 균등 분산) 하나의 논리적 볼륨을 여러 디스크에 분산 (여러 개의 서로 다른 파일들이 사용되는 경우 매우 적절한 조치) 한 볼륨그룹에 대해 여러 개의 JFS(저널링 파일시스템) 로그들을 만들고, 이들을 특정한 파일 시스템들에게 할당

  • tps : 초당 I/O 요청수
  • Blk_read/s: 초당 읽은 블록
  • Blk_wrtn/s : 초당 사용한 블록Blk_read : 읽은 블록
  • Blk_wrtn : 사용한 블록

iostat 5

5초마다 수집된 정보를 보여준다.

iostat -td 1 -x /dev/sda

이렇게 각 디바이스별로 쪼개서 시간별로도 체크를 할수 있다.

여기서 read request, write request 를 합하여 초당 나눈것이 tps 입니다. 초당 io 요청을 얼마나 많이 했나를 알수 있다.

초당 얼마나 많은 i/o 요청을 하는가 : tps, r/s, w/s – 전체, read, write io request

  • 초당 전송량 : r/w 전송양. -x 옵션이 없을때는 블락기준이며(Blk_read/s Blk_wrtn/s) 이를 byte 로 바꾸러면 512 byte 를 곱하면 된다. -x 옵션이 있으면 바이트로 나온다. (rkB/s, wkB/s )
  • r/w 비율 : i/o request, 전송량에서 read 와 write 비율을 보면 주로 읽기중심인지 쓰기중심인지 알 수 있을 것이다.

3. iostat 장점과 사용후기

iostat 의 근본적인 목적은 디스크의 활용정도(%tm_act 필드)를 관측하여 입출력 병목을 찾아내는데 있다.

상시 시스템의 디스크 상태를 확인할수 없지만, 시스템의 딜레이현상이 발생하면, 보통 디스크쪽을 살펴보게 된다. 이때에 iostat를 이용하여, 디스크 사용량을 확인한다면 조금더 안정감있는 시스템 관리를 할수 있지 않을까 생각 된다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다