반응형
데이터베이스와 같은 프로그램을 사용하다보면 디스크 I/O를 모니터링 해야될 필요가 생긴다. 이때 iostat 명령어를 이용하여 다양한 I/O 측정값들을 실시간으로 볼 수 있다. iostat명령어가 어떤 값들을 출력해주는지와 사용법을 간단히 정리해 놓았다.
디스크 I/O
일단 디스크 I/O가 어떤식으로 처리되는지를 간단히 보자.디스크 I/O의 처리 순서는 아래와 같다.
- 응용 프로그램이 디스크 I/O 요청을 생성합니다.
- 운영 체제는 디스크 I/O 요청을 처리하기 위해 커널 수준의 I/O 스케줄러를 사용합니다.
- I/O 스케줄러는 디스크 I/O 요청을 대기열에 추가하고, 이를 처리하기 위해 디스크 드라이버에 전달합니다.
- 디스크 드라이버는 요청된 작업을 처리하기 위해 하드웨어 인터페이스를 사용하여 디스크 컨트롤러와 통신합니다.
- 디스크 컨트롤러는 디스크에서 데이터를 읽거나 쓰는 작업을 수행합니다.
- 작업이 완료되면 디스크 컨트롤러는 디스크 드라이버에 결과를 전달하고, 디스크 드라이버는 이를 I/O 스케줄러에 알립니다.
- I/O 스케줄러는 대기열에서 다음 작업을 선택하고 처리합니다.
Disk로 IO요청을 하면 (Issue) I/O Queue에대기하다가 순서가 되면 I/O가 실행되고 완료된다.
iostat
Input / Output 디바이스를 모니터링 하는 명령어이다. 장치 단위로 통계를 보여준다.
I/O 균형을 유지할 수 있도록 시스템 설정을 바꾸는데 도움이 되는 보고서를 생성한다.
iostat은 부팅이후부터 시작된 통계를 표시한다. interval을 주면 그 시간 간격 사이의 통계를 표시한다.
출력값
iostat 명령어의 결과로 출력해주는 모든 통계값이다. 옵션에 따라 출력되는 값이 선택된다.
tps | 초당 IO 요청 수 |
kB_read/s | 초당 읽기 block 수 |
kB_wrtn/s | 초당 쓰기 block 수 |
kB_dscd/s | 초당 버린 block 수 |
kB_w+d/s | 초당 쓰기 또는 버림 block 수 |
kB_read | 읽기 block 전체 수 |
kB_wrtn | 쓰기 block 전체 수 |
kB_dscd | 버림 block 전체 수 |
kB_w+d | 쓰기 + 버림 block 전체 수 |
r/s | 초당 완료된 읽기 요청 수 |
w/s | 초당 완료된 쓰기 요청 수 |
d/s | 초당 완료된 버림 요청 수 |
f/s | 초당 완료된 flush 요청 수 |
sec/s | 초당 읽기,쓰기, 버림 sector 수 |
rsec/s | 초당 읽기 sector 수 |
wsec/s | 초당 쓰기 sector 수 |
dsec/s | 초당 버림 sector 수 |
rqm/s | Device Queue에 대기중인 초당 IO요청 수 |
rrqm/s | Device Queue에 대기중인 초당 읽기 요청 수 |
wrqm/s | Device Queue에 대기중인 초당 쓰기 요청 수 |
drqm/s | Device Queue에 대기중인 버림 요청 수 |
%rrqm | 장치로 보내기 전의 읽기 비율 |
%wrqm | 장치로 보내기 전의 쓰기 비율 |
%drqm | 장치로 보내기 전의 버림 비율 |
areq-sz | IO요청의 평균 사이즈 (kb) |
rareq-sz | 읽기요청의 평균 사이즈(kb) |
wareq-sz | 쓰기 요청의 평균 사이즈 (kb) |
dareq-sz | 버림 요청의 평균 사이즈 (kb) |
await | IO 요청이 처리되기까지의 평균 시간(millisecond). Queue 대기시간포함 |
r_await | 읽기 요청이 처리 완료된 평균 시간(millisecond). Queue 대기시간포함 |
w_await | 쓰기 요청이 처리 완료된 평균 시간(millisecond). Queue 대기시간포함 |
d_await | 버림 요청이 처리 완료된 평균 시간(millisecond). Queue 대기시간포함 |
f_await | flush 요청이 처리 완료된 평균 시간(millisecond). Queue 대기시간포함 |
apu-sz | average queue length of request. 평균 I/O Queue 길이 |
%util | IO 요청을 처리 시간 비율 (장치의 대역폭 이용률). 100%면 장치가 포화상태임 |
옵션
-c | CPU 이용률 보기 |
-d | 장치 이용률 보기 |
-h | --human --pretty 와 같음 |
--human | 사이즈를 사람이 보기 편하게 표시. ( 1.0k, 1.2M처럼 크기 단위를 표시) |
--pretty | 출력을 사람이 보기 편하게 표시. 항목이 많으면 sub-report 형식으로 표시 |
--compact | sub-report로 쪼개지 않고 한줄로 표시 |
-k | kilobytes 단위로 표시 |
-m | megabytes 단위로 표시 |
-o JSON | JSON 포맷으로 표시 |
-s | 80자의 짧은 버전으로 표시 |
-t | 시간을 같이 표시 |
-V | 버전 표시 |
-x | 확장된 통계 표시 |
-y | 부팅이후의 통계 표시를 생략한다. |
-z | 활동이 없는 디바이스는 출력하지 않음 |
interval count
interval 초 간격으로 count 개수만큼 출력
// 1초 간격으로 10번 출력한다.
$ iostat 1 10
// 5초 간격으로 2번 출력한다.
$ iostat 5 2
명령어
iostat option interval count
- 전체적인 tps 및 사이즈를 1초단위로 계속 출력해주는 명령
$ iostat -d 1
- 세부정보를 1초단위로 계속 출력해주는 명령
$ iostat -dxz 1
반응형
'인프라' 카테고리의 다른 글
Gitlab Pages 에 Custom Domain 연결하기 (2) | 2023.06.28 |
---|---|
AWS EC2 범용 인스턴스 타입 비교 (T vs M) (5) | 2023.05.10 |
댓글