iostat 명령어

안녕하세요. 블로그스팟-봉봉테크입니다.

서버를 운영하다 보면 갑작스러운 속도 저하나 서비스 지연 현상을 맞닥뜨리게 됩니다. 많은 경우 CPU나 메모리 부족을 먼저 의심하지만, 실제 현업(특히 대용량 데이터베이스나 WAS 환경)에서는 디스크 I/O 병목 현상이 원인인 경우가 허다합니다. 이럴 때 서버의 상태를 가장 빠르고 정확하게 진단할 수 있는 도구가 바로 오늘 소개할 iostat 명령어입니다. 오늘은 15년 차 시스템 엔지니어의 관점에서 iostat의 기초부터 실무 활용법까지 완벽하게 파헤쳐 보겠습니다.

1. iostat 명령어란 무엇인가요?

iostat(Input/Output Statistics)은 리눅스 및 유닉스 시스템에서 CPU 사용률과 디스크 I/O(입출력) 통계를 모니터링하는 명령어입니다. 이 명령어를 통해 특정 물리적 디스크나 파티션에 과도한 부하가 걸려 있지 않은지, 데이터 읽기/쓰기 속도가 정상적인지 수치화하여 확인할 수 있습니다.

기본적으로 리눅스에 내장되어 있지 않은 경우가 많으므로, 사용 전 sysstat 패키지를 설치해야 합니다.

  • CentOS / RHEL 계열: yum install sysstat
  • Ubuntu / Debian 계열: apt-get install sysstat

2. iostat 필수 옵션 및 문법 정리

명령어의 기본 형태는 iostat [옵션] [간격(초)] [반복 횟수]입니다. 실무에서는 단순히 명령어만 치기보다는 다양한 옵션을 조합하여 상세한 데이터를 추출합니다.

[표 1] iostat 핵심 옵션 비교 및 설명
옵션 상세 설명 및 활용 목적
-x 확장된(Extended) 통계 정보를 출력합니다. 실무에서 가장 많이 사용하는 필수 옵션으로, 디스크의 대기 시간(await)과 사용률(%util)을 확인할 수 있습니다.
-d CPU 정보는 제외하고 디스크(Device) 통계만을 출력합니다.
-c 디스크 정보는 제외하고 CPU 상태 통계만을 출력합니다.
-k / -m 데이터의 단위를 킬로바이트(KB) 또는 메가바이트(MB) 단위로 변환하여 가독성을 높입니다.
-t 결과가 출력되는 시점의 시간(Time) 정보를 함께 표시합니다. 로그 분석 시 유용합니다.

3. iostat -x 확장 지표 완벽 분석

시스템 부하를 진단할 때 가장 유의미한 데이터는 iostat -x 명령어를 통해 얻을 수 있습니다. 출력되는 수많은 지표 중, 서버 관리자가 반드시 모니터링해야 하는 핵심 수치를 표로 정리했습니다.

[표 2] iostat 확장 출력(-x 옵션) 핵심 지표 분석
출력 지표 의미 및 병목 판단 기준
%util
(Utilization)
I/O 요청을 처리하기 위해 디스크가 사용된 시간의 비율입니다. 이 수치가 80~100%에 지속적으로 머문다면 디스크 병목 현상이 발생하고 있다는 확실한 증거입니다.
await I/O 요청이 처리되기까지 대기한 평균 시간(밀리초, ms)입니다. 이 값이 비정상적으로 높다면(보통 10ms 이상 지속) 디스크 처리 속도가 요청을 따라가지 못하고 있음을 의미합니다.
r/s & w/s 초당 발생한 읽기(Read) 및 쓰기(Write) 요청 횟수(IOPS)입니다. 스토리지의 한계 IOPS와 비교하여 부하를 판단하는 데 사용됩니다.
rkB/s & wkB/s 초당 읽고 쓴 데이터의 양(Throughput)을 KB 단위로 나타냅니다. 대용량 파일 전송 시 이 수치가 크게 상승합니다.

4. 실무에서의 트러블슈팅 활용 사례

실제 운영 서버에서 장애가 발생했을 때, 다음과 같은 명령어를 통해 실시간으로 디스크 부하를 추적할 수 있습니다.

명령어 예시: iostat -dxk 2 5

위 명령어는 CPU 정보를 제외하고(-d), 확장 지표를(-x), KB 단위로(-k), 2초 간격으로 5번 출력하라는 의미입니다. 이때 주목해야 할 패턴은 다음과 같습니다.

  • 패턴 A (디스크 한계 도달): %util이 100%에 근접하고 await 수치가 계속해서 증가한다면, 물리적인 디스크 성능의 한계이거나 스토리지 컨트롤러 문제입니다. SSD 교체나 I/O 분산을 고려해야 합니다.
  • 패턴 B (소프트웨어적 문제): %util은 낮지만 w/swkB/s가 간헐적으로 폭증한다면, 배치 작업이나 로그 파일 과다 생성, 혹은 비효율적인 데이터베이스 쿼리로 인한 순간적인 부하일 가능성이 높습니다.

결론: 꾸준한 모니터링이 시스템 안정성의 핵심입니다.

iostat 명령어는 리눅스 서버 점검 시 결코 빠질 수 없는 강력한 무기입니다. 특히 %utilawait 지표를 정확히 이해하고 분석할 수 있다면, 원인을 알 수 없었던 서버 지연 문제의 실마리를 빠르게 풀 수 있습니다. 단순히 지표를 확인하는 데 그치지 않고, 악성 I/O를 유발하는 프로세스를 찾아 쿼리를 튜닝하거나 불필요한 로그 생성을 줄이는 최적화 작업을 병행하시기 바랍니다.

💡 도움이 되셨나요?

현재 운영 중인 리눅스 서버나 데이터베이스 성능 문제로 고민이 있으시다면, 아래 댓글로 증상을 남겨주세요. 봉봉테크가 15년 실무 노하우로 직접 답변해 드리겠습니다. 더 많은 IT 인프라 팁을 원하신다면 블로그 구독도 잊지 마세요!

댓글 쓰기

다음 이전