서버가 부하가 가중되면 가장 먼저 알아내야 하는것이 원인을 파악하는 것일 겁니다. 하지만 그러기 어려운 상황이라면 가장 먼저 파악해야 하는것이 CPU에서 오는 부하인지 I/O에서 오는 부하인지를 알아내야 할 것입니다.
우선 기본적으로 부하상태(Load Average)를 알아내기 위해 top, w, uptime의 명령어를 활용할 수 있습니다.
top
top - 11:46:06 up 77 days, 1:16, 1 user, load average: 0.06, 0.15, 0.11 Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie Cpu(s): 6.5%us, 0.5%sy, 0.0%ni, 92.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 4033528k total, 1571260k used, 2462268k free, 26472k buffers Swap: 3911816k total, 128k used, 3911688k free, 627956k cached
w
11:47:39 up 77 days, 1:17, 1 user, load average: 0.08, 0.14, 0.11 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 121.133.79.177 11:13 0.00s 0.01s 0.00s w
uptime
11:47:56 up 77 days, 1:18, 1 user, load average: 0.06, 0.13, 0.10
top > w > uptime 순으로 보여지는 정보의 양이 적어지는군요. top의 경우에는 실행중인 프로세스의 목록도 표시됩니다. 오늘 언급하려는것은 sar(System Activity Reporter)입니다. 매우 간단하게 부하를 분류하여 보여줍니다.
$ sar Linux 2.6.18-238.19.1.el5 (Theeye) 09/29/11 16:20:10 CPU %user %nice %system %iowait %steal %idle 16:30:10 all 17.81 0.84 2.75 68.50 0.00 10.10 16:40:23 all 16.75 0.00 3.26 69.68 0.00 10.30 Average: all 17.28 0.41 3.01 69.10 0.00 10.20
위의 시스템은 IO대기가 차지하는 비율이 70%에 육박하는 상태입니다. IO문제가 분명하군요. 보통 DB 서버들이 부하가 걸릴때 위와 같은 모습을 보입니다. 이 경우 메모리를 증설하면 디스크에 읽고 써야 하는 데이터를 그만큼 메모리에 올릴 수 있어 디스크의 IO를 현저히 줄일 수 있습니다.
$ sar Linux 2.6.18-238.19.1.el5 (Theeye) 09/29/11 14:30:01 CPU %user %nice %system %iowait %steal %idle 15:50:01 all 14.67 0.10 4.51 1.63 0.00 79.08 16:00:01 all 17.06 4.91 4.96 1.53 0.00 71.53 16:10:01 all 14.63 0.00 4.74 1.21 0.00 79.41 Average: all 13.04 2.18 3.98 8.36 0.00 72.45
메모리를 8G에서 16G로 증설한 후의 모습입니다. 정말 신기할 정도로 IO가 줄었네요. sar에서 자주 쓰이는 옵션으로는 다음과 같은 것이 있지 않을까 생각합니다.
-u : CPU 사용율 확인
-P : 특정 CPU의 사용율 확인 (sar -P 0)
-q : Load Average 확인
-r : 메모리 사용 현황 확인
sar는 sysstat 패키지에 포함되어있습니다. 다음과 같이 설치 가능합니다.
$ yum install sysstat