[시스템] 시스템 자원 모니터링 – 튜닝 (아랑)
////// 시스템 모니터링 //////// – 무천 아랑
시스템의 성능을 분석 하는 여러가지 툴에 대해 설명 한다.
1. CPU 활동 모니터링
——————————————————————
[root@howcodi : /]# uptime
——————————————————————
14:04 up 12 days, 4:02, 6 users, load average: 0.00, 0.04, 0.05
현재시간 / 시스템이 종사한 시간 / 현 시스템 사용자수 / 평균부하치 /
평균부하치는 5분,10분,15분 각각의 평균치 이다.
———————————————————————–
[root@howcodi : /]# ps aux | head -5
———————————————————————–
USER PID %CPU %MEM VSZ RSS TTY S STARTED TIME COMMAND
nobody 22099 2.1 0.4 16.6M 3.9M ?? S 09:14:08 0:31.33 /usr/local
nobody 16076 1.3 0.3 15.5M 2.9M ?? S 14:05:46 0:00.61 /usr/local
oracle 22039 1.3 0.2 134M 1.8M ?? S 09:15:22 0:08.82 oracleORCL
nobody 15369 0.6 0.4 16.5M 3.8M ?? S 09:14:03 0:27.49 /usr/local
여기서 head -5 를 붙여주므로 해서 CPU 활동순위가 높은것부터 차례로 볼수가 있다.
USER : 프로세서 소유자
PID : 프로세서 번호
%CPU : 사용된 CPU의 측정량
%MEM : 사용된 메모리 측정량
VSZ : BSD와 System V 에 사용된 가상메모리
RSS : 사용된 실제 메모리
TTY ; 프로세서와 관련된 터미널
S : 프로세서 활동 상태
/ R / : 실행중 또는 실행 가능 상태
/ S / : 비활성 상태
/ I / : 휴지 상태
/ T / : 정지 상태
/ Z / : 좀비 프로세스
/ D / : 디스크 대기
/ W / : 스왑된것
STARTED : 프로세스가 실행 시작된 시간
TIME : 실행된 시간
COMMAND : 명령어
————————————————————————-
[root@zzang911 /root]# pstree
————————————————————————-
init-+-automount
|-crond
|-hanterm—bash—root—su—bash
|-2*[hanterm—bash—how—telnet]
|-hanterm—bash—vi
|-hanterm—bash—root—su—bash—pstree
|-httpd—22*[httpd]
|-identd—identd—3*[identd]
|-inetd
|-kflushd
|-klogd
|-kpiod
|-kswapd
|-kupdate
|-login—bash—startx—xinit-+-X
| `-wmaker-+-gkrellm
| |-hanterm—bash
| |-hanterm—bash—how—telnet
| |-hanterm—bash—root—su—bash
| |
| |-netscape-commun—netscape-commun
| |-wmami
| `-xmms—xmms—4*[xmms]
|-mingetty
|-named
|-proftpd
|-syslogd
|-vmnet-bridge
|-vmnet-dhcpd
|-vmnet-netifup
|-vmware-nmbd
`-vmware-smbd
pstree 는 시스템 프로세스의 구조를 시각적으로 모니터링 해준다.
————————————————
[root@howcodi : /]# ulimit -Sa
————————————————
core file size (blocks) unlimited
data seg size (kbytes) 131072
file size (blocks) unlimited
max memory size (kbytes) 1018080
open files 4096
pipe size (512 bytes) 8
stack size (kbytes) 2048
cpu time (seconds) unlimited
max user processes 1024
virtual memory (kbytes) 1048576
———————————————–
[root@howcodi : /]# ulimit -Ha
———————————————–
core file size (blocks) unlimited
data seg size (kbytes) 1048576
file size (blocks) unlimited
max memory size (kbytes) 1018080
open files 4096
pipe size (512 bytes) 8
stack size (kbytes) 32768
cpu time (seconds) unlimited
max user processes 1024
virtual memory (kbytes) 1048576
ulimit -Sa 는 프로세서의 soft 한도를 나타내고 -Ha는 하드웨어 한도를 나타낸다.
————————————————————
[root@howcodi : /]# vmstat 5 5
————————————————————
Virtual Memory Statistics: (pagesize = 8192)
procs memory pages intr cpu
r w u act free wire fault cow zero react pin pout in sy cs us sy id
3 167 29 43K 75K 8178 22M 4M 7M 44K 5M 1888 32 286 595 3 0 96
3 167 29 43K 75K 8178 164 20 114 0 11 0 8 23 335 0 0 100
3 167 29 43K 75K 8178 89 0 89 0 0 0 16 44 420 0 0 100
3 167 29 43K 75K 8178 92 0 89 0 3 0 17 137 486 1 0 99
3 167 29 43K 75K 8178 94 0 89 0 5 0 26 189 556 1 0 98
vmstat 는 메모리 모니터링 도구 이지만 CPU 활동 항상도 포함하고 있다.
vmstat 5 5 는 5초 간격으로 5번 출력하라는 의미이다.
us : 사용자 프로그램을 실행시키는 사용 시간의 비율
sy : CPU 시간 단위로 소비된 CPU 사이클의 비율
id : 휴지시간 비율 ( 놀고 있는 시간 )
참고 : sy 가 50% 가 넘는다면 이는 I/O 에 문제가 있음을 예상할수 있다.
해당 프로그램이 효율적으로 I/O 를 사용하는지 확인 바람..
id 가 항상 0 이다.즉 cpu 가 항상 일만 한다고 생각하면 된다.
이역시 어디선가 작업이 계속 축적되고 있다고 보면 된다.
확인 한후 사살해라.
2. 메모리 관리와 모니터링
페이징(paging)과 스왑핑(swapping)에 대해 잠시 얘기 하도록 하자.
swapping 은 하나의 프로세스 전보를 디스크에 기록함으로 해서 자신의
메모리를 모두 비우는 것을 말한다. paging은 메모리를 필요로하는 해당
프로세서나 다른 프로세스를 위해 프로세스의 메모리 영역을 페이지 라고
불리는 단위로 디스크에 옮기는 것을 말한다.
page fault 는 프로세스가 메모리에 상주하지 않은 페이지를 필요로 할때
발생하며 swapping 은 거의 드물게 일어나며 (심각한 메모리 부족시) 의미
는 거의 비슷하다.
현재 시스템의 메모리 확인
————————————————
[root@howcodi : /]# grep mem /var/adm/messages
————————————————
Sep 7 01:03:45 howcodi vmunix: physical memory = 1024.00 megabytes.
Sep 7 01:03:45 howcodi vmunix: available memory = 994.00 megabytes.
현재 시스템의 swap 확인
————————————————
[root@howcodi : /]# swapon -s
————————————————
Swap partition /dev/rz16b (default swap):
Allocated space: 387962 pages (3030MB)
In-use space: 3112 pages ( 0%)
Free space: 384850 pages ( 99%)
Total swap allocation:
Allocated space: 387962 pages (3030MB)
Reserved space: 44714 pages ( 11%)
In-use space: 3112 pages ( 0%)
Available space: 343248 pages ( 88%)
메모리 문제 파악하기
시스템에 과부하가 걸려있는데도 휴지기간(idle time)이 많거나 ps에서 많은
양의 메모리를 필요로 하는 프로그램이 실행되고 있다면 메모리 문제를 생각해
볼 수 있다.
ㅇ vmstat 5 를 실행해보자.
– swap-out이 지속적으로 항상 발생한다면 메모리가 부족한 것이다.
주기적으로 swap-outs이 발생하는건 정상적인 것이다. BSD 시스템
에서는 비상호대화적인 작업을 스왑아웃한다.
현재 실행하고 있는 프로그램에서 스왑아웃이 계속 발생한다면 프로그램이
죽을 수도 있으며 심각하게 메모리가 부족하다는것을 가리킨다. 스왑아웃필드
(so)가 항상 0에 가까워야한다.
– ps나 통계시스템에서 메모리 집약적인 작업이 있는가? RSS필드나 storage
integral이 큰 프로그램을 찾아보자.
(RSS는 프로세스가 사용중인 실제 메모리 크기. kbytes 단위.)
(storage integral은 sa -K 옵션을 이용해 볼수있음.)
3. 네트워크 부하량 체크
Traceroute (ftp://ftp.ee.lbl.gov/traceroute.tar.Z)
네트워크 연결 경로에 대한 라우팅 홉(HOP)지점마다의 주소와 그 속도를 측정할수 있는
유틸리티로 Linux의 경우 기본적으로 설치되어 있다.
traceroute -q 3 www.netkiller.com
Ping
양 끝단의 전체적인 속도 및 패킷 에러율을 체크하고자 할 경우 ping을 통해 일정량의 패킷을
보내어 다시 받을 때까지 걸리는 전체 시간과 패킷 손실율을 측정할 수 있다.
– Sample –
[root@ns named]# ping -c 10 www.netkiller.com
## www.netkiller.com 으로 총 10번의 ping을 실행한다.
PING www.netkiller.com (210.103.183.35): 56 data bytes
64 bytes from 210.103.183.35: icmp_seq=0 ttl=251 time=377.5 ms
64 bytes from 210.103.183.35: icmp_seq=1 ttl=251 time=417.6 ms
64 bytes from 210.103.183.35: icmp_seq=2 ttl=251 time=247.7 ms
64 bytes from 210.103.183.35: icmp_seq=3 ttl=251 time=367.1 ms
64 bytes from 210.103.183.35: icmp_seq=4 ttl=251 time=462.1 ms
64 bytes from 210.103.183.35: icmp_seq=5 ttl=251 time=957.6 ms
64 bytes from 210.103.183.35: icmp_seq=6 ttl=251 time=179.3 ms
64 bytes from 210.103.183.35: icmp_seq=7 ttl=251 time=77.0 ms
64 bytes from 210.103.183.35: icmp_seq=8 ttl=251 time=69.9 ms
64 bytes from 210.103.183.35: icmp_seq=9 ttl=251 time=498.8 ms
— www.netkiller.com ping statistics —
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 69.9/365.4/957.6 ms
netstat , ifconfig
서버의 전체적인 네트워크 패킷 충돌율을 체크할 경우 netstat – i 나 ifconfig -a
의 결과에서 직접 계산할 수 있다.
– Sample –
[root@zzang911 /root]# ifconfig -a
eth0Link encap:EthernetHWaddr 00:00:B4:B7:DD:19
inet addr:210.220.69.135Bcast:210.220.69.255Mask:255.255.255.0
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:8578 errors:0 dropped:0 overruns:0 frame:0
TX packets:1023 errors:0 dropped:0 overruns:0 carrier:0
collisions:59 txqueuelen:100
Interrupt:10 Base address:0xb400
eth0란에서 Collisions수만큼의 충돌이 TX packets (출력 패킷)에 대해
발생하였으므로 (10/59) X 100 을 통해 충돌율이 약 2.7% 라는것을
확인할수 있다.
보통 약 8% 이상의 충돌율을 보인다면 네트워크를 점검해 보아야 한다.
위 옵션 설명들은 유닉스 계열에 가깝다..리눅스와는 다소 차이가 있을수 있다.
하지만..비슷비슷~