Ubuntu 22.04에서 디스크 I/O 사용량이 높은 프로세스를 확인하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

오늘은 Ubuntu 22.04에서 디스크 I/O 사용량이 높은 프로세스를 확인하는 방법을 알아보겠습니다. 서버 응답이 갑자기 느려지거나 데이터베이스·웹 서비스의 처리 시간이 길어졌을 때 CPU와 메모리 사용률은 높지 않은데 디스크가 계속 바쁘다면 어떤 프로세스가 실제로 읽기·쓰기를 발생시키는지 확인해야 합니다.

이 문서에서는 먼저 iostat으로 디스크 장치 자체가 병목인지 확인하고, iotoppidstat으로 I/O를 많이 발생시키는 프로세스를 찾은 뒤 PID와 실행 명령을 확인하는 순서로 설명합니다. 단순히 I/O 수치가 높다는 이유만으로 프로세스를 즉시 종료하지 않고, 해당 작업이 백업·데이터베이스 flush·로그 기록·swap 등 정상 작업인지 먼저 판별하는 것이 중요합니다.

적용 환경

문서 적용 기준
항목 내용
운영체제 Ubuntu 22.04 LTS
주요 도구 iostat, pidstatsysstat 패키지 / iotopiotop 패키지
필요 권한 패키지 설치 및 전체 프로세스 확인 시 sudo 권한 권장

디스크 I/O 문제를 확인하는 순서

  1. iostat으로 실제 디스크 장치의 지연과 사용량을 확인합니다.
  2. iotop으로 현재 읽기·쓰기를 발생시키는 프로세스를 실시간으로 찾습니다.
  3. pidstat -d로 일정 시간 동안 프로세스별 읽기·쓰기 속도를 기록합니다.
  4. 의심되는 PID의 실행 명령, 사용자와 서비스 정보를 확인합니다.
  5. swap, 로그 폭증, 백업, 데이터베이스 작업처럼 I/O가 발생한 실제 원인을 확인합니다.
  6. 원인을 확인한 뒤 서비스 설정 조정, 작업 시간 변경 또는 스토리지 성능 개선을 검토합니다.

I/O 확인 도구 설치

Ubuntu 22.04에서 iostatpidstatsysstat 패키지에 포함되어 있으며, iotop은 별도의 iotop 패키지로 설치할 수 있습니다.

sudo apt update
sudo apt install -y sysstat iotop

설치 후 각 명령이 정상적으로 실행되는지 확인합니다.

iostat -V
pidstat -V
iotop --version

iostat으로 디스크 장치가 실제로 바쁜지 확인

프로세스를 찾기 전에 먼저 블록 장치 자체에서 I/O 지연이 발생하고 있는지 확인합니다. 다음 명령은 1초 간격으로 확장 디스크 통계를 10회 출력하며, 활동이 없는 장치는 제외합니다.

iostat -xz 1 10

출력에서 특히 다음 값을 확인합니다.

항목 의미 확인 포인트
r/s, w/s 초당 완료된 읽기·쓰기 요청 수 평소보다 요청 수가 급증했는지 확인
rkB/s, wkB/s 초당 읽기·쓰기 데이터량 대용량 백업·로그·데이터 처리 여부 확인
await I/O 요청이 큐와 장치에서 처리되는 데 걸린 평균 시간 평상시 기준보다 지속적으로 증가하는지 확인
aqu-sz 평균 I/O 요청 큐 길이 지연 증가와 함께 큐가 계속 쌓이는지 확인
%util 장치에 I/O 요청이 존재했던 시간 비율 단독 수치보다 await, 큐 길이와 함께 해석

iotop으로 높은 I/O 프로세스 실시간 확인

iotop은 실행 중인 프로세스 또는 스레드별 디스크 읽기·쓰기 속도와 I/O 대기 정보를 실시간으로 보여줍니다. 관리자 권한으로 실행합니다.

sudo iotop

현재 실제 I/O가 발생하는 항목만 보고 싶다면 -o, 개별 스레드가 아니라 프로세스 단위로 묶어 보려면 -P를 사용합니다.

sudo iotop -oP

짧은 순간이 아니라 관찰을 시작한 이후 누적된 I/O 양을 비교하려면 -a를 추가합니다.

sudo iotop -oPa

대화형 화면을 계속 보고 있을 수 없는 경우에는 batch 모드로 일정 횟수만 수집할 수 있습니다. 다음 예시는 1초 간격으로 10회 측정합니다.

sudo iotop -boP -d 1 -n 10

간헐적으로 발생하는 문제라면 한 번의 출력보다 여러 번 측정한 결과에서 반복적으로 상위에 나타나는 프로세스를 확인하는 것이 좋습니다.

pidstat으로 프로세스별 I/O 측정

pidstat은 프로세스별 통계를 일정한 간격으로 출력하므로 기록을 남기거나 여러 시점의 값을 비교할 때 유용합니다. -d 옵션은 I/O 통계를 표시합니다.

pidstat -d 1 10

주요 출력 항목은 kB_rd/s, kB_wr/s, kB_ccwr/s, iodelay, PID, Command입니다. 특정 PID만 관찰하려면 아래처럼 지정합니다. 1234는 실제 PID로 변경하십시오.

pidstat -d -p 1234 1 10

의심되는 프로세스 상세 확인

I/O가 높은 PID를 찾았다면 실제 실행 명령과 부모 프로세스, 실행 사용자부터 확인합니다.

ps -p 1234 -o pid,ppid,user,stat,etime,cmd
sudo readlink -f /proc/1234/exe
sudo cat /proc/1234/io

/proc/PID/io의 값은 특정 순간의 초당 속도가 아니라 프로세스 실행 중 누적된 I/O 관련 카운터입니다. 순간적인 부하 비교에는 iotop이나 pidstat을 사용하십시오.

swap과 메모리 압박으로 인한 I/O 확인

특정 애플리케이션이 대량 파일 작업을 하지 않는데도 디스크 I/O와 시스템 지연이 지속된다면 메모리 부족으로 swap I/O가 발생하는지 확인합니다.

free -h
swapon --show
vmstat 1 10

vmstatsiso가 지속적으로 발생하면서 I/O 대기와 서비스 지연이 함께 나타난다면 메모리 압박에 따른 swap 사용을 의심할 수 있습니다.

ps aux --sort=-%mem | head -n 15

상황별 원인과 해결 방향

디스크 I/O 문제 진단표
관찰 결과 가능한 원인 확인 방법 해결 방향
iotop에서 특정 프로세스 쓰기가 지속적으로 높음 로그 폭증, DB flush, 백업, 파일 변환 PID, 서비스 로그, 작업 스케줄 원인 작업의 주기·동시성·로그 정책 조정
await와 큐가 지속적으로 증가 스토리지 처리량 부족 또는 지연 iostat -xz, 호스트·스토리지 상태 I/O 감소, 작업 분산, 스토리지 성능 검토
짧은 시간만 I/O 급증 Cron, systemd timer, 백업, 로그 회전 pidstat 반복 측정, 작업 스케줄 피크 시간 분산 또는 동시 실행 조정
vmstatsi/so가 지속 발생 메모리 부족으로 인한 swap I/O free -h, 메모리 상위 프로세스 메모리 사용 원인 수정, RAM·애플리케이션 설정 검토
iotop에 원인 프로세스가 잘 보이지 않음 짧은 작업, 커널 I/O, 가상화 계층 영향 pidstat, iostat, 반복 수집 수집 시간을 늘리고 호스트·스토리지 계층 점검

가상서버에서는 게스트 프로세스가 원인이 아닐 수도 있습니다

VPS나 가상머신에서는 게스트 OS의 iotop에서 높은 I/O를 발생시키는 프로세스가 보이지 않는데도 디스크 지연이 발생할 수 있습니다. 호스트 스토리지 혼잡이나 공유 스토리지 지연은 게스트 안의 프로세스 통계만으로 완전히 설명되지 않을 수 있으므로 iostat 결과와 문제 발생 시간을 함께 기록해 두는 것이 좋습니다.

조치 후 디스크 I/O 다시 확인

원인 프로세스의 작업 주기를 조정하거나 애플리케이션 설정을 변경했다면 같은 조건에서 다시 측정해 개선 여부를 확인합니다.

iostat -xz 1 10
pidstat -d 1 10
sudo iotop -oP

조치 전후의 await, 큐 길이, 프로세스별 읽기·쓰기 속도와 실제 서비스 응답 시간을 함께 비교해야 효과를 정확히 판단할 수 있습니다.

관련 지구 IDC 기술자료

공식 참고자료

기관 문서 확인 내용 조회일
Ubuntu Manpages iotop(8) — Ubuntu 22.04 프로세스별 I/O, -o, -P, -a, batch 옵션
Ubuntu Manpages iostat(1) — Ubuntu 22.04 장치별 I/O 통계, 지연, 큐와 %util 해석
Ubuntu Packages sysstat package — Jammy Ubuntu 22.04의 sysstat 패키지 제공 여부
Ubuntu Packages iotop package — Jammy Ubuntu 22.04의 iotop 패키지 제공 여부
Ubuntu Project List of releases Ubuntu 22.04 LTS 지원 상태

자주 묻는 질문

iotop과 iostat의 차이는 무엇인가요?

iostat은 디스크·블록 장치 전체의 처리량, 지연, 큐와 사용 상태를 확인하는 도구이고 iotop은 그 I/O를 발생시키는 프로세스나 스레드를 찾는 데 적합합니다.

%util이 100%이면 디스크가 무조건 포화 상태인가요?

아닙니다. RAID와 현대적인 SSD처럼 병렬 요청을 처리할 수 있는 스토리지에서는 %util만으로 처리 한계를 단정할 수 없습니다. await, 큐 길이와 실제 응답 시간을 함께 확인해야 합니다.

I/O가 높은 프로세스를 바로 종료해도 되나요?

권장하지 않습니다. 먼저 PID의 실행 명령과 서비스, 로그를 확인하고 해당 I/O가 정상적인 백업·데이터베이스 작업인지 판별해야 합니다. 종료가 필요한 경우에도 애플리케이션 또는 systemd의 정상 종료 절차를 우선 사용하십시오.

sysstat 서비스를 활성화해야 pidstat과 iostat을 사용할 수 있나요?

현재 상태를 실시간 측정하는 pidstatiostat은 패키지만 설치하면 사용할 수 있습니다. 과거 시간대의 성능 기록을 지속적으로 저장하려는 경우에는 sysstat 수집 기능을 별도로 구성합니다.

마무리

오늘은 Ubuntu 22.04에서 디스크 I/O 사용량이 높은 프로세스를 확인하는 방법을 살펴봤습니다. 먼저 iostat -xz으로 실제 장치 지연을 확인하고, iotoppidstat -d로 읽기·쓰기를 많이 발생시키는 PID를 찾으면 원인을 빠르게 좁힐 수 있습니다.

디스크 I/O 문제는 단순한 프로세스 과부하뿐 아니라 swap, 백업 작업, 로그 폭증, 데이터베이스 flush, 가상화 스토리지 지연 등 다양한 원인으로 발생할 수 있습니다. 프로세스를 강제로 종료하기 전에 서비스 역할과 작업 내용을 반드시 확인하시기 바랍니다.

오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.

  • 0 Users Found This Useful
Was this answer helpful?
« Back