iostat는 디스크 입출력에 대한 통계정보를 측정할 수 있는 명령어다. 처리량이나 사용률, 대기열 길이와 트랜잭션 비율 그리고 서비스 시간 등의 정보를 확인할 수 있다.
리눅스 시스템을 운영하면서 갑자기 서버에 부하가 높다던가 서버의 응답속도가 저하되는 경우가 발생할 때 디스크 입출력에서 문제가 생긴게 아닌지 모니터링하고 문제를 찾을 수 있다.
목차
iostat 설치
iostat은 sysstat 패키지를 설치하면 사용할 수 있다.
$ sudo yum install sysstat
or
$ sudo apt install sysstat
iostat 사용법
iostat 명령어를 이용하면 디스크 디바이스에 대한 입출력 정보를 확인할 수 있다.
$ iostat [옵션] [인터벌] [횟수]
iostat의 옵션 뒤에는 인터벌과 횟수를 의미하는 숫자가 온다. 인터벌은 몇 초마다 디스크 디바이스의 정보를 출력할 것인지, 횟수는 몇 번 수집할 것인지를 의미한다.
기본적으로 iostat은 CPU 정보와 함께 시스템에 마운트되어 있는 디바이스의 정보를 함께 표시해준다.
$ iostat
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
18.85 0.00 2.42 0.00 0.00 78.73
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 35.08 1318.71 2753.02 135111327948 282067923024
만약 CPU 정보만 출력하고 싶으면 -c 옵션을 사용하면 된다. 다음은 1초마다 CPU 정보를 총 3번 출력하라는 명령어다.
$ iostat -c 1 3
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
18.85 0.00 2.42 0.00 0.00 78.73
avg-cpu: %user %nice %system %iowait %steal %idle
35.56 0.00 6.00 0.00 0.00 58.44
avg-cpu: %user %nice %system %iowait %steal %idle
31.52 0.00 4.20 0.00 0.00 64.28
만약 디스크 디바이스 정보만 출력하고 싶으면 -d 옵션을 사용하면 된다. 다음은 1초마다 디스크 디바이스 정보를 총 3번 출력하라는 명령어다.
$ iostat -d 1 3
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 35.08 1318.70 2753.01 135111327972 282068410232
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 37.00 0.00 872.00 0 872
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 43.00 0.00 744.00 0 744
시스템에는 여러개의 디스크 디바이스들이 마운트되어 있을 수 있다. 그리고 그 디바이스는 여러개의 파티션으로 분할되어 사용될 수 있다.
iostat 명령어를 이용해 특정 디바이스에 대한 정보만을 확인하고 싶으면 -p 옵션을 사용해서 디바이스 이름을 넘겨주면 된다. 그러면 그 디바이스와 디바이스의 파티션에 대한 정보를 출력한다.
$ iostat -p sda
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.04 0.00 0.47 0.26 0.00 98.23
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 7.08 476.47 795.11 4353309764 7264577912
sda1 7.08 476.45 795.11 4353073584 7264577912
시스템에 마운트되어 있고 사용하지 않고 있는 디바이스들이 있을 수 있다. -z 옵션을 사용하면 실제 활성화되어 사용중인 디바이스에 대한 정보만을 표시한다.
$ iostat -z
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
18.85 0.00 2.42 0.00 0.00 78.73
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 35.08 1318.71 2753.02 135111327948 282067923024
-x 옵션을 사용하면 확장된 통계 정보를 출력한다.
$ iostat -x
Linux 2.6.32-754.11.1.el6.x86_64 (myhost) 2022년 06월 01일 _x86_64_ (40 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
18.85 0.00 2.42 0.00 0.00 78.73
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.07 320.11 11.06 24.01 1318.69 2753.00 116.08 0.02 0.51 0.50 0.51 0.13 0.46
iostat 출력 정보
iostat이 출력하는 CPU 사용과 관련된 정보는 다음과 같다.
%user | CPU가 User 모드에서 사용된 시간의 비율 |
%nice | 작업 우선순위 정책에 의해 우선순위가 바뀐 프로세서가 사용한 시간의 비율 |
%system | CPU가 시스템 모드에서 사용된 시간의 비율 |
%iowait | 디스크 입출력을 기다리는데 사용된 시간의 비율 |
%steal | Steal CPU의 작동시간 |
%idle | 디스크 입출력을 대기하지 않은 유휴상태의 시간 비율 |
디스크 디바이스와 관련된 정보는 다음과 같다.
tps | 디스크 디바이스에서 초당 처리한 입출력 작업의 개수 |
Blk_read/s | 디스크에서 초당 읽어들인 블럭의 개수 |
Blk_wrtn/s | 디스크로 초당 쓰여진 블럭의 개수 |
Blk_read | 총 읽어들인 블럭 개수 |
Blk_wrtn | 총 쓰여진 블럭 개수 |
kB_read/s | 디스크로부터 읽은 데이터의 양(초당 킬로바이트) |
kB_wrtn/s | 디스크로 쓰여진 데이터의 양 (초당 킬로바이트) |
kB_read | 디스크로부터 읽은 데이터의 총량(킬로바이트) |
kB_wrtn | 디스크로 쓰여진 데이터의 총량 (킬로바이트) |
MB_read/s | 디스크로부터 읽은 데이터의 양(초당 메가바이트) |
MB_wrtn/s | 디스크로 쓰여진 데이터의 양 (초당 메가바이트) |
MB_read | 디스크로부터 읽은 데이터의 총량(메가바이트) |
MB_wrtn | 디스크로 쓰여진 데이터의 총량(메가바이트) |
rrqm/s | 디바이스 큐에 대기중인 초당 읽기 요청의 건수 |
wrqm/s | 디바이스 큐에 대기중인 초당 쓰기 요청의 건수 |
r/s | 디바이스에 요청한 초당 읽기 요청의 건수 |
w/s | 디바이스에 요청한 초당 쓰기 요청의 건수 |
rsec/s | 디바이스에서 초당 읽어들인 섹터의 개수 |
wsec/s | 디바이스로 초당 기록한 섹터의 개수 |
rkB/s | 디바이스에서 읽어들인 초당 데이터의 양 (킬로바이트) |
wkB/s | 디바이스로 쓴 초당 데이터의 양 (킬로바이트) |
rMB/s | 디바이스에서 읽어들인 초당 데이터의 양 (메가바이트) |
wMB/s | 디바이스로 쓴 초당 데이터의 양 (메가바이트) |
avgrq-sz | 디바이스에 요청한 초당 평균 데이터의 크기 |
avgqu-sz | 디바이스에 요청한 초당 평균 큐 길이 |
await | 디바이스에서 처리되기 위해서 요청된 입출력의 평균 시간. (큐에서 소요된 시간과 처리된 시간이 합쳐져 출력) |
svctm | 디바이스에서 처리한 입출력의 평균 시간 |
%util | 디바이스에서 요청한 입출력 작업을 수행하기 위해 사용한 CPU 시간의 비율. 이 값이 100%에 근접할 경우 디바이스가 Saturation(한계에 도달) 되었다고 판단할 수 있음 |
iostat 명령어 옵션
옵션 | 설명 |
-c | cpu 사용량 출력 |
-d | 디스크 사용량 출력 |
-k | 블럭 단위에서 킬로바이트로 정보 출력 |
-m | 블럭 단위에서 메가바이트로 정보 출력 |
-p | 파티션 당 통계 포함 |
-t | 타임스탬프 출력 |
-x | 확장 정보 |
-z | 사용량이 0인 정보는 제외 |
댓글