| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 권한상승
- remove
- 스트림에디터
- uname
- 디스크
- Linux
- nohup
- pkill
- disown
- os-release
- printworkingdirectory
- iostat
- 커널패닉
- 텍스트
- vmstat
- 모니터링
- 심볼릭링크
- Tux
- sed
- 명령어
- bg
- command
- su
- 턱스
- 코드블럭
- 하드링크
- mkdir
- CodeBlock
- IT
- 리눅스
- Today
- Total
Snow flake
[command] iostat, vmstat 명령어 본문
top으로 CPU/메모리 전반을, netstat/ss로 네트워크를 확인했다면, 디스크 I/O 병목이 의심될 때는 iostat과 vmstat을 사용합니다. nohup으로 돌려둔 배치나 데이터펌프 작업이 유독 느릴 때, CPU는 멀쩡한데 디스크에서 막히고 있는 건 아닌지 확인하는 용도로 자주 쓰입니다.
iostat이란
iostat은 Input/Output Statistics의 약자로, 디스크 장치별 입출력 상태를 보여주는 명령어입니다. sysstat이라는 패키지에 포함되어 있어서, 설치되어 있지 않다면 별도로 설치가 필요할 수 있습니다.
# 설치가 안 되어 있는 경우 (배포판에 따라 다름)
yum install sysstat # RHEL/CentOS 계열
apt install sysstat # Ubuntu/Debian 계열
# 사용법
iostat [옵션] [간격] [횟수]
# 기본 실행 (부팅 이후 누적 통계 한 번 출력)
iostat
iostat 기본 출력 읽는 법
# 결과 예시
avg-cpu: %user %nice %system %iowait %steal %idle
3.20 0.00 1.10 0.20 0.00 95.50
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 12.50 340.20 210.50 5024000 3108000
sdb 3.10 50.10 80.30 740000 1186000
%iowait는 CPU가 디스크 입출력을 기다리느라 놀고 있는 시간의 비율입니다. 이 값이 지속적으로 높다면 CPU 자체의 문제가 아니라 디스크가 병목이라는 신호입니다. tps(transfers per second)는 초당 디스크 입출력 요청 횟수, kB_read/s와 kB_wrtn/s는 초당 읽기/쓰기 처리량을 의미합니다.
iostat 반복 실행하기
기본 실행은 시스템이 부팅된 이후의 누적 평균을 보여주기 때문에, 현재 상황을 파악하기엔 부적합할 때가 많습니다. 간격과 횟수를 지정하면 top처럼 일정 주기로 갱신되는 값을 볼 수 있습니다.
# 2초 간격으로 5번 반복 출력
iostat 2 5
# 사람이 읽기 쉬운 단위(MB)로 변환해서 표시
iostat -m 2 5
# 확장 통계(대기 시간, 큐 길이 등)까지 표시
iostat -x 2 5
iostat 2 5처럼 실행하면, 첫 번째 출력은 부팅 이후 누적 평균이고 두 번째 출력부터는 실제로 최근 2초간의 변화만 반영된 값이 나옵니다. 그래서 실무에서는 첫 번째 출력은 무시하고 두 번째 출력부터 참고하는 경우가 많습니다.
vmstat이란
vmstat은 Virtual Memory Statistics의 약자로, 이름은 메모리 통계처럼 보이지만 실제로는 CPU, 메모리, 스왑, 디스크 입출력을 한 화면에 종합적으로 보여주는 명령어입니다.
# 사용법
vmstat [간격] [횟수]
# 2초 간격으로 5번 반복 출력
vmstat 2 5
# 결과 예시
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2048576 102400 4200000 0 0 45 80 120 340 4 1 95 0 0
vmstat 컬럼 읽는 법
컬럼이 많아 보이지만, 실무에서는 몇 가지 핵심 컬럼만 눈여겨보면 됩니다.
-- r: 실행 대기 중인 프로세스 수. CPU 코어 수보다 지속적으로 크면 CPU 부족 신호
-- b: 자원(디스크 I/O 등)을 기다리며 블록된 프로세스 수
-- swpd: 사용 중인 스왑 메모리 용량. 이 값이 계속 늘어나면 물리 메모리 부족 신호
-- si/so: 스왑 인/아웃 속도. 0이 아닌 값이 계속 나온다면 메모리 부족이 심각하다는 뜻
-- bi/bo: 초당 블록 입력/출력(디스크 읽기/쓰기)
-- wa: top 글에서 다뤘던 것과 동일한 I/O 대기 시간
특히 si, so(스왑 인/아웃) 값이 계속 0보다 크게 나온다면 심각한 신호입니다. 스왑은 물리 메모리가 부족할 때 디스크를 메모리처럼 사용하는 기능인데, 디스크는 메모리보다 훨씬 느리기 때문에 스왑이 활발하게 일어나고 있다는 건 시스템이 매우 느려지고 있다는 뜻입니다.
iostat과 vmstat, 언제 뭘 써야 할까
디스크 장치별로 세밀하게 I/O 상태를 보고 싶을 때 → iostat (여러 디스크가 있을 때 어떤 디스크가 문제인지 구분 가능)
CPU, 메모리, 스왑, 디스크를 한 화면에서 종합적으로 훑어보고 싶을 때 → vmstat (전체적인 감을 빠르게 잡기 좋음)
장애 초기에는 vmstat으로 전체적인 그림을 먼저 파악하고, 디스크 쪽이 의심되면 iostat으로 더 구체적인 디스크별 수치를 확인하는 순서로 접근하는 경우가 많습니다.
실무에서 자주 마주치는 상황
nohup으로 백그라운드에 돌려둔 배치 작업이 평소보다 느리게 끝날 때, 원인을 찾는 흐름은 다음과 같습니다.
# 1단계: 전체적인 시스템 상태를 vmstat으로 훑어보기
vmstat 2 5
# 결과에서 wa(I/O 대기) 값이 높고, b(블록된 프로세스)가 계속 존재하는 것을 확인했다고 가정
# 2단계: 어떤 디스크 장치가 병목인지 iostat으로 세부 확인
iostat -x 2 5
# 결과에서 특정 디스크(sdb)의 await(대기 시간)가 유독 높은 것을 확인
# 3단계: 해당 디스크를 쓰는 프로세스가 무엇인지 ps/top으로 교차 확인
ps -ef | grep expdp
# 4단계: 디스크 병목이 확인되면, 배치 시간대를 조정하거나 디스크 증설 등 후속 조치 검토
"배치가 느려졌다"는 이유만으로는 원인이 CPU인지, 메모리인지, 디스크인지 알 수 없습니다. vmstat으로 큰 그림을 먼저 잡고, iostat으로 디스크 쪽을 세밀하게 파고드는 이 흐름은 성능 저하 문제를 진단할 때 표준적으로 쓰이는 접근 방식입니다.
'Programming > Linux' 카테고리의 다른 글
| [command] whoami, hostname, uname 명령어 (0) | 2026.09.27 |
|---|---|
| [command] date, cal 명령어 (0) | 2026.09.26 |
| [command] wc, head, tail 명령어 (0) | 2026.09.23 |
| [command] netstat, ss 명령어 (0) | 2026.09.22 |
| [command] top 명령어 (0) | 2026.09.21 |
