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 페이지를 참고하도록 하자.
댓글