웹 서버 포퍼먼스 튜닝 [2] – 웹성능 체크

앞내용에 이어서 튜닝이 필요한 상황인지를 파악하는 단계로 웹성능

체크와 웹 부하률 체크에 대해 다루겠습니다.

3. 웹 부하량 체크 방법

제대로된 튜닝을 하기 위해서는 우선 자신의 네트워크 및 시스템에 대한 부하를 체크할 필요가

있다.

여기서는 네트워크 및 웹 서버에 대한 종합적인 부하량 측정 방안을 알아보겠다.

가. 네트워크 부하량 체크

Traceroute (ftp://ftp.ee.lbl.gov/traceroute.tar.Z)

네트워크 연결 경로에 대한 라우팅 홉(HOP)지점마다의 주소와 그 속도를 측정할수 있는

유틸리티로 Linux의 경우 기본적으로 설치되어 있다.

– Sample –

[root@ns named]# traceroute -q 3 www.netkiller.com

## www.netkiller.com 에 대한 각 지점간 연결 속도를 3번씩 측정

traceroute to www.netkiller.com (210.103.183.35), 30 hops max, 40 byte packets

1 204.252.144.146 (204.252.144.146) 1.465 ms 1.433 ms 1.419 ms

2 210.116.126.41 (210.116.126.41) 17.030 ms 17.389 ms 357.989 ms

3 203.235.126.250 (203.235.126.250) 132.341 ms 18.414 ms 19.626 ms

4 210.103.227.38 (210.103.227.38) 203.928 ms 206.006 ms 179.701 ms

5 210.103.183.35 (210.103.183.35) 243.521 ms 24.088 ms 20.738 ms

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

이 경우 Avg Round-Trip time이 365.4 ms 가 나왔다.

일반적으로 자사의 라우터와 ISP간에 약 1,000 번의 ping 결과에서 에러율이 3~4% 미만이어야

한다.

netstat , ifconfig

서버의 전체적인 네트워크 패킷 충돌율을 체크할 경우 netstat – i 나 ifconfig -a

의 결과에서 직접 계산할 수 있다.

– Sample –

[root@ns named]# ifconfig -a

lo Link encap:Local Loopback

inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0

UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1

RX packets:99477 errors:0 dropped:0 overruns:0 frame:0

TX packets:99477 errors:0 dropped:0 overruns:0 carrier:0

collisions:0

eth0 Link encap:Ethernet HWaddr 00:10:5A:69:ED:92

inet addr:203.231.38.2 Bcast:203.231.38.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:813704 errors:0 dropped:0 overruns:0 frame:0

TX packets:646433 errors:0 dropped:0 overruns:0 carrier:0

collisions:17681

Interrupt:10 Base address:0xec00

여기서 lo는 로컬이므로 의미가 없으며, eth0란에서 Collisions수만큼의 충돌이 TX packets

(출력 패킷)에 대해 발생하였으므로 (17681/646433) X 100 을 통해 충돌율이 약 2.7%

라는것을

확인할수 있다.

보통 약 8% 이상의 충돌율을 보인다면 네트워크를 점검해 보아야 한다.

MRTG등의 네트워크 전문 유틸리티를 통한 부하량 체크

앞서 언급한 MRTG나 XNI 등의 부하량 및 패킷 전문 체크 프로그램을 이용하면 보다

시각적으로

패킷 에러와 속도를 측정할 수 있다.

– Sample http://www.xni.com –

나. 웹 성능 측정 방법들

time

time은 유닉스에서 프로그램의 실행 시간을 측정해주는 기본 명렁어이다. 웹 서버의 접속 및



Source를 받아오는데 걸리는 시간을 정확히 측정하고자 한다면 아래와 같이 해볼수 있다.

– Sample –

[root@ns named]# time lynx -source http://www.netkiller.com > /dev/null

0.05user 0.05system 0:02.34elapsed 4%CPU (0avgtext+0avgdata 0maxresident)k

0inputs+0outputs (1651major+639minor)pagefaults 0swaps

이것은 www.netkiller.com 의 웹 사이트에 lynx 브라우저로 접속하여 초기 웹 페이지의

source를

가져오는데 걸리는 총 시간을 측정한 결과인데, 소스의 경우 굳이 볼 필요가 없으므로

/dev/null로

보냈다. User : 0.05 , System : 0.05 그리고 총 실행 시간이 0:02.34 (2초 34) 가

걸렸으므로,

실제 접속 시간은 2.34 – (0.05 + 0.05) = 2.24초가 된다. 보다 정확한 측정을 위하여

위의 명령을 몇번 실행시켜 평균 시간을 측정하여야 될것이다. 특히 처음 접속은 DNS서버의

캐시를

이용하지 않기 때문에 가장 느릴수 있기 때문이다.

ApacheBench (http://www.zeustech.net/)

아파치 서버를 위한 전문 측정 툴이다. 이 유틸리티는 레드햇 5.2 정품 리눅스의 경우 기타

application CD에 RPM으로 함께 제공되고 있는데 상당히 세밀하게 웹 서버의 성능을 체크할수

있다.

– Sample –

[root@ns named]# ab

ab: wrong number of arguments

Usage: ab [options] [http://]hostname[:port]/path

Options are:

-n requests Number of requests to perform

-c concurrency Number of multiple requests to make

-t timelimit Seconds to max. wait for responses

-p postfile File containg data to POST

-T content-type Content-type header for POSTing

-v verbosity How much troubleshooting info to print

-V Print version number and exit

-k Use HTTP KeepAlive feature

-h Display usage information (this message)

[root@ns named]# ab -n 10 http://www.netkiller.com:80/

This is ApacheBench, Version 1.2

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998 The Apache Group, http://www.apache.org/

Server Software: Apache/1.3.1

Server Hostname: www.netkiller.com

Server Port: 80

Document Path: /

Document Length: 11417 bytes

Concurrency Level: 1

Time taken for tests: 16.625 seconds

Complete requests: 10

Failed requests: 0

Total transferred: 115460 bytes

HTML transferred: 114170 bytes

Requests per second: 0.60

Transfer rate: 6.94 kb/s received

Connnection Times (ms)

min avg max

Connect: 65 209 390

Processing: 886 1453 2210

Total: 951 1662 2600

TOP

상당히 많이 사용되고 있는 Processor의 상태를 보여주는 유틸리티로 RAM, CPU, IO ,

SwapSpace의 사용량까지 %로 자세히 보여준다.

특히 웹 서버의 경우 CPU 사용량이 계속적으로 50% 이상이고 IO쪽의 사용량이 크면서 하드

드라이브의 소음(?)이 심해지면 이것은 웹 서버 부하에 대한 시스템의 부족한 RAM에 의해

CPU가

과도한 일을 하고 있는 것이므로 CPU가 아닌 RAM의 증가가 필요하다.

다음 편으로는 실질적인 아파치 웹서버의 설정 부분을 다루겠습니다.

그럼…

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.