본문 바로가기

01. operation/iv. Kernel

iostat 모니터링 및 튜닝 포인트 잡기


어플리케이션을 운영하면서 메모리 튜닝, db튜닝, 어플리케이션 튜닝, network 튜닝....까지는 종종 해보았는데 디스크튜닝은 사실상 방치해둔 상태였습니다.

이번에 서비스장비중 디스크쪽 문제가 있어서 디스크 모니터링 방법과 튜닝 포인트를 잡아보려고 합니다...

iostat 값을 보는 모니터링방법
1. iostsat -x 를 통한 모니터링 (사실 -x 옵션이 없어도 되나 보기에 -x가 편합니다)

Device 장치 이름 영문 설명
rrqm/s 초당 읽기 요청 수. 이 메트릭스는 읽기 전송을 위한 병합 요청을 측정합니다. read request per second
wrqm/s 쓰기 요청 수입니다. write request per secend
r/s 초당 읽기 요청 수. number of read
w/s 초당 쓰기 요청 수. write requests 
rsec/s device 초당 읽은 섹터 수. sectors read per second
wsec/s device 초당 기록한 섹터 수. sectors written per second
rkB/s device 초당 읽은 데이터(KB/초). read KB size
wkB/s device 기록된 데이터(KB/초). write KB size
avgrq-sz 읽기 요청의 평균 크기(섹터). average number of sectors per request (for both reads and writes). ie (rsec + wsec) / (r + w)
avgqu-sz 요청 대기열의 평균 길이. avgqu-sz – average queue length in the monitoring interval (in this case 42.79) 
await 이 장치에 대한 I/O 요청의 평균 경과 시간(밀리초). 서비스 시간과 대기열의 대기 시간을 합한 시간입니다. average time that each IO Request took to complete. 
svctm 장치의 평균 서비스 시간(밀리초). average time each IO request took to complete  during the monitoring interval
%util ((Write operation 개수 + Read operation 개수) * 평균 처리 시간)  / 측정 interval util<5%: white
5%<util<35%: green
35%<util<65%: amber
65%<util: red

굳이 영문을 써둔 이유가 번역이나 오역이 생길것 같아서 영문의 간략한 코멘트형식으로 달아둡니다.

문제는 %util값입니다.
영문에 써둔 부분을 보면 65% 이상이면 시스템 부분에 대한 전반적인 점검이 필요하다는 의미이며, 현재 운영하는장비들중 몇몇곳이 디스크 사용량이 늘어나며 util값이 90%를 유지하며 서비스가 되어지고 있습니다.

이에 대한 튜닝포인트는 한글로 설명이 되어져 있는 kernel로 read/write 요청건수와 raid 컨트롤러 관련 메모리 cache를 사용하는 부분입니다.

리눅스 디렉토리 구조를 보게 되어지면 /proc와 /sys 아래에 시스템 정보 및 현재 상황을 얻을수가 있으며 간략하게 튜닝 작업이 가능합니다.

/sys/block/device/queue 에서 설정 변경이 가능합니다
아직까지 정확한 파라미터를 찾지는 못하였으며 변경을 해가며 확인을 해봐야할것 같습니다.

커널관련 옵션들및 환경을 조금 살펴봐야지 할것 같습니다.
커널 관련 문서 : http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/ko/