높은 디스크 I/O 지연 시간 문제 해결: 단계별 Linux 가이드

필수 명령줄 도구를 사용하여 Linux 시스템에서 높은 디스크 I/O 지연 시간을 진단하고 해결하는 방법을 알아보세요. 이 실용적인 가이드는 장치 포화도를 측정하기 위해 `iostat`를 사용하고 디스크 리소스를 독점하는 프로세스를 즉시 식별하기 위해 `iotop`를 활용하는 데 중점을 둡니다. 스왑 스래싱을 분석하고 최적의 시스템 성능을 유지하기 위한 선제적 모니터링을 구현하는 단계를 알아보세요.

34 조회수

높은 디스크 I/O 대기 시간 문제 해결: 단계별 Linux 가이드

디스크 입력/출력(I/O) 대기 시간은 Linux 시스템에서 흔히 발생하는 병목 현상으로, 종종 애플리케이션 성능 저하, 느린 부팅 시간 및 전반적인 시스템 불안정을 초래합니다. 프로세스가 디스크 작업 완료를 기다리는 데 과도한 시간을 소비하면 CPU 사용량이 낮아 보여도 시스템은 높은 대기 시간을 보고합니다. 이러한 I/O 병목 현상을 진단하고 완화하는 방법을 이해하는 것은 모든 Linux 시스템 관리자에게 필수적인 기술입니다.

이 포괄적인 가이드에서는 Linux 시스템에서 높은 디스크 I/O 대기 시간의 원인을 파악하기 위한 필수 도구와 방법론을 단계별로 안내합니다. iostat, iotop과 같은 강력한 유틸리티를 활용하여 증상 관찰에서 근본 원인 해결로 나아가는 실질적인 단계에 중점을 둘 것입니다.

디스크 I/O 메트릭 이해

문제 해결에 들어가기 전에 I/O 문제를 나타내는 주요 메트릭을 이해하는 것이 매우 중요합니다. 높은 대기 시간은 주요 증상이지만, 문제의 심각성과 출처를 확인하려면 지원 데이터 포인트가 필요합니다.

I/O 경합의 주요 지표

  • 높은 대기 시간(await/svctm): I/O 요청이 처리되는 데 걸리는 시간입니다. 높은 값(일반 워크로드의 경우 > 20ms, 데이터베이스 시스템의 경우 훨씬 더 높음)은 병목 현상을 나타냅니다.
  • 높은 사용률(%util): 이 메트릭이 100%에 가까워지면 장치가 포화 상태이며 추가 요청을 효율적으로 처리할 수 없습니다.
  • 높은 큐잉(avgqu-sz): 큰 평균 큐 크기는 많은 프로세스가 디스크가 비워지기를 기다리고 있음을 의미합니다.

1단계: iostat를 사용한 초기 시스템 상태 점검

iostat 유틸리티(sysstat 패키지의 일부)는 장치 사용률 및 성능 통계를 모니터링하는 기반입니다. CPU 및 장치 I/O에 대한 기록 및 현재 데이터를 제공합니다.

I/O 성능의 누적 합계를 얻으려면 간격(예: 2초마다)으로 iostat를 실행하십시오.

sudo iostat -dxm 2

iostat -dxm 출력 분석

장치 통계 열(x 플래그)에 특히 집중하십시오.

설명 높은 값의 의미
r/s, w/s 초당 읽기/쓰기(IOPS) 높은 값은 높은 처리량 수요를 나타냅니다.
rkB/s, wkB/s 초당 읽기/쓴 킬로바이트 처리량 볼륨을 측정합니다.
await I/O 요청의 평균 대기 시간(ms)(서비스 시간 + 큐 시간) 높은 대기 시간의 주요 지표
%util 요청을 처리하는 데 장치가 사용된 시간의 백분율 100%에 가까우면 포화 상태를 나타냅니다.

예시 시나리오: /dev/sda가 150ms의 await 시간과 98%의 %util을 표시하는 경우 해당 디스크에서 심각한 I/O 병목 현상이 확인되었습니다.

팁: 확장 통계의 경우 -x 플래그를 사용하고 킬로바이트(-k)보다 명확한 경우가 많은 메가바이트 단위 보고의 경우 -m을 사용하십시오.

2단계: iotop를 사용하여 원인 프로세스 식별

iostat가 특정 장치(예: /dev/sda)에서 높은 대기 시간을 확인한 후 다음 중요한 단계는 어떤 프로세스가 해당 로드를 생성하는지 확인하는 것입니다. I/O 활동에 중점을 두고 top 명령의 기능을 반영하는 iotop 유틸리티가 여기서 필수적입니다.

iotop이 설치되어 있지 않은 경우 먼저 설치하십시오.

# Debian/Ubuntu
sudo apt update && sudo apt install iotop

# RHEL/CentOS/Fedora
sudo yum install iotop  # 또는 dnf install iotop

루트 권한으로 iotop를 실행하고 활발하게 스와핑하는 프로세스만 집중하십시오.

sudo iotop -oP
  • -o: I/O를 수행 중인 프로세스만 표시합니다.
  • -P: 개별 스레드가 아닌 프로세스를 표시합니다.

출력을 검토하고 IO_READIO_WRITE 열에 주의하십시오. 상단에 나열된 프로세스가 가장 많은 디스크 대역폭을 소비하고 있습니다. 일반적인 원인으로는 데이터베이스 서버(MySQL, PostgreSQL), 백업 유틸리티, 로그 회전 스크립트 또는 스왑 공간에 공격적으로 쓰는 시스템이 있습니다.

iotop 출력 해석

iotop는 각 프로세스의 총 디스크 사용량을 표시합니다. 단일 애플리케이션이 디스크 사용량을 지배하는 것을 보는 경우(예: 대기 시간 급증 중에 50MB/s로 실행되는 백업 스크립트), 즉각적인 원인을 발견한 것입니다.

3단계: pidstat로 심층 분석

iotop는 프로세스당 집계 I/O를 보여주는 반면, pidstat는 특정 PID에서 시작된 I/O 작업에 대한 자세한 기록 컨텍스트를 제공할 수 있어 장기 실행 또는 간헐적인 문제에 유용합니다.

5초마다 5번 반복하여 모든 프로세스에 대한 I/O 통계(블록 읽기 및 쓰기)를 모니터링하려면 다음을 수행하십시오.

sudo pidstat -d 5 5

-d 출력의 주요 메트릭은 다음과 같습니다.

  • kB_rd/s: 태스크가 초당 디스크에서 읽은 데이터 양입니다.
  • kB_wr/s: 태스크가 초당 디스크에 쓴 데이터 양입니다.
  • kB_ccwr/s: 스왑 공간에 쓴 데이터 양(c=취소됨/커밋된 쓰기)입니다.

kB_ccwr/s가 지속적으로 높으면 시스템이 스레싱 중임을 의미합니다. 즉, RAM이 부족하여 느린 실제 디스크를 가상 RAM으로 사용하고 있으며, 이는 직접적으로 높은 대기 시간으로 이어집니다.

4단계: 메모리 스레싱(스왑 사용량) 진단

시스템이 느린 실제 디스크를 가상 RAM으로 사용해야 하므로 높은 스왑 활동은 종종 높은 디스크 I/O 대기 시간으로 나타납니다. free 명령을 사용하여 메모리 압력을 확인하십시오.

free -h

used 메모리가 total 메모리에 가깝고 swap used 값이 빠르게 증가하는 경우 시스템은 메모리 부족 상태이며 I/O 대기 시간은 스와핑의 부차적인 증상입니다.

스레싱 해결 방법:
1. top 또는 htop를 사용하여 메모리 소모가 많은 프로세스를 식별합니다.
2. 가능한 경우 시스템 RAM을 늘립니다.
3. 애플리케이션이 메모리를 덜 사용하도록 조정합니다.

일반적인 원인 및 완화 전략

출처가 식별되면 적절한 수정 사항을 적용하십시오.

1. 예정되지 않은 백업 또는 유지 관리

증상: 예약된 작업(예: cron 작업)과 일치하는 높은 I/O 사용률.
완화: 대규모 I/O 작업(데이터베이스 덤프 또는 대용량 파일 전송과 같은)을 비활성 시간으로 재예약하거나 유틸리티가 지원하는 경우 속도를 제한하십시오.

2. 비효율적인 데이터베이스 쿼리

증상: 데이터베이스 프로세스(예: mysqld)가 iotop에서 가장 많이 소비합니다.
완화: 전체 테이블 스캔을 강제하여 대규모 임의 읽기를 유발하는 인덱스가 잘못된 쿼리를 최적화하십시오.

3. 과도한 로깅

증상: 애플리케이션 또는 시스템 로깅 프로세스가 막대한 양의 데이터를 쓰고 있습니다.
완화: 애플리케이션 로깅 수준을 검토하십시오. 로그를 버퍼링하거나 로컬 디스크 쓰기를 줄이기 위해 원격 로깅 솔루션(Syslog 또는 ELK 스택과 같은)을 사용하는 것을 고려하십시오.

4. 디스크 실패 또는 잘못된 구성

증상: 높은 처리량과 상관 관계가 없는 매우 높은 await 시간 또는 이상한 읽기/쓰기 패턴. 이는 하드웨어 오류 또는 잘못된 RAID 구성을 나타낼 수 있습니다.
완화: 디스크 상태 확인(smartctl)을 위해 SMART 데이터를 확인하십시오. RAID를 사용하는 경우 배열 상태를 확인하십시오.

사전 예방적 모니터링을 위한 모범 사례

I/O 병목 현상을 사후에 해결하는 것보다 예방하는 것이 좋습니다. 지속적인 모니터링을 구현하십시오.

  • 경고 설정: 평균 디스크 await 시간이 임계값(예: 50ms)을 초과하거나 %util이 몇 분 동안 90% 이상을 유지할 때 경고하도록 모니터링 도구(Prometheus/Grafana, Nagios와 같은)를 구성합니다.
  • 기준 성능: 특정 워크로드에 대한 "정상" I/O 대기 시간이 어떤 모습인지 파악합니다. 이렇게 하면 이상 징후를 더 쉽게 발견할 수 있습니다.
  • 워크로드 유형 이해: 임의 I/O 패턴(데이터베이스에서 일반적)은 순차 I/O(미디어 스트리밍 또는 대용량 파일 읽기에서 일반적)보다 훨씬 높은 대기 시간을 유발합니다.

iostat와 같은 도구를 체계적으로 사용하여 시스템 전체 성능을 측정하고 iotop/pidstat를 사용하여 특정 문제를 정확히 파악하면 시스템 관리자는 디스크 성능을 신속하게 복원하고 I/O 관련 대기 시간 문제를 제거할 수 있습니다.