본문 바로가기
Old Posts/Linux

[Linux] sar 명령어 사용법 - 디스크 IO 모니터링

by A6K 2022. 6. 5.

sar 명령어는 System Activity Report의 약자로 시스템의 CPU, 메모리, 입출력 사용량 정보를 수집하고 리포팅하는 명령어다.

시스템의 리소스 사용 이력을 모니터링하고 파일에 저장한 후 리포팅 할 때 많이 사용한다.

sar 설치

sar는 sysstat 패키지를 통해 설치할 수 있다. sysstat 패키지에는 sar를 비롯해 iostat, pidstat, mpstat 명령어가 포함되어 있다.

$ sudo apt install sysstat
$ sudo yum install sysstat

sar 명령어 사용법

sar 명령어는 다음과 같은 문법으로 사용한다

$ sar [옵션] [인터벌] [횟수]

인터벌과 횟수 정보를 입력하지 않으면 시스템에서 기본적으로 수집하고 있는 지표를 보여준다.

$ sar
...
04:10:00 PM       tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
04:11:00 PM     12.00      0.00     12.00      0.00      0.00    176.00      0.00
04:12:00 PM     25.00     21.00      3.00      0.00   1272.00     80.00      0.00
04:13:00 PM      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:14:00 PM     63.00      0.00     63.00      0.00      0.00    548.00      0.00
04:15:00 PM      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:16:00 PM     22.00      0.00     22.00      0.00      0.00    192.00      0.00
04:17:00 PM      1.00      0.00      1.00      0.00      0.00      8.00      0.00
04:18:00 PM      4.00      0.00      4.00      0.00      0.00    112.00      0.00

이 지표들은 /var/log/sa/sa* 파일로 저장이 되며, 날짜 값이 suffix로 저장된다. 지표들의 수집 주기는 /etc/cron.d/sysstat 파일에서 설정할 수 있다. 이 파일을 열어보면

# Run system activity accounting tool every 1 minutes
* * * * * root /usr/lib64/sa/sa1 1 1

이런 정보들이 적혀있다. crontab에서 작업을 설정할 때 사용하는 방법과 동일하다. 이 파일을 수정하면 즉시 반영된다.

sar 명령어 뒤쪽에 인터벌과 횟수 정보를 입력하면 실시간으로 지표를 수집해서 출력해준다.

CPU 사용률 조회

sar 명령을 단독으로 실행하면 -u 옵션을 준 것과 같이 CPU 사용률에 대한 정보를 출력한다.

$ sar -u 2 5
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

~~~~05:15:53 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:15:55 PM     all     14.44      0.00      1.59      0.00      0.00     83.97
05:15:57 PM     all     15.71      0.00      1.70      0.00      0.00     82.59
05:15:59 PM     all     15.28      0.00      1.54      0.00      0.00     83.18
05:16:01 PM     all     17.74      0.00      4.71      0.00      0.00     77.55
05:16:03 PM     all     12.44      0.00      1.47      0.00      0.00     86.09
Average:        all     15.12      0.00      2.20      0.00      0.00     82.68

%user : 사용자모드에서 CPU가 사용된 시간의 비율
%nice : nice로 스케줄링의 우선순위를 변경한 프로세스가 사용자 모드에서 CPU를 사용한 시간 비율
%system : 시스템 모드에서 CPU가 사용된 시간의 비율
%iowait : CPU가 디스크 입출력 대기를 위해 기다린 시간 비율
%steal : OS 가상화를 이용하고 있을 경우, 다른 가상 CPU의 계산으로 대기된 시간 비율
%idle : CPU가 사용되지 않고 유휴상태로 소비한 시간 비율

Load Average 확인

$ sar -q 2 5
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

18시 25분 16초   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
18시 25분 18초         1      3043      1.26      1.31      1.32         0
18시 25분 20초         1      2984      1.26      1.31      1.32         0
18시 25분 22초         2      2984      1.32      1.32      1.32         0
18시 25분 24초         1      2985      1.32      1.32      1.32         0
18시 25분 26초         1      2983      1.32      1.32      1.32         0
평균값:                1      2996      1.30      1.32      1.32         0

runq-sz : 실행큐에 쌓여있는 프로세스 수
plist-sz : 시스템상의 프로세스 사이즈
ldavg-* : 1분, 5분, 15분 사이의 Load Average 값
blocked : 현재 처리되고 있는 입출력 작업의 숫자

메모리 사용 정보 조회

-r 옵션을 이용하면 메모리 사용량 정보를 출력할 수 있다.

$ sar -r 2 5
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

17시 23분 43초 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
17시 23분 45초   6687220 124291432     94.89      2560  82964420  27708400     21.15  55207860  37546112       268
17시 23분 47초   6697680 124280972     94.89      2560  82964424  27696528     21.15  55196016  37545612       308
17시 23분 49초   6697276 124281376     94.89      2560  82964428  27697420     21.15  55196568  37545612       296
17시 23분 51초   6685528 124293124     94.90      2560  82964428  27710120     21.16  55208768  37546124       292
17시 23분 53초   6697084 124281568     94.89      2560  82964428  27697408     21.15  55197464  37546124       292
평균값:          6692958 124285694     94.89      2560  82964426  27701975     21.15  55201335  37545917       291

kbmemfree : 물리 메모리 중 남은 용량
kbmemused : 물리 메모리 중 사용한 용량
%memused : 물리 메모리 사용률
kbbuffers : 버퍼 캐시로 사용되고 있는 물리 메모리의 용량
kbcached : 페이지 캐시로 사용되고 있는 물리 메모리의 용량
kbcommit : 현재 시스템에 할당된 메모리의 크기
%commit : kbcommit의 점유 백분율
kbactive : 사용 중인 메모리에서 최근 사용된 메모리 정보
kbinact : 사용 중인 메모리 중 최근에 사용되지 않은 영역의 크기
kbdirty : 디스크에 쓰여지기 위해 대기중인 메모리의 크기

스왑 발생 정보 조회

-W 옵션을 이용하면 스왑 메모리에 대한 정보를 수집할 수 있다.

$ sar -W 2 5
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

18시 24분 08초  pswpin/s pswpout/s
18시 24분 10초      0.00      0.00
18시 24분 12초      0.00      0.00
18시 24분 14초      0.00      0.00
18시 24분 16초      0.00      0.00
18시 24분 18초      0.00      0.00
평균값:             0.00      0.00

pswpin/s : 1초동안 스왑인(swap-in)되고 있는 페이지의 수
pswpout/s : 1초동안 스왑아웃(swap-out)되고 있는 페이지의 수

디스크 사용 정보 조회

-d 옵션을 이용하면 블록 디바이스에 대한 정보를 수집할 수 있다.

$ sar -d 2 5
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

17시 24분 52초       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17시 24분 54초       sda      7.00      0.00     72.00     10.29      0.00      0.00      0.00      0.00

17시 24분 54초       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17시 24분 56초       sda     33.50      0.00    432.00     12.90      0.00      0.00      0.00      0.00

17시 24분 56초       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17시 24분 58초       sda    133.00      0.00   1744.00     13.11      0.02      0.19      0.01      0.10

17시 24분 58초       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17시 25분 00초       sda     22.50      0.00    188.00      8.36      0.00      0.00      0.00      0.00

17시 25분 00초       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
17시 25분 02초       sda     61.00      0.00    492.00      8.07      0.00      0.01      0.01      0.05

평균값:              DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
평균값:              sda     51.40      0.00    585.60     11.39      0.01      0.10      0.01      0.03

네트워크 사용 정보 조회

-n 옵션을 사용하면 네트워크 사용량 정보를 출력할 수 있다.

$ sar -n {키워드}

키워드 부분에 ALL을 사용하면 모든 네트워크 정보를 출력하게 된다. ALL 대신 특정 정보를 의미하는 다음 키워드들을 써넣을 수 있다.

키워드 : DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6&UDP6

지표를 파일로 저장

-o 옵션을 사용하면 수집된 정보를 -o 옵션으로 입력받은 파일에 바이너리 포맷으로 기록해둔다. 이후 -f 옵션으로 바이너리 파일 경로를 입력하면 정보를 해석해서 화면에 뿌려준다.

$ sar -o out 2 5 > /dev/null 2>&1
$ sar -f out 
Linux 2.6.32-754.11.1.el6.x86_64 (myhost)   06/01/2022      _x86_64_        (40 CPU)

17시 22분 08초     CPU     %user     %nice   %system   %iowait    %steal     %idle
17시 22분 10초     all      2.69      0.00      0.04      0.00      0.00     97.27
17시 22분 12초     all      2.69      0.00      0.11      0.00      0.00     97.20
17시 22분 14초     all      3.46      0.00      0.25      0.00      0.00     96.29
17시 22분 16초     all      3.99      0.00      0.38      0.00      0.00     95.64
17시 22분 18초     all      2.71      0.00      0.14      0.00      0.00     97.15
17시 22분 41초     all      3.59      0.00      0.38      0.00      0.00     96.02
17시 22분 43초     all      2.65      0.00      0.09      0.00      0.00     97.26
17시 22분 45초     all      3.20      0.00      0.21      0.00      0.00     96.59
17시 22분 47초     all      7.61      0.00      1.38      0.00      0.00     91.02
17시 22분 49초     all      5.13      0.00      0.73      0.00      0.00     94.14
17시 22분 51초     all      2.84      0.00      0.16      0.00      0.00     97.00
평균값:            all      3.64      0.00      0.37      0.00      0.00     95.99

이 밖에 다양한 옵션들이 제공된다. 각 옵션에 대한 정보는 man 페이지를 참고하도록 하자.

댓글