[바다]님이 남기신 글:
>안녕하세요?
>
>날씨가 봄날씨 같습니다.
>이런날은 일은 접어두고
>기차타고 멀리 바다라도 보러가고 싶네요,,, ^^*
>
>다름이 아니라,
>운영중인 서버 한대에서 트래픽 과다로 인한 웹접속 문제가 발생하고 있는데 어떻게 처리해야 할지 몰라서 문의 드립니다. ^^;
>
>조금 전에 보니
>해당 서버에 셋팅되어 있는 수많은 도메인들 중에
>일부 도메인들에 접속이 안되고 있어서
>top 명령어로 보니 load average 가 13 전후로 나오고 있습니다.
>참고로 본 서버에는 도메인이 좀 많이(수백개) 셋팅되어 있고
>일부 도메인들은 접속이 좀 많습니다.(방문자 수가 좀 많습니다.)
>
>가끔 이런식으로 load average 가 많이 걸려서
>일부 도메인들이 접속이 안될 때에는 named 및 apache 데몬을 재부팅하곤합니다.
>그러면 또 접속은 원활해집니다. ^^;;
>일주일에 몇번 정도는 이렇게 하는 것 같습니다...
>
>
>트래픽이 많이 발생하는 도메인들을 좀 다른 서버로
>분산해야 할것 같은데,,,
>물론 웹싸이트에 카운터를 설치해서 어느 도메인(웹싸이트)에
>하루에 어느정도 접속이 많은지 또 어느 도메인이 제일
>트래픽이 많은지 파악하는 방법도 있겠습니다만,,,
>(웹싸이트의 카운터를 통해서는
>접속자 수가 많은 싸이트는 대충은 알고는 있습니다만,,,)
>
>서버 내에서 load average 가 이렇게 많이 걸리는 순간에
>어느 도메인쪽에 load(접속 트래픽)가 어느만큼 걸리는지를 파악하는
>방법이 없을런지요,,,?
>즉, 모니터링하는 시간에 실시간으로 순간 순간 파악할 수 있다면
>정확하게 어느 도메인부터 분산처리 대상이 되는지를 파악할 수 있고
>무엇보다 일주일 및 24시간을 기본 주기로 했을때에
>어느 요일 어느 시간대에 접속량이 어떻게 걸리는지를 파악해서
>보다 효율적인 서버 운영이 가능할것 같아서 그렇습니다.
>
>
>참 그리고 한가지 더,,,
>
>named 데몬쪽이 181M 정도의 memory를 잡아먹고 있는것 같은데
>도메인이 많으면 이렇게 메모리 용량을 많이 잡아먹나요?
>아니면 도메인 개수보다는 트래픽(접속량) 때문에 그런것인지요...?
>
>
>//참고로 top -c 명령어로 본 상태를 하기와 같이 덧붙입니다.
>----------------------------------------------------------------
>[root@root]# top -c
>
> 12:38pm up 35 days, 17:38, 1 user, load average: 13.11, 13.55, 7.17
>145 processes: 136 sleeping, 9 running, 0 zombie, 0 stopped
>CPU states: 2.9% user, 1.3% system, 0.0% nice, 95.6% idle
>Mem: 255844K av, 251872K used, 3972K free, 0K shrd, 1480K buff
>Swap: 522072K av, 237448K used, 284624K free 8260K cached
>
> PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
>14381 named 15 0 181M 141M 115M R 1.1 56.5 155:43 named -u named
>25517 root 15 0 1148 1148 860 R 0.7 0.4 0:00 top -c
>24699 nobody 15 0 7368 5616 4948 S 0.3 2.1 0:00 /home/httpd/bin/httpd
>25434 nobody 15 0 7288 5480 4456 S 0.3 2.1 0:00 /home/httpd/bin/httpd
>24221 nobody 15 0 7296 5504 5484 S 0.1 2.1 0:00 /home/httpd/bin/httpd
>24757 nobody 15 0 7356 5564 4908 S 0.1 2.1 0:00 /home/httpd/bin/httpd
>24769 nobody 15 0 7360 5516 4896 S 0.1 2.1 0:00 /home/httpd/bin/httpd
>24771 nobody 15 0 7364 5520 4884 S 0.1 2.1 0:00 /home/httpd/bin/httpd
>25198 root 15 0 1312 1052 936 R 0.1 0.4 0:00 /usr/sbin/sshd
> 1 root 15 0 440 396 384 S 0.0 0.1 0:08 init [3]
> 2 root 15 0 0 0 0 SW 0.0 0.0 0:03 keventd
> 3 root 15 0 0 0 0 SW 0.0 0.0 0:00 kapmd
> 4 root 34 19 0 0 0 SWN 0.0 0.0 0:01 ksoftirqd_CPU0
> 5 root 15 0 0 0 0 SW 0.0 0.0 147:57 kswapd
> 6 root 15 0 0 0 0 SW 0.0 0.0 0:00 bdflush
> 7 root 15 0 0 0 0 SW 0.0 0.0 0:00 kupdated
> 8 root 25 0 0 0 0 SW 0.0 0.0 0:00 mdrecoveryd
> 14 root 25 0 0 0 0 SW 0.0 0.0 0:00 scsi_eh_0
> 17 root 15 0 0 0 0 SW 0.0 0.0 0:33 kjournald
> 92 root 16 0 0 0 0 SW 0.0 0.0 0:00 khubd
> 188 root 15 0 0 0 0 SW 0.0 0.0 0:00 kjournald
> 189 root 15 0 0 0 0 SW 0.0 0.0 0:25 kjournald
> 190 root 15 0 0 0 0 SW 0.0 0.0 0:00 kjournald
> 191 root 15 0 0 0 0 SW 0.0 0.0 5:10 kjournald
> 674 root 15 0 552 504 472 S 0.0 0.1 10:51 syslogd -m 0
> 679 root 15 0 400 344 344 S 0.0 0.1 0:00 klogd -x
> 763 root 15 0 708 532 532 S 0.0 0.2 0:45 /usr/sbin/sshd
> 788 root 15 0 716 536 536 S 0.0 0.2 0:02 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid
> 827 root 15 0 556 512 512 S 0.0 0.2 0:03 crond
> 837 root 15 0 5868 3684 3660 S 0.0 1.4 0:18 /home/httpd/bin/httpd
> 838 root 15 0 632 464 464 S 0.0 0.1 0:00 /bin/sh /usr/local/mysql/bin/safe_mysqld -u root --language=korean
> 847 nobody 15 0 736 580 580 S 0.0 0.2 0:06 proftpd (accepting connections)
> 864 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty1
> 865 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty2
> 866 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty3
> 867 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty4
> 868 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty5
> 869 root 16 0 364 312 312 S 0.0 0.1 0:00 /sbin/mingetty tty6
> 881 root 15 0 14500 5932 5536 S 0.0 2.3 2:37 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=
> 887 root 16 0 14500 5932 5536 S 0.0 2.3 3:15 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=
> 888 root 15 0 14500 5932 5536 S 0.0 2.3 0:20 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=
>14378 named 15 0 181M 141M 115M S 0.0 56.5 0:00 named -u named
>14380 named 15 0 181M 141M 115M S 0.0 56.5 0:00 named -u named
>-------------------------------------------------------------------
>
>
>답변에 미리 감사드립니다. ^^*
========================================
일단
w
ps, top
free
df
dmesg
순으로 시스템 전체 상황을 빠르게 판단합니다.
위의 경우, CPU 사용률은 5% 정도 인데 시스템 부하가 상당합니다.
이 의미는 httpd 가 실행하는 각종 웹소스(예:php, jsp, cgi)쪽에 문제가
있는 것입니다.
즉 CPU 자원을 많이 사용하지 않고 특정 프로세스(자식프로세스)에서 일종의 지연(랙)같은 것이 많이 있다는 증거입니다.
이 프로세스를 찾아내야 하는데 아파치 같은 경우
http://www.foobar.com/server-status
을 통해서 알아 낼 수 있습니다. 이 설정이 없다면 httpd.conf 파일을
수정해서 아파치를 다시 restart 하세요
다른 방법으로는 아파이 로그에 서버쪽에서 실행하는 시간을 로그에
기록하게끔하고 나중에 분석해 보는 방법도 있습니다.
참조)
http://linuxchannel.net/board/read.php?table=alpha&no=136&page=2
apache 1.3 은 로그포맷이 %T 이고 2.0 은 %D 일겁니다.
(2초나 3초 이상 걸리는 요청은 따로 분석해야함)
그리고 트래픽은 mod_throttle 을 이용하면 어느 싸이트에서 트래픽이
많이 발생하는지 알 수 있을 겁니다.
또하나 이미지 관련 커넥션이 상당히 많을 것으로 생각되네요.
아치 expire 모듈을 이용해서 1분 정도 이미지 파일에 한해서 적용하는
것도 괜찮습니다(싸이트 관리자 동의가 필요하고, 실시간으로 바뀌는 이미지라면 비권장)
맨마지막으로 역시 커널쪽 파라미터, 특히 TCP 관련 내용을 튜닝해야하는데 이건 상당히 어렵습니다. 내용도 방대하고, 서버마다 특이사항이 너무 많기 때문에...
그럼 |