I/O 병목 증상
- CPU가 낮은데 서버가 느림
vmstat에서wa(wait) 지속적으로 높음- 응답 시간이 불규칙하게 급증
1단계 — vmstat으로 wa 확인
Bash
vmstat 2 10
# procs ----------memory---------- --swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 1 3 0 512M 20M 1.5G 0 0 8000 4000 500 1000 5 2 3 90 0
# ↑↑↑↑
# wa=90: CPU가 I/O 완료를 기다리는 중 — 명백한 I/O 병목2단계 — iostat으로 디스크 상태 분석
Bash
sudo apt install -y sysstat
# 2초 간격, 5회
iostat -xz 2 5
# 주요 컬럼 해석
# %util: 디스크 사용률 (100%에 가까우면 포화)
# await: 평균 I/O 응답 시간 (ms) — 일반 HDD: <20ms, SSD: <1ms
# r/s, w/s: 초당 읽기/쓰기 요청 수
# rkB/s, wkB/s: 초당 읽기/쓰기 처리량 (KB)
# svctm: 서비스 시간 (await - 큐 대기시간)
# 특정 디바이스만
iostat -x sda sdb 2
# 디스크별 읽기/쓰기 비율
iostat -d -k 2 | grep -v "^$"3단계 — iotop으로 원인 프로세스 찾기
Bash
sudo apt install -y iotop
# 인터랙티브 모드
sudo iotop
# I/O 사용 중인 프로세스만 표시 (-o)
sudo iotop -o
# 1회 스냅샷
sudo iotop -b -n 3 | head -20
# 단축키
# o: 활성 프로세스만 토글
# p: 프로세스/스레드 전환
# a: 누적 I/O 토글4단계 — 프로세스별 I/O 상세 (pidstat)
Bash
# 특정 프로세스 I/O 추적
pidstat -d -p 1234 2 5
# 모든 프로세스 I/O
pidstat -d 2 5 | sort -k4 -rn | head -10
# 열린 파일 확인 (어떤 파일에 I/O 중인지)
sudo lsof -p 1234 | grep -E "REG|DIR"
sudo ls -la /proc/1234/fd5단계 — fio로 디스크 성능 측정
Bash
sudo apt install -y fio
# 순차 읽기 성능
fio --name=seq-read --ioengine=libaio --iodepth=32 --rw=read --bs=128k --direct=1 --size=1G --numjobs=1 --runtime=30 --filename=/tmp/fio-test
# 랜덤 읽기/쓰기 (IOPS 측정 — SSD 성능 지표)
fio --name=rand-rw --ioengine=libaio --iodepth=32 --rw=randrw --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=30 --filename=/tmp/fio-test --group_reporting
# 결과 해석
# READ: IOPS=50k, BW=200MiB/s (SSD 정상)
# IOPS<1000 이면 HDD 수준6단계 — 해결 방법
Bash
# DB 쓰기 부하 → 버퍼 풀 증가
# PostgreSQL: shared_buffers = 총 메모리의 25%
# MySQL: innodb_buffer_pool_size = 총 메모리의 50-70%
# 로그 I/O 많음 → 비동기 커밋
# PostgreSQL: synchronous_commit = off (데이터 손실 위험 있음)
# 디스크 캐시 확인
free -h
# buff/cache 많으면 OS가 캐시 활용 중 — 정상
# I/O 스케줄러 변경 (SSD에는 none 또는 mq-deadline)
cat /sys/block/sda/queue/scheduler
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.