본문 바로가기
DBMS/기타

LINUX 디스크 I/O 모니터링 iostat

by 드바 2023. 7. 24.

iostat 명령은 CPU의 상태와 디스크 입출력에 대한 정보를 모니터링 합니다.

 

-- 2초마다 현재시간과 disk io 모니터링

[root@svr1 ~]# iostat -x -t 2
Linux 4.1.12-112.16.4.el7uek.x86_64 (svr1) 	07/24/2023 	_x86_64_	(2 CPU)

07/24/2023 10:47:18 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.62    0.04    1.46    0.02    0.00   92.86

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.01     0.00    5.36    1.61    84.12    19.97    29.85     0.00    0.18    0.21    0.08   0.15   0.10
sda               0.14     0.54    1.38   10.53   300.16   289.81    99.09     0.02    1.83    2.22    1.78   0.46   0.55
dm-0              0.00     0.00    1.50   10.31   300.06   288.84    99.77     0.02    2.11    2.58    2.04   0.46   0.55
dm-1              0.00     0.00    0.01    0.24     0.05     0.96     8.07     0.01   21.91    0.38   22.81   0.14   0.00

07/24/2023 10:47:20 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.92    0.00    2.10    0.00    0.00   88.98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    4.00    1.00    64.00    10.00    29.60     0.00    0.20    0.25    0.00   0.20   0.10
sda               0.00     0.00    0.00    4.00     0.00    20.00    10.00     0.01    1.25    0.00    1.25   1.25   0.50
dm-0              0.00     0.00    0.00    4.00     0.00    20.00    10.00     0.01    1.25    0.00    1.25   1.25   0.50
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

 

CPU 관련 정보

  설명
%user Application 같은 user level에서의 CPU 사용량
%nice Nice 우선순위를 갖는 Application (user level)의 CPU 사용량
%system Kernel 같은 System level에서의 CPU 사용량
%iowait 미해결 I/O 작업이 완료되기를 기다리는 동안 CPU가 소비한 시간. I/O 완료를 기다리는 시간.

해당 CPU가 IDLE 상태(즉, 작업을 실행하지 않음)이고 해당 CPU에 예약된 작업에서 요청한 미해결 디스크 I/O 작업이 최소한 하나 있었던 시간 ( 해당 I/O 요청을 생성할 때).

참조 : https://veithen.io/2013/11/18/iowait-linux.html
%steal 하이퍼바이저가 다른 가상 프로세서에 서비스를 제공하는 동안 가상 CPU가 비자발적으로 대기한 시간의 백분율
%idle CPU가 유휴 상태이고 시스템에 처리되지 않은 디스크 I/O 요청이 없는 시간의 백분율

 

디스크 입출력에 대한 정보

  설명
device /dev 디렉토리에 나열된 장치(또는 파티션)들
tps transfers per seconds. 초당 전송 (장치에 대한 IO 요청)률. 여러 논리적 요청을 장치에 대한 단일 I/O 요청으로 결합할 수 있음. 전송 크기가 불확실함.
KB_read/s 장치에서 읽은 데이터의 양을 초당 블록 수(kilobytes, megabytes)로 표시. 블록은 섹터와 동일하므로 크기가 512바이트임.
KB_wrtn/s 장치에 기록된 데이터의 양을 초당 블록 수(kilobytes, megabytes)로 계산하여 표시
KB_read 읽은 총 블록 수(kilobytes, megabytes)
KB_wrtn 기록한 총 블록 수 (kilobytes, megabytes)
%util /proc/diskstats filed #10)
장치에 I/O 요청이 발행된 CPU 시간의 백분율(장치의 대역폭 사용률). 이 값이 100%에 가까울 때 장치 포화가 발생합니다.

Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.
await /proc/diskstats filed #4)
처리할 장치에 발행된 I/O 요청의 평균 시간(밀리초)입니다. 여기에는 대기열의 요청에 소요된 시간과 해당 요청을 처리하는 데 소요된 시간이 포함됩니다.

The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
avgrq-sz 장치에 발행된 요청의 평균 크기(섹터)입니다
The average size (in sectors) of the requests that were issued to the device.
avgqu-sz /proc/diskstats filed #11
장치에 발행된 요청의 평균 대기열 길이입니다.
The average queue length of the requests that were issued to the device.
반응형

옵션들

명령  
-c CPU 사용량 통계

-d 디스크 IO 통계

-g group_name ( device [...] | ALL } 장치 그룹에 대한 통계를 표시합니다. iostat 명령은 목록의 각 개별 장치에 대한 통계를 보고한 다음 group_name으로 표시되고 목록의 모든 장치로 구성된 그룹에 대한 전역 통계 행을 보고합니다. ALL 키워드는 시스템에서 정의한 모든 블록 장치가 그룹에 포함되어야 함을 의미합니다.

Display statistics for a group of devices.  The iostat 
command reports statistics for each individual device in the list then a line of global statistics for the group displayed as group_name and made up of all the devices in the list. The ALL keyword means that all the block devices defined by the system shall be included in the group.
-H 이 옵션은 -g 옵션과 함께 사용해야 하며 그룹의 개별 장치에 대한 통계가 아니라 그룹에 대한 전역 통계만 표시됨을 나타냅니다.

This option must be used with option -g and indicates that 
only global statistics for the group are to be displayed, and not statistics for individual devices in the group.
-h --human 과 동일

--human 사람이 읽을 수 있는 형식의 인쇄 크기(예: 1.0k, 1.2M 등) 이 옵션으로 표시되는 단위는 메트릭과 관련된 다른 기본 단위(예: 킬로바이트, 섹터...)를 대체합니다.

Print sizes in human readable format (e.g. 1.0k, 1.2M, 
etc.)  The units displayed with this option supersede any other default units (e.g.  kilobytes, sectors...) associated with the metrics.

-j { ID | LABEL | PATH | UUID | ... } [device [...] | ALL ] 영구 장치 이름을 표시합니다. 키워드 ID, LABEL 등은 영구 이름의 유형을 지정합니다. 이러한 키워드는 제한되지 않으며 필수 영구 이름이 있는 디렉토리가 /dev/disk에 있어야 한다는 전제 조건만 있습니다. 선택적으로 선택한 영구 이름 유형에 여러 장치를 지정할 수 있습니다. 

Display persistent device names. Keywords ID, LABEL, etc. 
specify the type of the persistent name. These keywords are not limited, only prerequisite is that directory with required persistent names is present in /dev/disk. Optionally, multiple devices can be specified in the chosen persistent name type. 
-k 초당 킬로바이트 단위로 통계를 표시합니다.
Display statistics in kilobytes per second.

-m 초당 메가바이트 단위로 통계를 표시합니다
Display statistics in megabytes per second.

-N 모든 장치 매퍼 장치에 대해 등록된 장치 매퍼 이름을 표시합니다. LVM2 통계를 보는 데 유용합니다.
Display the registered device mapper names for any device 
mapper devices.  Useful for viewing LVM2 statistics.
-o JSON 통계를 JSON(Javascript Object Notation) 형식으로 표시합니다. JSON 출력 필드 순서는 정의되지 않았으며 향후 새 필드가 추가될 수 있습니다.

Display the statistics in JSON (Javascript Object Notation) format.  JSON output field order is undefined, and new fields may be added in the future.
-p [ ( device [...] | ALL } ] 시스템에서 사용하는 블록 장치 및 모든 해당 파티션에 대한 통계를 표시합니다. 명령줄에 장치 이름을 입력하면 해당 장치와 모든 파티션에 대한 통계가 표시됩니다. 마지막으로 ALL 키워드는 사용된 적이 없는 것을 포함하여 시스템에서 정의한 모든 블록 장치 및 파티션에 대한 통계가 표시되어야 함을 나타냅니다. 이 옵션 앞에 -j 옵션이 정의되어 있으면 명령줄에 입력한 장치를 선택한 영구 이름 유형으로 지정할 수 있습니다.

Display statistics for block devices and all their partitions that are used by the system.  If a device name is entered on the command line, then statistics for it and all its partitions are displayed. Last, the ALL keyword indicates that statistics have to be displayed for all the block devices and partitions defined by the system, including those that have never been used. If option -j is defined before this option, devices entered on the command line can be specified with the chosen persistent name type.
-s 80자 너비의 화면에 맞는 짧은(좁은) 버전의 보고서를 표시합니다.
Display a short (narrow) version of the report that should fit in 80 characters wide screens.

-t 표시된 각 보고서의 시간을 인쇄합니다. 타임스탬프 형식은 S_TIME_FORMAT 환경 변수의 값에 따라 달라질 수 있습니다.
Print the time for each report displayed. The timestamp format may depend on the value of the S_TIME_FORMAT environment variable.

-V Print version number then exit.
-x 확장 통계를 표시합니다.
Display extended statistics.

-y 지정된 간격으로 여러 레코드를 표시하는 경우 시스템 부팅 이후 통계가 포함된 첫 번째 보고서를 생략합니다.
Omit first report with statistics since system boot, if displaying multiple records at given interval.
-z 샘플 기간 동안 활동이 없었던 모든 장치에 대한 출력을 생략하도록 iostat에 지시합니다.
Tell iostat to omit output for any devices for which there was no activity during the sample period.

 

연관된 환경변수

환경변수 설명
POSIXLY_CORRECT 이 변수가 설정되면 전송 속도는 기본 1K 블록 대신 512바이트 블록으로 표시됩니다.
When this variable is set, transfer rates are shown in 
512-byte blocks instead of the default 1K blocks.
S_COLOR 기본적으로 통계는 출력이 터미널에 연결될 때 컬러로 표시됩니다. 이 변수를 사용하여 설정을 변경합니다. 이 변수에 가능한 값은 never, always 또는 auto입니다(후자는 기본 설정과 동일함).

값을 표시하는 데 사용된 색상(빨간색, 노란색 또는 기타 색상)은 단순히 색상 때문에 어떤 종류의 문제도 나타내지 않습니다. 다른 값 범위만 나타냅니다.

By default statistics are displayed in color when the
 output is connected to a terminal.  Use this variable to change the settings. Possible values for this variable are never, always or auto (the latter is equivalent to the default settings).

Please note that the color (being red, yellow, or some 
other color) used to display a value is not indicative of any kind of issue simply because of the color. It only indicates different ranges of values.
S_COLOR_SGB 터미널에 통계를 표시하는 데 사용되는 색상 및 기타 속성을 지정합니다. 그 값은 H=31;1:I=32;22:M=35;1:N=34;1:Z=34;22로 기본 설정되는 기능의 콜론으로 구분된 목록입니다. 지원되는 기능은 다음과 같습니다.

  H= 75% 이상의 백분율 값에 대한 SGR(Select Graphic Rendition) 하위 문자열.
   I= 장치 이름에 대한 SGR 하위 문자열.
  M= 50% ~ 75% 범위의 백분율 값에 대한 SGR 하위 문자열.
  N= 0이 아닌 통계 값에 대한 SGR 하위 문자열.
  Z= 0 값에 대한 SGR 하위 문자열.

Specify the colors and other attributes used to display 
statistics on the terminal.  Its value is a colon- separated list of capabilities that defaults to H=31;1:I=32;22:M=35;1:N=34;1:Z=34;22.  Supported capabilities are:

 H=     SGR (Select Graphic Rendition) substring for percentage values greater than or equal to 75%.
  I=     SGR substring for device names.
 M=     SGR substring for percentage values in the range from 50% to 75%.
 N=     SGR substring for non-zero statistics values.
 Z=     SGR substring for zero values.
S_TIME_FORMAT 이 변수가 존재하고 그 값이 ISO이면 보고서 헤더의 날짜를 인쇄할 때 zcurrent 로케일이 무시됩니다. iostat 명령은 대신 ISO 8601 형식(YYYY-MM-DD)을 사용합니다. -t 옵션으로 표시되는 타임스탬프는 ISO 8601 형식도 준수합니다.

If this variable exists and its value is ISO then the 
zcurrent locale will be ignored when printing the date in the report header. The iostat command will use the ISO 8601 format (YYYY-MM-DD) instead.  The timestamp displayed with option -t will also be compliant with ISO 8601 format.

사용예

iostat : Display a single history since boot report for all CPU and Devices.

iostat -d 2 : Display a continuous device report at two second intervals.

iostat -d 2 6 : Display six reports at two second intervals for all devices.

iostat -x hda hdb 2 6 : Display six reports of extended statistics at two second intervals for devices hda and hdb.

iostat -p sda 2 6 : Display six reports at two second intervals for device sda and all its partitions (sda1, etc.)

 

iostat [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

 

참조 : https://precommer.tistory.com/3

댓글