CPU 상태와 Disk device의 input/output 통계 정보를 확인할 수 있는 명령어
iostat 명령어는 시스템에 로드된 device에 대한 활동 정보(평균 I/O 전송율, 큐잉시간, 서비스타임등)를 device별로 확인할 수 있음
각, device에 대한 활동 정보를 검토함으로써 특정 device의 지연현상을 감지하고 적절한 대처(옵션변경,구성변경등)를 통해 성능 및 안정성을 확보할 수 있음
- Usage
. 일반적인 명령어 실행 방식
. iostat [옵션] [수행 interval] [수행 횟수]
. 주요 옵션
. -c : display CPU utilization
. -d : display disk utilization
. -k : use kilobites instead of(512-byte) blocks
. -m : use megabytes instead of(512-byte) blocks
. -p : include per-partition statistics
. -t : timestamp output
. -x : extended statistics
. -z : skip displaying zero-activity summaries
. 주요 사용 옵션 조합
. iostat -xkdzt -p ALL 3
. 설명 : 3초 간격 정보를 출력하며 KB 단위(-k)로 disk의 상태(-d)를 출력함
출력 시 timestamp를 추가(-t)하며, 확장된 정보(-x)도 같이 출력함
idle disk에 대한 출력은 제거(-z)하고 파티션되어 있는 disk는 모두 출력(-p ALL)하게 됨
- Output
. 출력은 CPU와 Disk로 두가지로 나누어짐
. 여기서는 Disk에 대한 출력 정보에 대해 다루기로 함
. 출력 정보
. Device : Device(Partition) 명
* Partition은 hard disk를 하나이상의 logical disk 나눈것임 (lsblk 명령으로 확인)
. tps : 해당 Device에 전송된 초당 request transfer임. transfer의 size는 알 수 없음
. Blk_read/s (KB_read/s, MB_read/s) : 해당 Device를 통해 읽어들인 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
* sector : disk 상의 하나의 block임. 전통적으로 512byte의 크기임
. Blk_wrtn/s (KB_wrtn/s, MB_wrtn/s) : 해당 Device를 통해 기록한 초당 block 수 (block은 sector와 동일함. 따라서 1block은 512byte임)
. Blk_read (KB_read, MB_read) : 해당 Device를 통해 읽어들인 전체 block 수
. Blk_wrtn (KB_wrtn, MB_wrtn) : 해당 Device를 통해 기록한 전체 block 수
. rrqm/s : 해당 Device에 초당 큐잉된 Merged read request 수 (그림 9.8 참고)
. wrqm/s : 해당 Device에 초당 큐잉된 Merged write request 수 (그림 9.8 참고)
. r/s : 해당 Device에 Merge후 초당 완료된 read request 수
. w/s : 해당 Device에 Merge후 초당 완료된 write request 수
. rsec/s (rKB/s, rMB/s) : 해당 Device로 부터 read한 sector(KB,MB) 수
. wsec/s (wKB/s, wMB/s) : 해당 Device로 부터 write한 sector(KB,MB) 수
. avgrq-sz : 해당 Device에 발생된 request의 평균 size(sector 기준)
. avgqu-sz : 해당 Device에 발생된 request들의 queue의 평균 length
. await : 해당 Device에 발생된 I/O request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
. r_await : 해당 Devive에 발생된 read request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
. w_await : 해당 Devive에 발생된 write request의 평균 서비스 Time (milliseconds). queue 대기시간과 서비스 시간 포함임
. svctm : 해당 Device에 발생된 I/O request의 서비스 Time (milliseconds). Do not trust this field any more. This field will be removed in a future sysstat version.
. %util : 해당 Device에 발생된 I/O request의 bandwidth utilization. serial request의 경우 100%에 근접할 경우 Device saturation이 발생함. parallel일 경우 (RAID, SSD등)는 해당 수치가 성능 한계를 반영하지는 않음
iostat 명령어를 통해 avgrq-sz,avgqu-sz,await,%util의 컬럼 정보를 분석을 통해 현재 device의 I/O 상태를 확인
위이 사례는 단순히 disk I/O를 발생시키는 명령어를 찾아서 조치하는 방법이나, 현실에서는 실제 I/O 증가로 인해 병목이 발생할 수 있으며,
이를 해결하기 위해서는 다음과 같은 방법들을 적용해야할 필요가 있음
1) Application Level에서의 불필요한 disk I/O가 발생하는지 점검 (log level등)
2) OS에서 제공하는 파라미터 튜닝을 통한 개선 (Disk Queuing Algorithm 변경)
3) Disk 분산을 통한 I/O bandwidth 개선
. 1)번이 가장 선행되어야할 분석 작업임
. 2)의 경우 linux에서는 Noop,Deadline,Anticipatory,CFQ 등이 있으며, write로 인한 read 지연을 어느정도 개선할 수 있음
. 3)의 경우 I/O가 편중되는 FileSystem에 대해 volume을 물리적인 여러 Disk로 분산할 수 있도록 재구성하는 방법(증설,재구성)이며, Disk I/O 개선을 위한 현실적인 방안임
출처 : https://m.blog.naver.com/PostView.nhn?blogId=bumsukoh&logNo=221022044759
iostat [-V][-k][-t][-x][delay [count]]
-k : 단위를 KB로 출력, 기본은 블록(512byte)
-t : 결과 맨 앞에 시간을 출력
-x : 보다 상세하게 정보를 출력
delay [count]: 출력 주기와 횟수를 지정함, 디폴트 1회
output
tps: 초당 입출력 작업 건수. tps가 높다는 것ㅎ은 CPU가 busy라는 의미임
Blk_read/s: 초당 읽어들인 블록(512바이트) 수, KB_read/s(KB단위)
Blk_wrtn/s: 초당 쓰여진 블록(512바이트) 수, KB_wrtn/s(KB단위)
Blk_read: 지금까 읽어들인 블록(512바이트) 수, KB_read/s(KB단위)
Blk_wrtn: 지금까지 쓰여진 블록(512바이트) 수, KB_wrtn/s(KB단위)
rrqm/s: 디바이스 큐에 대기중인 초당 읽기 요청의 건수
wrqm/s: 디바이스 큐에 대기중인 초당 쓰 요청의 건수
r/s: 디바이스 요청한 초당 읽기 요청의 건수
w/s: 디바이스 요청한 초당 쓰기 요청의 건수
rsec/s: 디바이스 요청한 초당 읽기 섹터의 건수
wsec/s: 디바이스 요청한 초당 쓰기 섹터의 건수
avgrq-sz : 디바이스 요청한 초당 평균 데이터의 크기
avgqu-sz : 디바이스 요청한 초당 평균 큐 길이
await: 디바이스에서 처리되기 위해서 요청된 I/O 평균 시간(밀리초, 1/1000초), 큐에서 소용된 시간과 처리된 시간이 합쳐져 출려됨.
svctm: 디바이스에서 처리한 I/O 평균 시간 (밀리초, 1/10000초)
%util : 디바이스에서 요청한 I/O 작업을 수행하기 위해 사용한 CPU 시간 비율, 이 값이 100%에 가까워지면 디바이스가 한계에 도달했다고 보면 됨.
'Server > Linux' 카테고리의 다른 글
외부에서 로컬 서버에 접속하는 방법 (ngrok, localtunnel, localhost.run) (0) | 2021.05.13 |
---|---|
SSL 인증서 만료일 확인 (0) | 2019.07.11 |
리눅스 서버 상태 파악하기 (0) | 2019.06.14 |
리눅스 E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem (0) | 2018.11.06 |
리눅스 기본명령어, 압축 (0) | 2012.06.29 |