Linux 커널 2.6 이상에서는 File System 사용을 모니터링 하기 위해 block_dump라는 파라미터를 사용할 수 있다.
우선 이 기능을 사용하기 위해서는 아래와 같이 block_dump 커널 파라미터를 1로 수정한다.
sysctl vm.block_dump=1
block_dump 값이 활성화 되면 Linux 커널은 아래와 같이 File System 이벤트를 시스템 로그에 기록
mysql(1287): WRITE block 248048 on hda1
mysql(1287): WRITE block 248186 on hda1
...
이 값을 잘 활용하면 프로세스 별로 Disk I/O가 얼마나 일어나는지 알 수 있다.
wget http://aspersa.googlecode.com/svn/trunk/iodump
스크립트 파일을 열어보면 간단한 사용법이 있는데, IO를 확인하고 싶은 시간동안 돌려 두고, Ctrl + C로 인터럽트를 걸면 된다.
while 루프가 돌면서 dmesg로 계속 로그 내용을 수집하고 인터럽트가 걸리면 iodump Perl Script가 잘 정리해서 보여주는 구조다.
출력은 Block 단위로 나오는데, Linux 시스템에서는 4KB의 Block을 사용하므로 프로세스가 얼마나 많은 데이터를 Read Write 했는지 알 수 있다.
아래 예제에서는 MySQL 프로세스가 21.6MB (5549 * 4KB) 정도의 Write 작업을 한 것을 확인할 수 있다.
# while true; do sleep 1; dmesg -c; done | perl iodump
# Caught SIGINT.
TASK PID TOTAL READ WRITE DIRTY DEVICES
mysqld 5928 5549 0 5549 0 hda1
kjournald 9823 24 0 24 0 hda1
우선 이 기능을 사용하기 위해서는 아래와 같이 block_dump 커널 파라미터를 1로 수정한다.
sysctl vm.block_dump=1
block_dump 값이 활성화 되면 Linux 커널은 아래와 같이 File System 이벤트를 시스템 로그에 기록
mysql(1287): WRITE block 248048 on hda1
mysql(1287): WRITE block 248186 on hda1
...
이 값을 잘 활용하면 프로세스 별로 Disk I/O가 얼마나 일어나는지 알 수 있다.
wget http://aspersa.googlecode.com/svn/trunk/iodump
스크립트 파일을 열어보면 간단한 사용법이 있는데, IO를 확인하고 싶은 시간동안 돌려 두고, Ctrl + C로 인터럽트를 걸면 된다.
while 루프가 돌면서 dmesg로 계속 로그 내용을 수집하고 인터럽트가 걸리면 iodump Perl Script가 잘 정리해서 보여주는 구조다.
출력은 Block 단위로 나오는데, Linux 시스템에서는 4KB의 Block을 사용하므로 프로세스가 얼마나 많은 데이터를 Read Write 했는지 알 수 있다.
아래 예제에서는 MySQL 프로세스가 21.6MB (5549 * 4KB) 정도의 Write 작업을 한 것을 확인할 수 있다.
# while true; do sleep 1; dmesg -c; done | perl iodump
# Caught SIGINT.
TASK PID TOTAL READ WRITE DIRTY DEVICES
mysqld 5928 5549 0 5549 0 hda1
kjournald 9823 24 0 24 0 hda1