SAR(System Activity Reporter) 명령어를 이용한 시스템 관리
=============================================================
sar 주기 몇회 ex) sar 3 5 -> 3초간격으로 5번 운영체제 활동상황 출력(많이 쓰임)
%usr -> 사용자가 쓰는 CPU부하
%sys -> 시스템이 쓰는 CPU부하
%wio -> 디스크 IO가 쓰는 CPU부하
%idle -> 놀고 있는 CPU부하
==============================================================
sysstat 웹 사이트 (http://perso.wanadoo.fr/sebastien.godard/)
sar 명령어는 solaris, unix, linux 등에서 유용하게 쓰는 프로그램이다.
sar는 redhat 7.x 이상에 기본 들어있는 sysstat 패키지에 있는 프로그램이다.
sar 프로그램은 시스템의 다양한 활동에 대하여 모니터링을 할 수 있는데 모니터링 대상이 상당히 넓은 편이다.
기본값은 CPU 활동에 대한 통계를 출력한다.
sar는 각종 활동에 대한 통계를 다른 프로그램을 이용하여 파일로 저장하고 통계치를 reporting하는 기능을 제공한다.
sar명령은 sadc에서 생성한 daily activity 화일을 읽어서 보고서를 작성하기도 하고, 시스템의 활동상황을 수집할 수도 있다.
sar에서 모니터링 가능한 항목은 다음과 같다.
- I/O 전송량 - 페이징- 프로세스 생성 숫자
- 블락 디바이스 활동
- 인터럽트 - 네트워크 통계
- run 큐 및 시스템 부하 평균
- 메모리와 스왑 공간 활용 통계
- 메모리 통계
- CPU 이용도
- 특정 프로세스에 대한 CPU 이용도
- inode, 파일, 기타 커널 테이블에 대한 상태
- 시스템 스위칭 활동(context switch)
- 스와핑 통계 - 특정 프로세스 통계
- 특정 프로세스의 자식 프로세스 통계
- TTY 디바이스 활동
다시 얘기 하지만.. 항상 모르기 때문에 help라는 넘을 이용해서 도움받자~~!!!
1. sysstat 설치
다운로드 http://perso.orange.fr/sebastien.godard/download.html
sysstat는 몇몇 프로그램을 같이 가지고 있다.. 그중에서 sar프로그램을 보자~!!!!
[root@localhost kjb4310]# sar --help
sysstat version 5.0.5
(C) Sebastien Godard
Usage: sar [ options... ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -c ] [ -d ] [ -H ] [ -h ] [ -i <interval> ] [ -q ]
[ -r ] [ -R ] [ -t ] [ -u ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <irq> | SUM | ALL | XALL } ] [ -P { <cpu> | ALL } ]
[ -n { DEV | EDEV | SOCK | FULL } ]
[ -x { <pid> | SELF | ALL } ] [ -X { <pid> | SELF | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ]
[ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
sar [ -abcdgkmpqruvwxyADSC] [-o file] t [n] sar [ -abcdgkmpqruvwxyADSC] [ -s time] [-e time] [ -i sec] [-f file]
처음형태는 운영체제의 활동상황을 매 t초마다 n번 수행하여 누적한다. t는 반드시 주어야 하는 인수고 그렇지 않으면
두번째 형태의 명령으로 인식하여 실행한다.
sar의 명령어를 그냥 쳤을 경우에는... -u 옵션이 적용된다.~!!!!
■ sar -A : 모든 관련정보를 출력한다
■ [root@localhost kjb4310]# sar | more
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 CPU %user %nice %system %iowait %idle
00시 10분 01초 all 32.42 0.00 13.50 0.00 54.07
00시 20분 01초 all 32.30 0.00 13.36 0.00 54.33
.
Average: all 33.42 0.00 14.01 0.00 52.57
■ [root@localhost kjb4310]# sar 5 2 => 5초 2번 필터링 하라 요런 얘기
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
14시 29분 38초 CPU %user %nice %system %iowait %idle
14시 29분 43초 all 65.65 0.00 25.16 0.00 9.19
14시 29분 48초 all 0.92 0.00 0.00 0.00 99.08
.
Average: all 33.29 0.00 12.58 0.00 54.13
■ [root@localhost kjb4310]# sar -b | more =>>> 버퍼의 액티비티를 점검, I/O 와 transfer 의 통계를 백분율로 출력한다.
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 tps rtps wtps bread/s bwrtn/s
00시 10분 01초 0.00 0.00 0.00 0.00 0.00
00시 20분 01초 0.00 0.00 0.00 0.00 0.00
.
Average: 0.00 0.00 0.00 0.00 0.00
* tps : 물리적 디스크에서 발생되어진 초당 전송량. 여기서 전송은 물리적 디스크에 요청한 I/O 이다
* rtps : 물리적 디스크로부터 발생된 초당 읽기 총 요청 횟수
* bread/s : 드라이브 안의 블럭에서 초당 읽은 데이타의 총합. 블럭은 부정확한 사이즈의 블럭이다.
* bwrth/s : 드라이브 안의 블럭에서 초당 쓰여진 데이타의 총합
※ 중요한 것은 %rcache와 %wcache는 버퍼의 실질적인 값으로 %rcache가 90 이하로 떨어지거나,
%wcache의 값이 65 이하로 측정되었을 경우에는 성능을 증가시킬 수 있다.
■ [root@localhost kjb4310]# sar -B | more =====>>>> -B : 페이징 통계를 출력한다.
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 pgpgin/s pgpgout/s fault/s majflt/s
00시 10분 01초 0.00 3.21 21.94 0.00
00시 20분 01초 0.00 3.06 9.95 0.00
* pgpgin/s : 디스크로부터 초당 paged in 된 page 의 총 수
* papgout/s : 디스크에 초당 paged out 된 page 의 총 수
■ [root@localhost kjb4310]# sar -c | more ====>>>>> 새롭게 만들어져 활동하고있는 프로세스를 출력한다.
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 proc/s
00시 10분 01초 0.04
.
Average: 0.05
■ [root@localhost kjb4310]# sar -d | more
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 DEV tps rd_sec/s wr_sec/s
00시 10분 01초 dev1-0 0.00 0.00 0.00
00시 10분 01초 dev1-1 0.00 0.00 0.00
00시 10분 01초 dev1-2 0.00 0.00 0.00
.
Average: dev1-0 0.00 0.00 0.00
Average: dev1-1 0.00 0.00 0.00
Average: dev1-2 0.00 0.00 0.00
■ [root@localhost home2]# sar -e 09:00:00 -f
Linux 2.6.20 (localhost.localdomain) 2007년 06월 12일
00시 00분 01초 CPU %user %nice %system %iowait %idle
00시 10분 01초 all 53.79 0.00 22.42 0.00 23.79
00시 20분 01초 all 53.70 0.00 22.36 0.00 23.95
리포트의 종료시간을 설정한다,기본 ending time 은 18:00:00 이다.
시간표시형식은 24시간 format 을 사용해야한다. 이 옵션은 -f 또는 -o 옵션과 함께 사용되어져야한다
위의 내용은 /var/log/sa/sa## 파일에서 09:00:00 까지의 기록들만 출력하였다
■ [root@localhost kjb4310]# sar -f | more
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 CPU %user %nice %system %iowait %idle
00시 10분 01초 all 32.42 0.00 13.50 0.00 54.07
00시 20분 01초 all 32.30 0.00 13.36 0.00 54.33
.
Average: all 33.45 0.00 14.03 0.00 52.51
-f filename : filename 으로부터 기록을 출력한다.
filename 은 -o 옵션을 사용해서 생성된파일과 같은 종류의 파일이다.
기본 데이타 filename은 /var/log/sa/ad## 파일 들이다.
-f 옵션과 -o 옵션은 함께 사용할수 없다.
■ sar -h : 언제 테이타를 파일로부터 읽었는지를 나타낸다. 이것의 출력 형식은 프로세싱
명령어인 awk 처럼 쉽다. 출력은 tab으로 컬름이 구분되어 이루어졌다. 컬름은
다음과 같다. hostname,interval value,timestamp,device name,field name and value
로 구성되어 있다.
■ sar -i interval : 몇초간격으로 테이타를 출력할것인가를 결정한다.
■ sar -n DEV | EDEV | SOCK | FULL : 네트워크통계를 출력한다.
* DEV : Network Device의 결과로 부터의 통계
- IFACE : Network Interface 이름
- rxpck/s : 초당 받은 패킷수
- txpck/s : 초당 전송한 패킷수
- rxbyt/s : 초당 받은 bytes
- txbyt/s : 초당 전송한 bytes
- rxcmp/s : 압축된 패킷을 초당 받은 수
- txcmp/s : 압축된 패킷을 초당 전송한 수
- rxmcst/s : 초당 받은 다중 패킷 수
* EDEV : Network Device 의 에러 통계
- IFACE : Network Interface 이름
- rxerr/s : 초당 불량 패킷을 받은 수
- txerr/s : 패킷전송중 초당 발생한 에러 수
- coll/s : 패킷전송중 초당 발생한 충돌 수
- rxdrop/s : 리눅스 buffer 의 부족으로 패킷을 받는도중 초당 drop 된 패킷 수
- txdrop/s : 리눅스 buffer 의 부족으로 전송중 초당 drop 된 패킷 수
- txcarr/s : 패킷전송도중 초당 발생한 carrier-error 수
- rxfram/s : 패킷을 받는도중 초당 발생한 frame alignment 에러 수
- rxfifo/s : 패킷을 받는 도중 초당 발생한 FIFO overrun 에러 수
- txfifo/s : 전송된 패킷중 초당 발생한 FIFO overrun 에러 수
* SOCK : Socket 의 통계
- totsck : 총 사용된 socket 수
- tcpsck : 현재 사용중인 TCP sockets 수
- udpsck : 현재 사용중이 UDP sockets 수
- rawsck : 현재 사용중인 RAW sockets 수
- ip-frag : 현재 사용중인 IP fragments 수
* FULL : 모든 종류의 Keywords(DEV,EDEV,SOCK) 내용을 출력한다.
■ sar -o filename : 파일을 읽어서 binary 형태로 저장한다.
sar -o kjb4310-i 1 5 ====>> 1초 간격으로 5 개의 결과치를 kjb4310 이라는 파일로 저장했다
sar -f kjb4310 ====>>> -f 옵션으로 저장된 kjb4310파일을 출력한다.
■ [root@localhost kjb4310]# sar -q | more =>> 실행 대기 큐에 있는 프로세스 점검, 시스템의 load avarage를 나타낸다.
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
00시 10분 01초 0 233 4.02 3.62 3.66
00시 20분 01초 0 231 3.29 3.51 3.57
.
Average: 4 232 3.85 3.84 3.80
runq-sz plist-sz ldavg-1 ldavg-5 순으로 보여주며 각각 프로세스 대기 시간과 전체 프로세스 수,
그리고 1분 전 및 5분전 평균 작업 부하 정보를 보여줍니다
■ [root@localhost kjb4310]# sar -r | more =>>>>> 가용메모리 점검, 메모리 & 스왑 공간의 이용 통계를 출력한다
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
00시 10분 01초 122972 3503004 96.61 41424 2650904 5220508 608 0.01 0
00시 20분 01초 146344 3479632 95.96 41580 2644832 5220508 608 0.01 0
.
Average: 130010 3495966 96.41 40450 2638289 5220508 608 0.01 0
※ 가용 메모리가 인스톨된 메모리의 6%보다 계속해서 작으면 가용 메모리가 부족하다는 것
* kbmemfree : 사용가능한 총 메모리의 양(kbytes)
* kbmemused : 사용중인 총 메모리의 양(kbytes), 커널에서 사용중인 메모리는 제외
* %memused : 사용된 메모리의 %
* kbmemshrd : 시스템에서 공유메모리로 사용된 총 메모리의 양 (kbytes)
* kbbuffers : 커널에서 buffer 메모리로 총 사용된 메모리의 양 (kbytes)
* kbcached : 커널에서 cache data 로 사용된 총 메모리의 양(kbytes)
* kbswpfree : 사용가능한 스왑공간의 양 (kbytes)
* kbswpused : 사용된 스왑공간의 양 (kbytes)
* %swpused : 사용된 스왑공간의 %
■ sar -R : 메모리 통계
* frmpg/s : 시스템에서 초당 자유로워진 memory pages 의 양
페이지의 크기는 시스템 아키텍쳐에따라 달라지며 보통 4K / 8K 이다.
* shmpg/s : 시스템에서 초당 더해진 memory pages 의 양
* bufpg/s : 시스템에서 초당 buffer 에 추가적으로 더해진 memory pages 의 양
■ sar -s hh:mm:ss : 명령어를 실행시킬 시작시간을 설정한다.
이 옵션은 파일로부터 데이트를 읽을때만 사용가능하다 ( 옵션 -f )
ex. [root@kjb4310]# sar -s 14:01:00 kjb4310
kjb430 라는 파일에 저장된 데이타중에 시간이 14:01:00 이상인것들만 출력한다.
여기서 kjb4310 라는 파일은 -f 옵션을 사용해서 만든 파일이다.
■ sar -u : CPU 사용 통계
* %user : 사용자 레벨(application level) 에서 실행중일때의 CPU 사용률 (%)
* %nice : 사용자 레벨(appliaction level) 에서 nice 가중치를 준 CPU 사용률(%)
* %system : 시스템레벨(kernel) 에서 실행중일때의 CPU 사용률(%)
* %idle : CPU가 쉬고있는 시간의 %
■ sar -v : 커널테이블 & 파일 에서 inode 의 상태를 출력한다.
* dentunusd : Directory cache 에서 사용되고있지 않은 cache entries
* file-sz : file handles 의 사용양
* %file-sz : 리눅스 커널에서 할당가능한 최대 파일핸들의 수에대한 파일핸들의 사용된 퍼센트(%)
* inode-sz : inode handles 의 사용양
* super-sz : 커널에의해 할당된 super block handles 의 수
* %super-sz : 리눅스가 할당 가능한 최대 슈퍼블럭핸들에대한 실제로 할당되어진 슈퍼블럭핸들의 퍼센트(%)
* dquot-sz : Disk quota entryes 의 수
* %dquot-sz : 최대할당가능한 disk quota entries 에 대한 실지로 할당된 entries의 퍼센트(%)
■ [root@localhost kjb4310]# sar -w | more ====>>>>> 시스템의 switching 활동 현황 출력
Linux 2.6.20 (localhost.localdomain) 2007년 06월 07일
00시 00분 01초 cswch/s
00시 10분 01초 0.00
00시 20분 01초 0.00
.
Average: 0.00
* cswch/s : 초당 context switching 의 수
■ sar -W : swapping 의 통계 출력
* pswpin/s : 초당 swap in 된 수
* pswout/s : 초당 swap out 된 수
sar 설정하기
# cat /etc/cron.d/sysstat
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib/sa/sa1 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A
sa1 는 매10분마다 시스템모니터링한 결과를 /var/log/sa/saxx 파일에 바이너리 형태로 기록한다. xx는 기록하는 날짜이다.
sa2 -A 는 23시 53분에 바이너리 파일을 읽어서 사람이 편하게 볼 수 있도록 보고서를 만든다. /var/log/sa/sarxx 형태로 기록된다. sa1 에서 5 3 이라고 해놓으면 매 10분마다 실행을 하면서 5초동안 3번을 기록한다는 뜻이다.
그러면 매10분마다 15번의 기록이 남는다. sa2 에서 -A는 모든 데이터를 보는 것인데 실제로는 자신에게
필요한 내용만 옵션을 이용하여 뽑아서 보는 것이 편할 것이다.
man 페이지의 예를 참고하면 된다.
# 8am-7pm activity reports every 10 minutes during weekdays.
0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &
# 7pm-8am activity reports every an hour during weekdays.
0 19-7 * * 1-5 /usr/lib/sa/sa1 &
# Activity reports every an hour on Saturday and Sunday.
0 * * * 0,6 /usr/lib/sa/sa1 &
# Daily summary prepared at 19:05
5 19 * * * /usr/lib/sa/sa2 -A &
서비스에 따라 다르겠지만 sa2 에서 자세히 보아야 할 부분들은 다음과 같다. -r 메모리 및 스왑 스페이스 사용현황,
-u CPU 활용량, -W 스와핑 상황. -q load average
# sar -ruW -f sa27 3600 -> 메모리, cpu, 스왑 레포트를 sa27에서 만들며 3600초(1시간) 기준으로 만든다.
# sar -r -f sa25 1800 -s 08:00:00 -e 19:00:00 -> 오전 8시부터 저녁 19시가지 30분간격으로 메모리 모니터링