FreeBSD에는 시스템의 상태를 보여주는 커맨드들이 예상외로 많다. 리눅스를 쓰면서도 많이 썼던 netstat 뿐만 아니라, iostat이니 gstat이니..
존재하는 각종 stat들은 요런것들이 있다.
elenoa-freebsd# ls -F /bin/*stat ls: No match. elenoa-freebsd# ls -F /usr/bin/*stat /usr/bin/btsockstat* /usr/bin/nfsstat* /usr/bin/systat* /usr/bin/fstat* /usr/bin/sockstat* /usr/bin/vmstat* /usr/bin/netstat* /usr/bin/stat* elenoa-freebsd# ls -F /usr/sbin/*stat /usr/sbin/gstat* /usr/sbin/iostat* /usr/sbin/slstat* /usr/sbin/hoststat@ /usr/sbin/pstat* /usr/sbin/ifmcstat* /usr/sbin/purgestat@ elenoa-freebsd# 저 중에 /usr/sbin/purgestat 과 /usr/sbin/hoststat 은 /usr/sbin/mailwrapper의 symbolic link이다. 일단 제외하자.
*stat들의 간단한 설명. 설명 닫기.
대략 저놈들이 어떤 역할을 하는 것들인지 알아보면,
/usr/bin/btsockstat Bluetooth 소켓의 정보를 보여준다고 한다. 물론 사용해보지는 않았다./usr/bin/nfsstat NFS 상태를 보여준다고 한다. /usr/bin/systat 시스템 상태를 보여준다고 한다. 하지만 이것을 유용하게 써 본 기억은 없다./usr/bin/fstat active 상태의 파일을 보여준다고 한다. open된 file descriptor 를 보여준다./usr/bin/sockstat open된 socket들을 보여준다./usr/bin/vmstat 가상 메모리의 상태를 보여준다./usr/bin/netstat 네트워크의 상태를 보여준다./usr/bin/stat 파일 상태를 보여준다. 단일 파일의 상태를 보여주는 것이다./usr/sbin/gstat GEOM disk에 대한 통계를 보여준다. GEOM이란.. FreeBSD에서 disk등의 device에 대해서 사용하는 기술의 이름인 것 같다. 사실, 별 관심은 없다./usr/sbin/iostat I/O에 대한 정보를 보여준다. 주로 tty, disk device, cpu 등의 정보가 표시된다./usr/sbin/slstat serial line IP에 대한 상태를 보여준다(, 고 한다;). 물론 써보지는 않았다./usr/sbin/pstat 오픈된 파일 entry, 스왑 공간 활용도, 터미널 상ㅌ애, vnode 데이터 구조체의 상태를 보여준다(고 한다;;)./usr/sbin/ifmcstat 커널에서 가져온 multicast group에 대한 정보를 보여준다고 한다. netstat -ina와 아주 유사하나 다르다고 하지만.. 정말 써보지 않았다;대부분 시스템 통계에 관한 명령은 뒤에 숫자로 인터벌을 입력함으로써 초 간격으로 주기적으로 뿌려지는 통계를 확인할 수 있다. 이를테면 netstat 1, vmstat 1, iostat 1 이런 명령을 많이 사용했다.
설명 닫기.
netstat 1 같은 경우 매우 흥미로운데, 해당 기능을 하는 명령이 linux에 없어서 script를 이용해 작성했던 기억이 있다.
netstat 1 사용 예. 사용 예 닫기.
elenoa-freebsd# netstat 1 input (Total) output packets errs bytes packets errs bytes colls 206 0 23234 283 0 426033 0 202 0 18888 299 0 448966 0 207 0 24684 301 0 454354 0 223 0 37102 269 0 402529 0 220 0 33304 309 0 466314 0 206 0 19128 304 0 453600 0 218 0 33144 302 0 450132 0 213 0 23032 275 0 411565 0 219 0 22550 316 0 453296 0 202 0 16956 301 0 451978 0 208 0 25702 299 0 451358 0 212 0 20994 278 0 416083 0 213 0 27272 304 0 454614 0 214 0 29268 300 0 450472 0 218 0 35068 298 0 449848 0 217 0 30942 281 0 420601 0 204 0 21682 300 0 452780 0 211 0 27164 299 0 448966 0 218 0 22606 280 0 410628 0 210 0 18684 298 0 446203 0 input (Total) output packets errs bytes packets errs bytes colls 207 0 23696 302 0 455748 0 ^C elenoa-freebsd#
사용 예 닫기. 옵션없이 실행하면 모든 interface에 관한 내용이 표시되고, 옵션에 따라 protocol 별, interface 별 throughput을 확인할 수 있다.
vmstat 과
iostat 은 용도에 따라 선택해서 사용할 수 있을 것 같다. 세부 옵션까지는 정확시 살펴보지는 않았지만, vmstat은 memory 위주로, iostat은 각종 device의 io 위주로 표시되는 것 같다.
vmstat과 iostat의 실행 예. 실행 예 닫기.
elenoa-freebsd# vmstat 1 procs memory page disks faults cpu r b w avm fre flt re pi po fr sr ad1 da0 in sy cs us sy id 1 3 0 210760 30368 75 0 0 0 387 310 0 0 170 36 180 2 15 83 1 3 0 210768 52956 55 0 0 0 1187 6774 0 35 7082 11386 12708 2 17 82 0 3 0 210784 50000 54 0 0 0 790 0 0 22 4762 7840 8593 2 11 87 0 3 0 210792 46024 53 0 0 0 1045 0 0 30 6199 10253 11778 4 11 85 0 3 0 210800 41808 53 0 0 0 1104 0 0 37 6423 10352 12028 2 11 88 0 3 0 210808 36804 85 0 0 0 1329 0 0 38 8006 12340 14507 2 15 84 ^C elenoa-freebsd# iostat 1 tty ad1 da0 pass0 cpu tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id 0 90 11.64 12 0.13 124.11 37 4.43 0.00 0 0.00 2 0 9 6 83 0 232 0.00 0 0.00 128.00 38 4.74 0.00 0 0.00 0 0 7 6 87 0 77 12.00 10 0.12 126.07 57 7.07 0.00 0 0.00 2 0 16 12 71 0 77 0.00 0 0.00 128.00 81 10.15 0.00 0 0.00 4 0 9 16 72 0 77 0.00 0 0.00 128.00 95 11.88 0.00 0 0.00 5 0 18 22 55 ^C elenoa-freebsd#
실행 예 닫기. sockstat 은 조금 특이한데, FreeBSD에는 netstat -l 명령이 먹지 않아 여기저기 뒤지다가 알아낸 명령이다. 해당 명령은 sockstat -l 과 대응된다.
netstat과 sockstat의 linux와 freebsd 실행 예. 실행 예 닫기.
linux 상에서는 이와 같이 명령을 내린다면,
elenoa# netstat -n -A inet Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.0.202:22 192.168.0.98:4415 ESTABLISHED tcp 0 0 192.168.0.202:22 192.168.0.98:3488 ESTABLISHED tcp 0 0 192.168.0.202:32855 192.168.0.203:22 ESTABLISHED tcp 0 0 192.168.0.202:32851 192.168.0.203:22 ESTABLISHED tcp 0 0 192.168.0.202:32852 222.122.152.31:22 ESTABLISHED tcp 0 0 192.168.0.202:22 192.168.0.12:1847 ESTABLISHED tcp 0 0 192.168.0.202:22 192.168.0.12:3671 ESTABLISHED tcp 0 0 192.168.0.202:22 192.168.0.12:3499 ESTABLISHED tcp 0 0 192.168.0.202:22 192.168.0.12:1424 ESTABLISHED elenoa# netstat -n -l -A inet Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:32769 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2402 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2403 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:32768 0.0.0.0:* udp 0 0 0.0.0.0:670 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* udp 0 0 0.0.0.0:631 0.0.0.0:* udp 0 0 192.168.0.202:123 0.0.0.0:* udp 0 0 127.0.0.1:123 0.0.0.0:* udp 0 0 0.0.0.0:123 0.0.0.0:* elenoa# FreeBSD에서는 이렇게 된다.
elenoa-freebsd# netstat -n -f inet Active Internet connections Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp4 0 0 192.168.0.203.55788 222.122.153.11.22 ESTABLISHED tcp4 0 0 192.168.0.203.22 192.168.0.202.32855 ESTABLISHED tcp4 0 64 192.168.0.203.22 192.168.0.202.32851 ESTABLISHED tcp4 0 0 192.168.0.203.63050 125.141.193.9.22 ESTABLISHED tcp4 0 0 192.168.0.203.22 192.168.0.109.1289 ESTABLISHED tcp4 0 0 192.168.0.203.58011 222.122.181.11.22 ESTABLISHED tcp4 0 0 192.168.0.203.22 192.168.0.21.63657 ESTABLISHED elenoa-freebsd# sockstat -l -4 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sendmail 411 3 tcp4 127.0.0.1:25 *:* root sshd 405 4 tcp4 *:22 *:* root syslogd 289 6 udp4 *:514 *:* elenoa-freebsd#
실행 예 닫기. 물론, 완전히 같지는 않다.
gstat 은 상당히 특이한 놈이다. (사실 해당되는 linux용 명령어를 본 적은 없다)
gstat의 사용 예와 간단한 설명. 사용 예 닫기.
명령을 내리면 top처럼 초당 갱신하는 스크린을 하나 만들고, 그 세부적인 모양은 요렇게 생겼다.
dT: 0.507 flag_I 500000us sizeof 240 i -1 L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name 0 0 0 0 0.0 0 0 0.0 0.0| acd0 0 6 6 758 0.2 0 0 0.0 0.1| da0 0 0 0 0 0.0 0 0 0.0 0.0| ad1 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1 0 6 6 758 0.2 0 0 0.0 0.1| da0s1 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1a 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1b 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1c 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1d 0 0 0 0 0.0 0 0 0.0 0.0| ad1s1e 0 0 0 0 0.0 0 0 0.0 0.0| da0s1c 0 6 6 758 0.2 0 0 0.0 0.1| da0s1d 유심히 봐야 할 곳은 첫 줄의 L(q)와 마지막의 %busy이다. 중간의 통계야 iostat에서 확인 가능한 내용과 유사한 것인듯 하다. 그러므로 패스.
첫 줄의 L(q)는 해당 device에 접근하기 위한 micro command가 대기하고 있는 숫자, 로 추정된다. 마지막의 %busy야 disk의 사용률로 쉽게 추정된다. 따라서 두 숫자로써 해당 disk가 얼마나 바쁘게 동작하고 있는지 알 수 있다.
사용 예 닫기. fstat 은, 단순히 명령을 내린다면 무시무시한 라인의 report를 보게 될 것이다. 이것을 조금 줄여보고자 한다면 간단하게나마 이런 명령이 효율적이다.
fstat의 사용 예와 간단한 설명. 사용 예 닫기.
elenoa-freebsd# fstat -f /dev [root@rts1001:~]:> fstat -f /dev USER CMD PID FD MOUNT INUM MODE SZ|DV R/W root fstat 27940 0 /dev 88 crw--w---- ttyp0 rw root fstat 27940 1 /dev 88 crw--w---- ttyp0 rw root fstat 27940 2 /dev 88 crw--w---- ttyp0 rw root fstat 27940 3 /dev 15 crw-r----- mem r root fstat 27940 4 /dev 16 crw-r----- kmem r nobody httpd 27825 0 /dev 19 crw-rw-rw- null r nobody httpd 27825 1 /dev 19 crw-rw-rw- null w nobody httpd 27825 0 /dev 19 crw-rw-rw- null r nobody httpd 27825 1 /dev 19 crw-rw-rw- null w nobody httpd 27825 0 /dev 19 crw-rw-rw- null r ...... (너무 길어서 줄임;;) elenoa-freebsd# 즉, fstat -f (directory) 형식의 명령이 유효하며, directory는 df에서 확인할 수 있는 mount root가 유효하다. 괜히 별도로 mount되어 있지 않은, 이를테면 /etc 디렉토리 같은 경로를 지정했다면 해당 경로가 포함된 최상의 mount root인 / 가 지정된 것과 동일한 효과가 나온다.
이 명령은 어떤 process가 어떤 물리적인 device에 어떤 형식으로 접근하고 있는지 표시해준다. 만일 대상이 물리적인 파일이라면, inode 번호까지 표시해준다. 해당 inode 번호로 파일 위치를 알아내고 싶다면 find 에서 -inum 옵션을 사용할 수 있다.
아참. thread 같은 경우 중복 표시할 지도
(경험상 맞는것 같다;) 주의하는 것이 좋다.
사용 예 닫기. 이상. 끝.