← 아티클 목록

리눅스 iowait 높음 — 디스크 지연 진단법 (iostat·iotop)

2028-02-28#linux#트러블슈팅#성능

top을 띄웠더니 us·sy는 낮은데 wa(iowait)만 40%를 넘고 있습니다. CPU는 한가한데 시스템 전체가 끈적하게 느립니다. iowait는 "CPU가 할 일은 없는데 디스크 I/O가 끝나길 기다리는 시간"입니다. 즉 CPU가 아니라 디스크가 병목입니다.

1단계 — iowait가 정말 높은가 (top)

로컬 터미널
top
# %Cpu(s):  3.1 us,  1.2 sy,  0.0 ni, 52.0 id, 43.5 wa

wa가 지속적으로 높으면(보통 10% 이상이 계속 유지되면) 디스크 대기가 부하의 핵심입니다. 일시적 스파이크가 아니라 지속 여부가 중요합니다.

2단계 — 어느 디스크가 느린가 (iostat)

로컬 터미널
iostat -x 1 5

핵심 열은 await(요청당 평균 대기 시간, ms)와 %util(장치 포화도)입니다.

의미경고 신호
awaitI/O 요청 1건의 평균 소요(ms)수십 ms 이상 지속
r_await / w_await읽기/쓰기 각각의 대기한쪽만 크면 패턴 단서
%util장치가 바쁜 시간 비율100%에 붙으면 포화
aqu-sz평균 큐 길이> 1 이면 요청이 쌓임

%util이 100%에 가깝고 await가 크면 그 장치가 포화 상태입니다.

3단계 — 어떤 프로세스가 디스크를 쓰나 (iotop)

로컬 터미널
sudo iotop -oP

-o는 실제 I/O 중인 것만, -P는 프로세스 단위로 보여줍니다. DISK READ·DISK WRITE 상위 프로세스가 범인입니다. 흔한 경우: 로그 폭증, 백업·덤프 잡, swap 발생, DB 체크포인트.

swap이 의심되면 함께 확인합니다.

로컬 터미널
vmstat 1 5
# si·so 열이 0이 아니면 스왑 입출력 중

체크리스트

로컬 터미널
top                    # wa 지속 여부
iostat -x 1 5          # await 큰 장치 + %util 포화
iotop -oP              # I/O 유발 프로세스
vmstat 1 5             # si/so 로 스왑 동반 여부

await가 큰 장치를 특정하고 그 위에서 가장 많이 읽고 쓰는 프로세스를 잡으면, "막연히 느리다"가 "이 잡이 이 디스크를 포화시킨다"로 좁혀집니다.


iostat·iotop·vmstat로 I/O 병목을 직접 끊어보는 실습과 성능 진단 감각은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.