jsyserr
사용법
jsyserr -a [-e errno] [-t second][-o output][-S][-X]
jsyserr -n execname [-e errno] [-t second][-o output][-S][-X]
jsyserr -p pid [-e errno] [-t second][-o output][-S][-X]
jsyserr -F syscall[,...] { -a | -n execname | -a pid } [-e errno] [-t second][-o output][-S][-X][-A][-0]
jsyserr -P syscall[,...] { -a | -n execname | -a pid } [-e errno] [-t second][-o output][-S][-X]
jsyserr -T syscall[,...] { -a | -n execname | -a pid } [-e errno] [-t second][-o output][-S][-X][-A][-0]
jsyserr -V
Options are as follows:
-? print this help
-0 show time information
-A print process name and arguments instead of execname with -F or -T option
-a examine system call errors for all processes
-e errno filter by errno
-F syscall[,...] print system call directly
-n execname examine system call errors for the 'execname'
-o output specify output file
-P syscall[,...] examine the number of system calls for the specified system call
-p pid examine system call errors for the 'pid'
-S print only dtrace script
-t second examine system calls during the second
-V show version
-T syscall[,...] print user stack trace directly
-X except system call error of 'dtrace' commands
설명
jsyserr 명령어는 Solars 10 버전에서 제공하는 dtrace 명령어를 이용하여,
오류가 발생한 시스템 콜에 대한 errno 번호 별로 발생한 횟수를 출력한다.
다음은 jsyserr 명령어의 사용 예제이다.
# /opt/JSparm/bin/jsyserr -a -t 5
Tracing... for 5 seconds
:: For all processes
:: For system call: ALL
:: Date: 2011 Sep 23 20:09:19
:: Elapsed: 5.001
SYSCALL ERRNO COUNT DESC
ioctl 2 510 ENOENT - No such file or directory
p_online 22 255 EINVAL - Invalid argument
read 11 4 EAGAIN - Resource temporarily unavailable
pollsys 4 4 EINTR - interrupted system call
lwp_park 62 1 ETIME - timer expired
lwp_cond_wait 62 1 ETIME - timer expired
ioctl 22 1 EINVAL - Invalid argument
TOTAL - 776
|
위의 명령어에서 -a 옵션은 모든 프로세스의 시스템 콜을 조사하라는 의미이고, -t 옵션을 사용하여 데이타를 수집하는 시간을
5초로 지정하였다.
jsyserr 명령어의 출력의 의미는 다음과 같다.
:: For all processes |
모든 프로세스에 대하여 조사를 하였다는 의미이다.
|
:: For all system: ALL |
모든 시스템 콜에 대하여 조사를 하였다는 의미이다.
|
:: Date: 2011 Sep 23 20:09:19 |
데이타를 수집한 날짜를 보여준다.
|
:: Elapsed: 5.001 |
데이타를 수집하는데 소요된 시간을 1/1000초 까지 보여준다.
|
컬럼 | 설명 |
---|
SYSCALL |
시스템 콜 이름
|
ERRNO |
시스템 콜에서 발생한 오류번호 (errno)
|
COUNT |
해당 오류를 발생한 시스템 콜의 횟수
|
DESC |
ERRNO 컬럼에 있는 번호에 대한 설명
|
다음은 -p 옵션을 사용하여 PID 607 번 프로세스의 시스템 콜의 오류 정보를 5 초 동안 수집한 예제이다.
# jsyserr -p 607 -t 5
Tracing... for 5 seconds
:: For pid = 607
:: For system call: ALL
:: Date: 2011 Sep 23 20:46:36
:: Elapsed: 5.001
SYSCALL ERRNO COUNT DESC
read 11 10 EAGAIN - Resource temporarily unavailable
pollsys 4 10 EINTR - interrupted system call
TOTAL - 20
|
실행 도중에 'CTRL-C' 키를 타이핑하면, 그 때까지의 정보를 출력한다.
jsyserr 명령어는 dtrace 명령어를 실행하여, 그 결과물을 받아서 사용자가 보기 쉽게 가공하여 보여준다.
-S 옵션을 지정하면, dtrace 명령어를 실행할 때 사용되는 script의 내용을 보여준다.
# jsyserr -a -t 5 -S
#!/usr/sbin/dtrace -s
#
#pragma D option quiet
dtrace:::BEGIN
{
self->begin = timestamp;
printf( "Tracing... for 5 seconds\n" );
printf( ":: For all processes\n" );
printf( ":: For system call: ALL\n" );
}
syscall:::return
/errno != 0/
{
@V_calls[probefunc,errno] = count();
}
tick-5sec
{
exit(0);
}
dtrace:::END
{
self->elapsed = timestamp - self->begin;
printf( ":: Date: %Y\n", walltimestamp );
printf( ":: Elapsed: %d\n", self->elapsed );
printf( "\n" );
printf( ":: Errno counts:\n%16s %5s %7s\n", "SYSCALL", "ERRNO", "COUNT" );
printa( "%16s %5d %@7d\n", @V_calls );
printf( "\n" );
}
|
다음은 jsyserr 명령어의 옵션이다.
옵션 | 설명 |
-0 |
-0 옵션을 지정하면, -P 옵션과 -T 옵션을 사용할 때 시간정보를 출력한다.
|
-A |
-A 옵션을 지정하면, -P 옵션과 -T 옵션을 사용할 때 프로세스명과 인수도 함께 출력한다.
|
-a |
-a 옵션을 지정하면, 모든 프로세스의 시스템 콜의 오류 정보를 조사한다.
|
-e errno |
-e 옵션에 오류 번호를 지정하면, 지정한 오류 번호에 대해서만 조사한다.
다음은 모든 프로세스의 모든 시스템 콜에 대하여 오류 번호가 11 번인 것을 3 초 동안 조사한다.
# jsyserr -F all -a -e 11 -t3
Tracing... for 3 seconds
:: For all processes
:: For system call: ALL
PID UID SYSCALL ERRNO COMMAND
765 0 read 11 Xorg
765 0 read 11 Xorg
765 0 read 11 Xorg
765 0 read 11 Xorg
765 0 read 11 Xorg
765 0 read 11 Xorg
|
|
-F syscall[,...] |
-F syscall 옵션을 사용하면, 지정한 시스템 콜에서 오류가 발생한 것을 실시간으로 보낸다.
# jsyserr -F pollsys -a -0
Tracing... Hit <Ctrl-C> to end
:: For all processes
:: For system call: 'pollsys'
.......WALLTIMESTAMP PID UID SYSCALL ERRNO COMMAND
2012 Jan 17 15:30:32 775 0 pollsys 4 Xorg
2012 Jan 17 15:30:32 775 0 pollsys 4 Xorg
2012 Jan 17 15:30:33 775 0 pollsys 4 Xorg
2012 Jan 17 15:30:33 775 0 pollsys 4 Xorg
2012 Jan 17 15:30:34 775 0 pollsys 4 Xorg
2012 Jan 17 15:30:34 775 0 pollsys 4 Xorg
... skip ...
|
여러 개의 시스템 콜을 지정하려면, 콤마로 분리하여 여러 개를 지정할 수 있다.
시스템 콜 이름에 'all' 이라고 지정하면, 모든 시스템 콜 오류에 대하여 출력한다.
-0 옵션을 지정하면 위와 같이 시스템 콜을 호출한 시간 정보가 출력된다.
|
-n execname |
-n execname 옵션을 지정하면, 지정한 명령어의 이름을 가진 프로세스의 시스템 콜의 오류 정보만 조사한다
|
-o output |
-o output 옵션을 지정하면, jsyserr 명령어의 출력을 표준출력으로 보내지 않고, 파일로 파일로 저장한다.
|
-P syscall[,...] |
-P syscall[,...] 옵션을 사용하면, 지정한 시스템 콜에서 발생한 오류에 대해서
다음과 같이 호출한 명령어 이름과 PID와 시스템 콜과 오류번호와 횟수를 보여준다.
# jsyserr -P ioctl,pollsys -a -t 5
Tracing... for 5 seconds
:: For all processes
:: For system call: 'ioctl,pollsys'
:: Date: 2011 Sep 23 21:01:09
:: Elapsed: 5.001
COMMAND PID SYSCALL ERRNO COUNT DESC
dtrace 1895 ioctl 2 1275 ENOENT - No such file or directory
Xorg 607 pollsys 4 10 EINTR - interrupted system call
dtrace 1895 ioctl 22 1 EINVAL - Invalid argument
TOTAL - - - 1286
|
시스템 콜 이름에 'all' 이라고 지정하면, 모든 시스템 콜의 오류에 대해 조사한다.
|
-p pid |
-p pid 옵션을 지정하면, 지정한 PID의 프로세스의 시스템 콜의 오류 정보만 수집한다.
|
-S |
-S 옵션을 지정하면, dtrace 명령어가 실행할 dtrace script를 보여준다.
|
-T syscall[,...] |
-T syscall 옵션을 사용하면, 지정한 시스템 콜에서 오류가 발생한 시스템 콜에 대한
사용자 프로세스의 stack trace를 실시간으로 출력한다.
# jsyserr -T pollsys -a -0
Tracing... Hit <Ctrl-C> to end
:: For all processes
:: For system call: 'pollsys'
2012 Jan 17 15:32:34 pid=775 uid=0 syscall=pollsys err=4 execname=Xorg
libc.so.1`__pollsys+0x15
libc.so.1`pselect+0x18e
libc.so.1`select+0x82
Xorg`WaitForSomething+0x891
Xorg`Dispatch+0x242
Xorg`main+0x491
Xorg`_start+0x80
2012 Jan 17 15:32:34 pid=775 uid=0 syscall=pollsys err=4 execname=Xorg
libc.so.1`__pollsys+0x15
libc.so.1`pselect+0x18e
libc.so.1`select+0x82
Xorg`WaitForSomething+0x891
Xorg`Dispatch+0x242
Xorg`main+0x491
Xorg`_start+0x80
... skip ...
|
여러 개의 시스템 콜을 지정하려면, 콤마로 분리하여 여러 개를 지정할 수 있다.
시스템 콜 이름에 'all' 이라고 지정하면, 모든 시스템 콜 오류에 대하여 출력한다.
-0 옵션을 지정하면 위와 같이 시스템 콜을 호출한 시간 정보가 출력된다.
|
-t second |
-t second 옵션을 사용하여, 몇초 동안 시스템 콜을 조사할지 지정한다.
-t 옵션을 지정하지 않으면, Ctrl-C를 타이핑 타이핑할 때까지 계속 모니터링한다.
|
-V |
-V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
|
-X |
-X 옵션을 지정하면 "dtrace" 이름을 가진 프로세스의 system call은 처리하지 않는다.
|
|