iotop - 프로세스별 디스크 I/O 모니터 치트시트
iotop은 실시간으로 프로세스별 디스크 I/O 사용을 표시하는 top 같은 유틸리티다. iostat가 디바이스가 바쁜 것을 말해주는 반면, iotop은 어떤 프로세스가 읽고 쓰는지, 어느 속도로, 어떤 I/O 우선순위로 말해준다. “지금 디스크를 쾅쾅 거리는 것이 무엇인가?”에 답하는 가장 빠른 방법이다. 커널 회계 데이터를 읽으므로 root가 필요하다.
설치
| 플랫폼 | 명령어 |
|---|
| Debian/Ubuntu | sudo apt install iotop |
| Fedora/RHEL | sudo dnf install iotop |
| Arch Linux | sudo pacman -S iotop |
| 요구사항 | CONFIG_TASK_IO_ACCOUNTING을 사용한 커널 (표준) |
| 확인 | sudo iotop --version |
실행
| 명령어 | 설명 |
|---|
sudo iotop | 모든 프로세스의 대화형 라이브 보기 |
sudo iotop -o | 실제로 I/O를 수행하는 프로세스만 표시 |
sudo iotop -a | 누적 I/O 표시 (속도 아닌 총합) |
sudo iotop -P | 스레드가 아닌 프로세스 표시 |
sudo iotop -u USER | 사용자로 필터링 |
sudo iotop -d 5 | 5초마다 새로고침 |
디스플레이
| 열 | 의미 |
|---|
TID/PID | 스레드 또는 프로세스 ID |
PRIO | I/O 스케줄링 우선순위 클래스 |
USER | 프로세스 소유자 |
DISK READ | 현재 읽기 속도 |
DISK WRITE | 현재 쓰기 속도 |
SWAPIN | 스왑 중에 소비된 시간 % |
IO | I/O 대기 중 소비된 시간 % |
COMMAND | 프로세스 명령줄 |
두 개의 헤더 라인은 전체 및 실제 전체 시스템의 디스크 읽기/쓰기를 표시한다.
대화형 키
| 키 | 작업 |
|---|
o | --only 토글 (유휴 프로세스 숨김) |
a | 누적 vs 속도 토글 |
p | 프로세스/스레드 토글 |
r | 정렬 순서 반대 |
← / → | 정렬 열 변경 |
q | 종료 |
배치 / 로깅 모드
스크립트 및 증거 캡처를 위해 비대화형으로 실행하자.
# 2초마다 상위 I/O 프로세스를 로그, 10 반복, 활성 것만
sudo iotop -boPqqq -d 2 -n 10 > iotop.log
| 플래그 | 효과 |
|---|
-b | 배치 (비대화형) 모드 |
-o | 활성 프로세스만 |
-n N | 반복 수 |
-q | 조용함 (반복해서 헤더 억제) |
-k | 킬로바이트 |
일반적인 워크플로우
# "지금 디스크에 뭘 쓰고 있나?" — 활성만, 스레드 아닌 프로세스
sudo iotop -oP
# 시간에 따라 주기적인 I/O 스파이크 포착
sudo iotop -boP -d 1 -n 60 > spikes.log
# 사용자 프로세스에 대한 디스크 로드 책임 지정
sudo iotop -oP -u appuser
I/O 우선순위 (ionice와 페어링)
iotop은 PRIO (ionice) 클래스를 표시; ionice로 변경한다.
| ionice 클래스 | 의미 |
|---|
ionice -c 1 | 실시간 I/O 우선순위 |
ionice -c 2 -n 0..7 | 최선 노력 (기본값), 수준 0 = 최고 |
ionice -c 3 | 유휴 — 디스크가 다른 방법으로 자유로울 때만 I/O |
# 무거운 배치 작업의 디스크 I/O 우선순위 저하
ionice -c 3 -p $(pgrep -n backup)
iotop vs 관련 도구
| 도구 | 답변 |
|---|
| iotop | 어떤 프로세스가 디스크 I/O를 수행 |
| iostat | 디바이스가 포화되는지 여부 |
| pidstat -d | 프로세스별 I/O (스크립트 가능, sysstat) |
| dstat/dool | 결합된 시스템 보기 |
워크플로우: iostat가 디스크가 바쁜 것을 표시 → iotop이 어떤 프로세스 → ionice 우선순위 저하 표시.
자료