prdelta
사용법
prdelta -H [-G fn[:name],...] [-h][-x char][-p col][-S skiplist][-l][-i interval][-d delimiter][-s sep][-f [-v]][-0] [file]
prdelta -G fn[:name],... [-S skiplist][-l][-h][-x char][-p col][-i interval][-d delimiter][-s sep][-f [-v]][-0] [file]
prdelta -L fn [-K keyfield][-H][-h][-x char] [-S skiplist][-l][-i interval][-d delimiter][-s sep][-f [-v]][-0] [file]
prdelta -c pos[,pos]... [-S skiplist][-l][-i interval][-s sep][-f [-v]][-0] [file]
prdelta -V
Options are as follows:
-? print this help
-0 print 0 (zero) in all columns at the first line
-c pos[,pos]... specify character positions
-d delimiter input field delimiter; def: whitespace
-f force to calculate unconditionally
-G fn[:name],... select field; exam) 1,2 ...
-H data file has header information
-h print column names
-i interval value is divided by the specified interval
-K keyfield specfiy key column number for -L option; def: 1
-k divided by 1024
-L fn calculate delta value line by line with the same column name
-l value is 8 byte value
-m divided by (1024*1024)
-p col print the specified column value at the first column
-S skiplist list starting word to skip (separated by comma)
-s sep output separater (default: TAB)
-x char replace the specified character with a space
-v verbose mode
-V show version
file data file; If file is omitted, the standard input is used.
설명
다음과 같은 명령어가 출력하는 값은 시스템의 누적 데이타를 보여준다.
# kstat
# netstat -s
# vmstat -s
이러한 명령어를 일정시간 간격으로 실행한 데이타를 수집하여 시간 간격동안의
증가량을 구할 경우 prdelta 명령어가 사용된다.
예를 들어, 다음과 같이 hme0 네트웍 인터페이스 카드로 얼마나 많은 데이타
입출력되는지 알기 위하여 다음과 같이 할 수 있다.
kstat 명령어로 hme0 네드웍 인터페이스 카드에서 입출력되는 되는 패킷량과
데이타 양을 알 수 있다.
# kstat -p '::hme0:*bytes64' -p '::hme0:*packets'
hme:0:hme0:obytes64 10152384926
hme:0:hme0:rbytes64 6326604642
hme:0:hme0:ipackets 32429306
hme:0:hme0:opackets 8793323
|
이 값들은 시스템 부팅부터 지금까지의 누적 데이타 값이다.
prdelta 명령어가 데이타를 읽을 때, 양수만 숫자로 인식하고, 소수점이하는 무시한다.
그리고 prdelta 명령어는 디폴트로 입력 데이타가 unsigned int로 가정하여
증가하는 것을 가정으로 한다.
만일 숫자가 증가하지 않고 감소하면, 4 byte의 overflow가 난 후에 다시 증가한 것으로
판단한다.
다음과 같이 위와 같이 12억에서 9백으로 변했다면, 3094968196 이 증가한 것으로 판단한다.
1200000000
900
|
+---------> 2^32 - 1200000000 + 900 = 3094968196
kstat 명령어를 60초 간격으로 600 번 데이타를 수집하여, 다음과 같은
방법으로 각각 필드(obytes64,rbytes64,ipackets,opackets)에 대하여 60초간
데이타 양을 그래프를 만들 수 있다.
# kstat -p '::hme0:*bytes64' -p '::hme0:*packets' 60 600 > hme0.log
# grep ipackets hme0.log | prdelta -G 2 > hme0.ipackets.log
# grep opackets hme0.log | prdelta -G 2 > hme0.opackets.log
# grep obytes64 hme0.log | prdelta -l -G 2 -k > hme0.obyte64.log
# grep rbytes64 hme0.log | prdelta -l -G 2 -k > hme0.rbyte64.log
# paste hme0.ipackets.log hme0.rbyte64.log hme0.opackets.log hme0.obyte64.log > hme0.out
# mkgraph -o hme0 -T hme0 -G '1::ipackets,2::input KB,3::opackets,4::output KB' hme0.out
|
kstat 명령어로 필요한 데이타를 수집하고, 수집된 데이타에 대하여 grep 명령어를 사용하여 필드 별로
나눈 다음에 prdelta 명령어로 원하는 필드에 대하여 차이값을 구한다.
이렇게 각각 구한 데이타를 한 라인에 각각의 필드값을 연결하기 위하여 paste 명령어를 사용한다.
이렇게 만들어진 데이타에 대하여 mkgraph 명령어를 사용하여 그래프를 만든다.
다음의 예제는 netstat -s 명령어를 60초 간격으로 600 번 데이타를 수집하여
입출력되는 UDP 패킷량을 출력하는 예제이다.
# netstat -s 60 600 > netstat-s.log
# grep udpInDatagrams netstat-s.log | prdelta -d = -G 2 > udpInDatagrams.log
# grep udpOutDatagrams netstat-s.log | prdelta -d = -G 2 > udpOutDatagrams.log
|
netstat -s 명령어는 자체적으로 일정시간 간격으로 반복하는 기능이 없기 때문에
dolog 명령어를 사용하여 60초 간격으로 600번 반복한다.
-G 옵션으로 지정한 컬럼의 시작이 숫자로 시작하지 않으면 오류가 발생한다.
지정한 컬럼에 숫자로 시작하고 뒷부분에 숫자가 아닌 다른 문자가 있을 경우
다른 문자가 시작하기 전까지만 데이타로 간주한다.
-L 옵션을 지정하면 같은 이름을 가진 필드(-K 옵션으로 지정 가능)의 차이값을 구하여 출력한다.
# kstat -p :::cpu_ticks* 60 2 > usage.out
# cat usage.out
cpu:0:sys:cpu_ticks_idle 813963
cpu:0:sys:cpu_ticks_kernel 15480
cpu:0:sys:cpu_ticks_user 20519
cpu:0:sys:cpu_ticks_wait 0
cpu:0:sys:cpu_ticks_idle 816678
cpu:0:sys:cpu_ticks_kernel 15988
cpu:0:sys:cpu_ticks_user 23309
cpu:0:sys:cpu_ticks_wait 0
# prdelta -L 2 usage.out
cpu:0:sys:cpu_ticks_idle 2715 ; 816678 - 813963
cpu:0:sys:cpu_ticks_kernel 508 ; 15988 - 15480
cpu:0:sys:cpu_ticks_user 2790 ; 23309 - 20519
cpu:0:sys:cpu_ticks_wait 0 ; 0 - 0
|
위의 예제는 kstat 명령어로 CPU의 tick 사용량을 60초 간격으로 2번 수집하여
그 차이값을 출력한다.
위의 예제는 첫번째 컬럼이 같은 이름을 찾아서 두번째 컬럼(-L 2)의 차이 값을 출력한다.
같은 이름을 가진 컬럼를 지정하려면 -K 옵션으로 지정할 수 있다. 디폴트는 첫번째 컬럼(-K 1)이다.
다음은 netstat -s 명령어로 1분 간격으로 수집한 데이타 파일에서 tcpActiveOpens 이 포함된
라인을 grep 명령어로 찾아 내어서 그 파일에 대하여 -x 옵션을 사용하여 '=' 을 공백으로 대치하고
-G 옵션을 사용하여 3번째와 5번째 컬럼을 선택하여 출력한다.
-h 옵션을 사용하며 선택한 컬럼명을 출력한다. 아래의 예제에서는 "-G 3:tcpActiveOpens,5:tcpPassiveOpens" 옵션을
사용하여 3번째 컬럼명에는 tcpActiveOpens, 5 번째 컬럼명에는 tcpPassiveOpens 를 지정하였다.
-p 옵션을 사용하여 출력의 첫번째 컬럼에 출력할 입력의 컬럼 번호를 지정할 수 있다.
# grep tcpActiveOpens netstat-s* > Opens.out
# cat Opens.out
netstat-s-00:00:00 tcpActiveOpens =34776248 tcpPassiveOpens =523884671
netstat-s-00:01:00 tcpActiveOpens =34776908 tcpPassiveOpens =523896412
netstat-s-00:02:00 tcpActiveOpens =34777545 tcpPassiveOpens =523907347
netstat-s-00:03:00 tcpActiveOpens =34778237 tcpPassiveOpens =523918168
netstat-s-00:04:00 tcpActiveOpens =34778906 tcpPassiveOpens =523928702
netstat-s-00:05:00 tcpActiveOpens =34779576 tcpPassiveOpens =523939254
netstat-s-00:06:00 tcpActiveOpens =34780217 tcpPassiveOpens =523949727
netstat-s-00:07:00 tcpActiveOpens =34780909 tcpPassiveOpens =523960011
netstat-s-00:08:00 tcpActiveOpens =34781563 tcpPassiveOpens =523970198
netstat-s-00:09:00 tcpActiveOpens =34782200 tcpPassiveOpens =523980324
netstat-s-00:10:00 tcpActiveOpens =34782877 tcpPassiveOpens =523990271
# prdelta -h -p1 -x= -G3:tcpActiveOpens,5:tcpPassiveOpens Opens.out
prefix tcpActiveOpens tcpPassiveOpens
netstat-s-00:01:00 660 11741
netstat-s-00:02:00 637 10935
netstat-s-00:03:00 692 10821
netstat-s-00:04:00 669 10534
netstat-s-00:05:00 670 10552
netstat-s-00:06:00 641 10473
netstat-s-00:07:00 692 10284
netstat-s-00:08:00 654 10187
netstat-s-00:09:00 637 10126
netstat-s-00:10:00 677 9947
|
다음은 prdelta 명령어의 옵션에 대한 설명이다.
옵션 | 설명 |
-0 |
-0 옵션을 지정하면, 첫 번째 라인이 숫자 0을 출력한다.
|
-d delimiter |
| -c pos[,pos]...<./b> |
-c 옵션은 수치 데이타가 있는 위치를 지정한다. 만일 시간이 18 번째 문자에서
시작한다면, -c 18 로 지정한다.
만일 한 라인에 여러 개의 데이타가 있다면, 콤마로 구분하여 여러개를 지정할 수 있다.
|
-d delimiter |
-d 옵션은 필드 구분자를 지정한다. 디폴트는 whitespace이다.
|
-f [-v] |
-f 옵션을 지정하면, 입력 데이타의 필드의 개수가 -G 옵션에 지정한 값보다 적거나,
데이타가 숫자가 아닌 문가가 오더라도 오류 메세지를 출력하지
않고 0으로 간주하여 계산을 진행한다.
|
-G fn[:name],... |
-G 옵션은 수치 데이타가 있는 컬럼을 지정한다. 컬럼은 whitespace 구분된다.
특별한 구분자를 지정하려면, -d 옵션을 사용하여 구분자를 변경할 수 있다.
만일 한 라인에 여러 개의 데이타가 있다면, 콤마로 구분하여 여러개를 지정할 수 있다.
-H 옵션이 지정되어 있을 경우, -G 에 컬럼 번호대신에 컬럼명을 지정할 수 있다.
-h 옵션을 지정하면, 선택한 컬럽에 대한 컬럼명을 출력할 수 있다.
이때 -G 옵션에 지정한 name이 출력된다.
|
-H |
-H 옵션을 지정하면 입력되는 유효한 첫번째 데이타가 컬럼명으로 인식한다.
이 컬럼명은 -G 옵션에 컬럼번호 대신에 사용될 수 있다.
헤더 정보에는 있는 각각의 필드명은 숫자로 시작하면 오류가 발생한다.
그러나 JS Parm V10.4 부터는 헤더 라인의 마지막 컬럼에 다음과 같은 시간 표시가 있는 것 경우,
오류를 발생하지 않고, 무시한다. 즉, 시간 표시가 없는 것과 같이 처리한다.
mmdd.HH:MM:SS
HH:MM:SS
|
-h |
-h 옵션을 지정하면 컬럼명 출력한다.
|
-i intertval |
출력될 차이값을 interval로 나눈 결과를 출력한다.
데이타를 60초 간격으로 수집하였을 경우 초당값으로 보고싶으면 interval에
60을 지정하면 된다.
소수점 이하의 값은 버린다.
|
-k |
출력될 차이값을 1024로 나눈 결과를 출력한다.
|
-L fn [-K keyfield] |
-L 옵션은 -K 옵션과 함께 사용되며, -K 옵션에 지정된 컬럼의 이름이 같은 것끼리 모아서
-L 옵션에 지정된 컬럼의 값의 합계를 출력한다.
-K 옵션이 지정되지 않으면 디폴트로 첫번째 컬럼이 사용된다.
|
-l |
데이타 값이 64 bit 데이타일 경우에 이 옵션을 사용하여야 한다.
대부분의 시스템 통계 데이타를 32 bit 정수를 사용한다.
kstat 명령어의 경우 변수에 64가 붙은 값은 64 bit 정수를 사용한다는 것을 나타낸다.
|
-m |
출력될 차이값을 (1024*1024)로 나눈 결과를 출력한다.
|
-p col |
-p 옵션에 지정한 컬럼에 있는 데이타를 출력에 첫번째 컬럼에 그대로 출력한다.
|
-S skiplist |
-S 옵션은 스킵하고 싶은 문자열을 지정한다. 문자열은 첫번째 단어를 전부 지정하여도
되고, 시작부터 일부분만 지정하여도 된다. 여러 문자열을 지정할 경우에는 콤마로 구분한다.
예를들어 -S p,ro 라고 지정하면, p 또는 ro로 시작하는 라인은 스킵한다.
|
-s sep |
-s 옵션을 지정하면 출력되는 데이타의 구분자 지정할 수 있다.
이 옵션을 지정하지 않으면 탭(TAB)을 출력 구분자로 사용한다.
|
-v |
-v 옵션은 -f 옵션과 함께 사용하여 숫자가 아닌 데이타가 있을 경우, 그 내용을 출력한다.
|
-V |
-V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
|
-x char |
-x 옵션에서 지정한 문자를 입력 데이타에서 공백으로 대치한다.
|
|