solaris 정리 7 - [ 성능 측정 , 주기적인 작업 설정 ]

2012. 2. 5. 18:33개발/unix

성능 측정
1) vmstat 명령어 : 프로세스,가상메모리,페이징,디스크,cpu 등의 상태 측정.
# vmstat
# vmstat 3   (3초 주기로 성능 측정)
- procs 필드 : 프로세스수와 그에 해당하는 데이타 표시.
  r : 실행가능상태로 대기큐에 쌓인 수.
     이 수가 크면 cpu가 처리에 애를 먹고 있다는 뜻이다.
     r=0 : white(cpu idle)
     0<r<3 : green(no problem)
     3≤r≤5 : amber(cpu busy)
     5<r : red(cpu busy)
  b : I/O 자원을 할당받지 못해 블록된 process.
  w : swap-out 된 process 수. 이 수가 크면 physical 메모리가 부족하다.
- memory 필드 : 가상메모리와 physical 메모리의 사용 가능량.
  swap : 현재 사용 가능한 스왑 크기.
  free : 사용가능한 free 메모리 크기(kb). 인스톨메모리의 6%보다 계속 작으면 가용메모          리가 부족. 잠재적인 병목 현상.
- page 필드 : 초당 발생하는 fault page 수와 실행중인 페이징 표시.
(paging : 가상 기억 장치를 통하여 동작하는 프로그램에서 사용되는 프로그램과 데이터    를 주기억 장치에 설치하기 위하여 사용되는 방법의 한 가지. 가상 기억 장치를 고정 길    이의 페이지로 구분하고 이러한 페이지를 하나의 단위로 하여 주기억 장치에 설치하고 주    소를 변환한다.)
   re : page reclaim
   mf : minor fault
   pi : page in(kb)
   po : page out(kb)
   fr : free(kb)
   de : 단기간의 메모리 부족분. swap-in을 막기위해 swap-out시에 설정된 인공적인
        memory 부족분.
   sr : 가용메모리 부족시에 활성화된 페이지 데몬 수. sr이 크면 가능메모리 부족.
       sr=0 : white
       0<sr<200 : green
       200≤sr≤300 : amber
       400<sr : red
- disk 필드 : 초당 disk 조작수.
- faults 필드 : 초당 trap/interrupt 비율.
   (trap :하나의 명령어가 실행될 때마다 자동적으로 발생되는 인터럽트. 이러한 인터럽트           는 중앙 처리 장치에 의하여 하드웨어적으로 발생하게 되는데 프로그램에서 하나           의 명령어가 실행될 때마다 자동적으로 미리 정의된 트랩 처리 루틴으로 실행의            제어권이 넘어온다. 따라서, 프로그램의 동작 상황을 하나의 명령어 단위로 추적           할 수 있는데 일반 응용 소프트웨어의 디버깅 목적보다는 하드웨어 장치와 밀접한           관련이 있는 시스템 소프트웨어에서 오류를 찾아내기 위한 수단으로 이용된다.)
  in : device interrupt(non clock)
  sy : 초당 system fault
  cs : cpu context switch 비율.
- cpu 필드 : cpu 사용 시간에 대한 백분율(%)
us : 사용자 사용 시간
  sy : 시스템 사용 시간
  id : idle 시간
# vmstat -s  (시스템 부팅 후 발생한 모든 event)
# vmstat -S 3
  -S : 're' 와 ‘mf' 필드를 ’si' 와 ‘so' 필드로 바꾼다.
  si : 초당 swap-in 된 페이지.
  so : swap-out 된 전체 프로세스 수.
# vmstat -c 3  (cache flushing 상태)
# vmstat -i  (각 device의 interrupt 사항)

2) iostat : 각 디스크에 받는 로드 측정, 디스크 입출력, 활용도, Queue크기, 트랙잭션율,              서비스시간 등.
  -c : user mode, system mode, I/O를 위한 waiting, idle 등에 사용된 시간의 백분율.
  -D : 초당 diskdml read, write와 utilization에 대한 백분율.
  -t : 초당 터미널에서 사용된 read, write의 caracter 수.
  -x : 추가된 모든 disk들의 상태 표시.
# iostat -xtc 3
  서비스시간(svc_t) : 입출력 요구에 소요된 시간. 다른 요구가 처리중이므로 Queue에서     대기하는 시간도 포함. 30초 평균이 30%이상이면 점검 필요.
# iostat -D 3
  I/O가 가장 활발할 때 사용. util(디스크 사용도)가 65%이상이면 과부하.
   util<5% : white
   5%<util<35% : green
   35%<util<65% : amber
   65%<util : red

3) sar(system activity reporter) : 시스템의 여러 리소스들이 성능 측정, 운영중인 상태에서    자동으로 데이터 수집. 파일로 정리 가능.
# sar 3 5 (3초 간격, 5번 실행)
# sar -o /tmp/sar_1.file 3 5 (파일로 저장)
# sar -f /tmp/sar_1.file (파일 읽기)
# sar -b 3 5
  (버퍼 activity 검사. % reache≤90, %wcache≤65, 버퍼스페이스증가, 성능증가)
# sar -d 10 3  (disk의 I/O 점검, 디스크 사용량 점검)
# sar -g 10 3 (memory와 page-out 점검, 이 값이 높으면 가용메모리 부족)
# sar -q 10 3 
  (process 점검, 실행대기큐내의 프로세스 검색, runq-sz가 계속 2 이상이면 cpu 한계치     - 메모리상에 대기중인 process thread 수)
# sar -r 10 3 
  (가용메모리와 swap-file disk block, 가용메모리가 인스톨메모리의 6%보다 계속 작으면     가용메모리가 부족)

4) netstat : 각 network interface의 전송상태를 알 수 있다.
# netstat -i 5
  network collision rate(%)=Collis/Opkts,  5%≤ncr≤10%이면 네트워크 오버로드 초래.
  input packet error rate(%)=Ierrs/Ipkts > 0.25%이면 패킷 드롭.
  output patcket error rate(%)=Oerrs/Opkts

5) snoop : 네트워크에서 패킷 캡쳐. 모든 client와 server간의 call trace를 담을 수 있다.
# snoop -o /tmp/a (네트워크 패킷을 파일로 저장)
# snoop -i /tmp/a  (파일 읽기)




주기적인 작업 설정
- crontab 명령어
crontab 파일 : /var/spool/cron/crontabs/user명(crontab을 실행한 user명)
crontab 명령어 : crontab 파일을 편집.
cron daemon : crontab 파일의 내용을 읽어서 지정된 시간에 작업을 수행.
crontab 명령어
옵션
의  미
-e
crontab 파일을 편집할 때 사용.
-l
crontab 파일의 내용을 화면에 출력할 때 사용.
-r
crontab 파일을 삭제할 때 사용.

/etc/default/cron 파일
변수명
의  미
CRONLOG
변수값이 yes일 경우 작업 실행 후 그 기록을 남긴다.
PATH
crontab -e 명령어를 root 사용자가 아닌 일반 사용자들이 사용하여 작업을 만들었을 경우에 그 작업들이 수행될 때 사용하는 PATH 변수의 값을 명시한다.
SUPATH
crontab -e 명령어를 root 사용자가 사용하여 작업을 만들었을 경우에 그 작업들이 수행될때 사용하는 PATH 변수의 값을 명시한다.
/etc/cron.d 디렉토리
파일명
의  미
cron.deny
default로 존재한다.
crontab 명령어를 사용할 수 없는 사용자 이름 등록.
cron.allow 파일에 열거된 사용자라 할지라도 cron.deny 파일에 열거된 경우 crontab명령어를 사용할 수 없다.
cron.allow
default로 존재하지 않는다.
crontab 명령어를 사용할 수 있는 사용자 이름 등록.
cron.deny 파일이 우선시 된다. 하지만 cron.deny와 cron.allow 파일이 모두 존재하지 않을 경우에는 오로지 root 사용자만이 crontab 명령어를 사용할 수 있다.


crontab 파일의 필드 구성
필드
의  미
0~59까지 숫자 사용. ex) 10-30 or 10,20,30 or *
0~23까지 숫자 사용. ex) 3-5 or 1,2,3 or *
1~31까지 숫자 사용. ex) 1-10 or 1,3,5 or *
1~12까지 숫자 사용. ex) 2-5 or 3,6,9 or *
요일
0~6까지 숫자 사용.  ex) 0-3 or 0,3,5 or *
0 : 일요일, 1 : 월요일, ..... , 6 : 토요일
작업
반드시 절대경로명을 사용한다. ex) /usr/bin/banner "time to go!" > /dev/console

# EDITOR=vi  (editor 설정)
# export=EDITOR
# vi /etc/cron.d/cron.allow (crontab 명령어가 수행되지 않을시 user명을 추가해준다.)
root
user명
# crontab -e (crontab 생성)
# crontab -e user명  (user명에 해당하는 crontab 생성)
30 17 * * 5 /usr/bin/banner "Time to go!" > /dev/console
:wq  (/var/spool/cron/crontabs/user_name 에 저장된다.)
     (^C : 저장하지 않고 빠져 나옴. ^D : 파일을 비우고 빠져 나옴. 사용주의)
# crontab -l (리스트 확인)
# crontab -l user명  (user명에 해당하는 리스트 확인)
# crontab -r user명 (crontab 삭제)

- at 명령어
정해진 시간에 한 번 실행하며 실행된 후에는 작업 목록에서 제거된다.
at 명령어 : 지정된 시간에 실행할 작업을 입력하고, 대기 목록을 확인, 제거한다.
atq 명령어 : 현재 대기중인 작업의 목록을 확인한다.
atrm 명령어 : 대기중인 작업을 제거한다.
cron daemon : crontab과 마찬가지로 at 파일의 내용을 정해진 시간에 수행한다.
at 파일 : /var/spool/cron/atjobs 디렉토리에 *.a 형태로 저장된다.
         /etc/default/cron 파일은 cron daemon 프로세스가 실행될때 읽는 파일이기 때문           에 at 프로그램에서도 똑같이 동작된다.

/etc/cron.d 디렉토리
파일명
의  미
at.deny
default로 존재한다.
at 명령어를 사용할 수 없는 사용자 이름 등록.
at.allow 파일에 열거된 사용자라 할지라도 at.deny 파일에 열거된 경우 at 명령어를 사용할 수 없다.
at.allow
default로 존재하지 않는다.
at 명령어를 사용할 수 있는 사용자 이름 등록.
at.deny 파일이 우선시 된다. 하지만 at.deny와 at.allow 파일이 모두 존재하지 않을 경우에는 오로지 root 사용자만이 at 명령어를 사용할 수 있다.



at 프로그램의 형식
at [-m] -t time_date
at [-m] time [date]
at -l
at -r at_job_id
atq
atrm [-ai] [[at_job_id][user]]
옵션
의  미
-m
작업 수행 후 그 결과는 작업을 만든 사용자에게 메일로 전송.
-t
[[CC]YY]MMDDhhmm[.SS] 형식에 따라 작업을 수행한다. -t 옵션이 없을 경우 시간과 날짜를 사람들이 쉽게 인식할 수 있는 방법으로 입력한다.
CC : 세기(century) - 1            YY : 연도의 끝 두 자리           
MM : 월(month)                   DD : 일(day)
hh : 시(hour)                      mm : 분(minute)
SS : 초(second)
-l
현재 대기중인 작업의 목록을 확인.
-r
특정 작업 삭제 가능. atrm 명령어 다음에 작업 식별 번호를 입력하는 것과 같다.
-a
atrm 명령어에서 사용. 특정인에게 대기중인 모든 작업 삭제.
-i
atrm 명령어에서 사용. 대기작업을 지울때마다 다시 확인하는 기능.


# date
Sat Feb 21 19:14:27 KST 2004
# at 19:20
at> find / -name core -exec rm {} ;
at> find / -type f -name "*.txt" -exec cp {} /dir01 ;
at> ^D
commands will be executed using /sbin/sh
job 1077358800.a at Sat Feb 21 19:20:00 2004
# at -l
user = root     1077358800.a    Sat Feb 21 19:20:00 2004
# atq
Rank     Execution Date     Owner     Job         Queue   Job Name
  1st   Feb 21, 2004 19:20   root    1077358800.a     a     stdin
# ls -l /var/spool/cron/atjobs
total 2
-r-Sr--r--   1 root     other        461 Feb 21 19:15 1077358800.a
# at -r 1077358800.a
# atq
no files in queue.