티스토리 뷰
성능분석을 위한 실시간 Disk Device 별 유입 I/O 확인 및 I/O Response 시간 산출
helperchoi 2014. 2. 6. 11:45DW 성향의 대용량 분석DB 시스템을 운용하다 보면, CPU나 Memory 등의 시스템 리소스 상태는 충분하나 DB 응답지연등의 현상이 있을 때가 있다.
시스템 담당자로서 각 리소스별 사용추이나 IDLE상태를 체크하면서 Storage 레벨 또는 특정 Disk Device 에 대한 I/O 상태를 확인해야 할 경우 아래와 같이 sar 명령을 통해 각 Device 별 실시간 유입 I/O 와 응답시간(await)을 확인 할 수 있다.
[root@TestDB01 ~]# |
하지만 위에서 보이는 것 처럼 sar -d 명령을 통해 확인 되는 Device Name은 Linux 상의 Device Major No와 Minor No를 참조하는 Allocated devices Name 형식으로 보여 Disk Device를 쉽게 구분하기 힘들다.
Linux 상에서 Disk Device의 Major 번호와 Minor 번호의 참조 및 확인은 아래와 같이 /proc/diskstats 를 통해 가능하며 한두개의 Disk Volume을 조회한다면 아래와 같은 형식으로 조회가 가능하다.
[root@TestDB01 ~]# cat /proc/diskstats | awk '$1 ~ /^66$/ && $2 ~ /^1696$/ {print}' |
하지만 수십개 이상의 Disk Divce를 조회해야 한다면 아래와 같은 Shell Script를 통해 손쉽게 확인이 가능하다.
1) 실행 예시
[root@TestDB01 ~]# ### Collect Disk I/O = 10 sec / Sort Number : 8 / Ouputs Line : 5
[ System Load INFO - 11:13:27 up 53 days, 21:03, 14 users, load average: 24.23, 20.98, 17.51 ]
11시 13분 16초 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util ### Default Disk I/O Collect = 5 sec / Sort by : [ I/O await time ] / Outputs Line : 20
[ System Load INFO - 11:13:47 up 53 days, 21:03, 14 users, load average: 24.29, 21.19, 17.65 ]
11시 13분 40초 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util |
2) Shell Script 내용
[root@TestDB01 ~]# cat ./diskio.sh #Develop by helperchoi / helperchoi@gmail.com
SORTNUM6="### Sort Number 6 - [ avgrq-sz ] : The average size (in sectors) of the requests that were issued to the device." RAW_DATA=`pwd`/collect_io.dat
if [ $# = 0 ] echo echo
sar -d 1 | sed -n '3,3p' > ${RAW_DATA} && sar -d 1 ${COLLECT_TIME} | grep "Average" | sort -nrk${SORT_BY} | head -${OUT_LINE} | grep "dev" >> ${RAW_DATA} echo "[ System Load INFO - `uptime` ]"
for LIST in `cat ${RAW_DATA} | grep dev | awk '{print $2}' | sed 's#dev##g'` echo "perl -pi -e 's#dev${LIST}#${DEVICE_NAME}#g' ${RAW_DATA}" >> `pwd`/change.sh
sh `pwd`/change.sh echo
|
3) 약간의 Shell Source 개작을 거치면 아래와 같이 각 Device별 용도 구분도 가능하다.
[root@TestDB01 ~]# ./diskio.sh 5 8 20 ### Collect Disk I/O = 5 sec / Sort Number : 8 / Ouputs Line : 20
[ System Load INFO - 20:30:12 up 61 days, 6:20, 10 users, load average: 2.34, 2.41, 2.96 ]
20시 30분 04초 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util [root@TestDB01 ~]# |
4) Source 주요 로직 개작 예시
if [ -z ${EMC_DEVICE_NAME} ]
echo "perl -pi -e 's#dev${LIST}#${DEVICE_NAME} [ ${EMC_DEVICE_NAME} | ${RAW_DEVICE_NAME} ]#g' ${RAW_DATA}" >> `pwd`/change.sh
sh `pwd`/change.sh
|
'System Story > CentOS 5,6' 카테고리의 다른 글
sar 명령을 통한 시스템 raw data 분석 (0) | 2014.03.05 |
---|---|
도대체 누가 kill 을 수행한거지?! (2) | 2014.02.20 |
Linux Whatis DB를 통한 검색 (0) | 2014.02.04 |
Linux SWAP 생성 메커니즘 및 Shell Script를 통한 Thread 단위 SWAP 메모리 사용 현황 확인 (0) | 2014.02.03 |
Ethernet 교체후 eth Device Name 인식 실패시 조치 (0) | 2014.01.19 |