4,531,843 th visitor since 2017.2.1 ( Today : 10814 )
Computer ???
No. 43
Name. swindler
Subject. 아파치 이야기(아파치 서버 상태) - 2001/01
Main Cate. Linux
Sub Cate.
Date. 2005-03-30 16:34
Hit. 4367 (211.219.39.230)
File.
모듈 MOD_INFO 를 이용하여 기본적인 정보부터 우선 파악하자!
웹 서버상태 자세히 살펴보기 [mod_status]
내 서버의 성능은 과연 얼마일까 ?


아파치 웹 서버는 초기 이야기부터 지금까지도 지속적으로 언급했듯이, 전세계에서 가장 많이 사랑 받고 있는 서버임에 동시에 60%를 상회하는 점유률을 가지고 있는 웹 서버 중의 하나입니다. 이렇듯 계속 높은 점유율을 가지고 있다는 것을 언급하는 이유는 그것이 바로 아파치가 많은 쉐어를 가지고 있다는 것을 의미하며 보편적인 기능과 확장성 이라는 두 마리의 토끼 모두를 가지고 있기 때문임을 주지시켜 드리는 것이 그 이유가 되겠습니다. 앞서 서술해드린 제 "재미있는 아파치 이야기"를 계속 지켜보신 분들이라면 아마 제 말을 이해하실 수 있으리라 믿으며 동시에 자신만의 웹 서버를 이미 구축해 보신 분들도 꽤 있으신걸로 판단하고 있습니다. 그만큼 몇 번의 강좌만으로도 따라 할 수 있는 것이 이 아파치 웹 서버의 특징이며 아울러 보다 강력한 기능과 그의 확장능력도 마음껏 구사할 수 있는 프로그램이기도 합니다.



이 글을 쓰고있는 이 순간에도 아파치 웹 서버를 이용하여 운영하는 사이트도 날로 늘어가고 있으며, 더불어 웹 서버의 관리 또한 중요한 문제로 인식되고 있습니다. 자, 그럼 이러한 서버의 운영을 하기 위해서 필요한 정보는 무엇이라 생각하십니까? 당연하게도, 시스템 운영에 대한 Know-How 도 중요하겠지만 무엇보다도 여러분들의 운영에 중심이 되는 것이 웹 서버라 한다면 우선적으로 웹 서버가 지금 현재 어떠한 상황에 놓여있는지 등의 종합적인 정보를 취득하는 것이 그 일 순위가 되겠죠. 자.. 이제 제가 이번에는 무엇을 설명하려 하는지 이해하시겠습니까? 예, 정답입니다. 바로 이러한 종합적인 정보를 얻을 수 있는 방법 및 성능테스트에 중점을 두고 이번 이야기를 시작하도록 하겠습니다.



모듈 MOD_INFO 를 이용하여 기본적인 정보부터 우선 파악하자!



우선 우리가 본격적으로 웹 서버의 상태에 대한 정보를 파악하기 전에, 선행되어야 할 것이 여러분들의 시스템에 대한 기본적인 정보와 아파치 Configuration 에 대한 것입니다. 다년간 apache.kr.net 을 운영해 오며 느낀 공통적인 사항은 대다수의 많은 분들이 웹 서버에 설정된 파라미터 등을 포함한 설정 값 등을 인지하지 못한 채 , 설치할 시의 기본 환경설정으로 운영하는 경우가 부지기 수라는 점입니다. 말 그대로 디폴트 값으로 운영하신다는 말씀이죠. 그러나 이러한 정보는 웹 서버를 운영하는데 있어서 빠져서는 안될 중요한 정보중의 하나입니다. 일목요연하게 정리되어 한번에 쉽게 환경설정 등의 정보를 살펴보는 방법은 없을까요 ? 그 이름도 유명한 아파치 웹 서버인데, 이러한 것이 없을까요 ? 아니겠죠. 한 눈에 파악해 볼 수 있도록 도와주는 모듈이 있습니다. 모듈이름에서도 이미 알 수 있듯이 여러분들의 서버에 대한 정보를 포함하여, 설치되어져 있는 모듈에 이르기까지의 많은 정보를 제공해 줍니다. 이 모듈은 기본적으로 아파치 웹 서버 설치 시에 포함되어져 있지 않으므로 다시 재 컴파일을 하여 모듈을 추가해 주시거나 또는 DSO(Dynamic Shared Objects) 를 이용하여 아래와 같이 설정하여 사용하실 수 있습니다.



AddModule modules/standard/mod_info.o

Dynamic Shared Objects (DSO) 가 무엇인가요 ?



현재의 대부분 유닉스 시스템은 프로그램 실행 시에 일정 주소공간 안에 특정한 포맷으로 프로그램 코드의 일부분을 로드 하여 생성하는 방법을 제공하는 Dynamic Shared Objects (DSO)/dynamic linking 메커니즘이 존재하고 있습니다.

공통된 라이브러리의 코드를 다이나믹 하게 불러들일 때의 장점은 라이브러리 코드가 한번만 저장되어, 모든 프로그램에 대한 디스크 공간을 절약할 수가 있다는 점입니다.

이러한 메커니즘의 장점은 ?로딩되어져야 할 필요가 없는 프로그램 파트는 필요로 할 때까지는 사용하지 않으며 , 언젠가 필요하게 되어질 때 기본 프로그램 기능 위에 추가로 다이나믹 하게 필요한 파트의 모듈을 로드 하여 메모리 낭비 등을 줄일 수 가 있습니다. DSO 개념이 어려우시다고요 ? 아파치 웹 서버로 예를 들어볼께요; 아파치 웹 서버를 DSO 기능 없이 사용하면 필요한 모듈이 발생되어질 때마다 웹 서버를 다시 컴 파일 해야만 하는 불편함이 있지만, 이 기능을 이용한다면 언제든지 필요한 기능이 있을 시 마다 웹 서버 설정파일에 로드 되어질 모듈의 정의만 해 놓고 , 서버의 재 컴파일 없이 웹 서버의 리 로드 만으로 쉽게 모듈의 기능을 적용하실 수가 있습니다.

참고적으로 DSO를 지원하는 플랫폼은 다음과 같습니다 :




OS Version
FreeBSD (2.1.5, 2.2.x, 3.x, 4.x)
OpenBSD (2.x)
NetBSD (1.3.1)
BSDI (3.x, 4.x)
Linux (Debian/1.3.1, RedHat/4.2)
Solaris (2.4, 2.5, 2.6, 2.7)
SunOS (4.1.3)
Digital UNIX (4.0)
IRIX (5.3, 6.2)
HP/UX (10.20)
UnixWare (2.01, 2.1.2)
SCO (5.0.4)
AIX (3.2, 4.1.5, 4.2, 4.3)
ReliantUNIX/SINIX (5.43)
SVR4 (-)
Mac OS X Server (1.0)
Mac OS (10.0 preview 1)
OpenStep/Mach (4.2)
DGUX (??)
NetWare (5.1)









<그림1> mod_info 를 이용한 아파치 설정 보기





<그림1> 과 같이 현재 웹 서버에 설치되어져 있는 모듈에 대한 정보와 설정 정보를 제공해 주고 있습니다. 어떠세요 ? 한눈에 들어오시죠! 그러나, 처음 접해 보시는 분들에게는 mod_info 에 의해 출력되어져 나오는 화면들이 도대체 무엇을 뜻하는지 이해하기 힘드실 수 도 있습니다. 화면이 어떻게 구성되어져 있나 한번 알아보도록 하겠습니다.



아래와 같은 내용이 페이지 상단에 위치한 것은 원하는 정보로의 쉬운 이동을 위하여 하이퍼 링크(HyperLink) 되어 있는 것입니다.

Server Settings, mod_setenvif.c, mod_auth.c, mod_access.c, mod_alias.c, mod_userdir.c, mod_actions.c, mod_imap.c, mod_asis.c, mod_cgi.c, mod_dir.c, mod_autoindex.c, mod_include.c, mod_info.c, mod_status.c, mod_negotiation.c, mod_mime.c, mod_log_config.c, mod_env.c, http_core.c

위 링크된 내용 중에서 자세한 정보를 원하는 곳에 대해서 클릭을 하면 그에 해당하는 정보를 보여주게 되며, 다음은 Server Settings 에 해당하는 내용입니다.



Server Version: Apache/1.3.12 (Unix)
Server Built: Jul 4 2000 01:28:01
API Version: 19990320:7
Run Mode: standalone
User/Group: nobody(60001)/-1
Hostname/port: www.apache.kr.net:2130
Daemons: start: 2 min idle: 5 max idle: 10 max: 150
Max Requests: per child: 0 keep alive: on max per connection: 100
Threads: per child: 0
Excess requests: per child: 0
Timeouts: connection: 300 keep-alive: 15
Server Root: /home/bong/intexp/workout/apache_1.3.9
Config File: /home/bong/intexp/workout/apache_1.3.9/conf/httpd.conf
PID File: logs/httpd.pid
Scoreboard File: logs/apache_runtime_status



테스트를 위한 목적으로 2130 번의 포트번호를 설정한 후 /server-info 에 접속하여 서버설정에 대한 기본 정보를 본 것입니다. 처음의 두 줄은 아파치 웹 서버가 2000 년 7월 4일에 유닉스상에서 만들어졌다는 것을 뜻하고 있는데, 지금까지 저와 함께 아파치를 공부해 오셨던 분들이라면 이 정도는 아무렇지도 않게 쉽게 이해하실 수 있으리라 믿습니다 ! 안 그런가요 ? ^^ 이것 이외의 대부분은 아파치 모듈에 대한 정보와 지시어에 대한 설명을 다루고 있습니다.

위에서 mod_info에 대한 내용에 대해 살펴보았는데, 실제 여러분들이 컴파일을 수행하여 사용 해 보도록 하겠습니다. 모듈 설치하는 방법에 대해서는 앞선 연재에서 여러 차례 언급하였습니다만, 기억이 희미하신 분들과 이 연재를 처음 접하는 분들을 위하여 다시 한번 알아보도록 하겠습니다. ‘Configure’ 명령어를 사용해서 쉽게 모듈을 추가할 수 있다고 하였습니다. 물론 이렇게 재 컴파일을 통하여 모듈을 추가하는 방법말고도 DSO 를 이용하여 모듈을 추가하거나 제거할 수 도 있답니다.



① 우선 아파치 소스가 있는 곳으로 이동하세요.
eg.) cd /usr/local/apache

② ./Configure --enable-module=info

③ make

④ cd src; ./httpd –l 로 mod_info 모듈이 추가된 것을 확인해 볼 수가 있습니다.





<그림 2> 모듈 추가를 위한 아파치 재 컴파일


‘httpd’ 는 만들어 졌으니 mod_info를 사용하기 위한 환경설정이 필요하게 됩니다. 그러나 아주 쉽게 기존에 존재하는 ‘httpd.conf’에서 간단히 몇 줄의 주석 문자인 ‘#’를 제거해 주시기만 하면 됩니다.

다음은 httpd.conf 설정 파일에서 mod_info 에 관련한 환경설정 내용의 일부입니다.

# Allow remote server configuration reports, with the URL of
# http://servername/server-info (requires that mod_info.c be loaded).
# Change the ".your_domain.com" to match your domain to enable.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

이로써 mod_info 모듈을 이용하여 서버의 정보를 보기위한 준비는 다 되었습니다. 그러나 이 정보가 그대로 두어지면 외부에서 누구나 볼 수가 있게되므로, Allow from 다음에 접근을 허용 하고자 하는 도메인명 이나 IP주소를 넣어줍시다.

아파치 설정파일이 변경되어지면 아파치 웹 서버를 재시작 해야 하는 것도 아시죠.



# /usr/local/apache/bin/apachectl stop -> 서버를 중지한다.
/usr/local/apache/sbin/apachectl stop: httpd stopped

# /usr/local/apache/bin/apachectl start -> 서버를 다시 시작하여 설정파일을 적용
/usr/local/apache/sbin/apachectl start: httpd started

브라우저에서 다음의 URL 을 통하여 접속하시면 확인해 보실 수 있습니다.

http://localhost/server-info or http://127.0.0.1/server-info


mod_info 모듈을 사용하실 때 참고하실 점은 아파치 설정파일(httpd.conf…)이 모듈에 의해서 읽혀 들여지므로, 서버가 마지막으로 리로드 된후에 설정이 바뀐 경우 작동되어 지고 있는 현 설정을 반영하지 못하여, 출력을 못할 경우도 있습니다. 또한, 설정파일은 서버를 작동시키는 유저의 의해 읽혀져야 하고, 이렇지 않을 경우 지시어 설정이 나타나지 않습니다.

이것은 여러분들의 사이트 보안과 관련한 문제를 야기시킬 수도 있으므로, Deny 와 Allow를 통하여 접근제한을 해 두시기 권장하는 바입니다.




웹 서버상태 자세히 살펴보기 [mod_status]



아파치 서버에서 기본으로 제공하는 mod_status 모듈은 웹 서버를 운영하는 관리자 에게 있어서 서버 내부의 상태와 퍼포먼스를 측정하는데 있어서 중요한 모듈이라 할 수 있습니다. 웹 서버상태와 각 자식 프로세스에 요청되어 지고 나가는 정보등을 알아보기 쉽도록 mod_info 와 마찬가지로 웹 환경에서 살펴볼 수 있도록 해 주고 있습니다.





<그림 3> 서버의 상태 살펴보기


mod_status에서 출력되어지는 값들의 의미를 한번 알아보도록 하겠습니다. 다음과 같이 처음 줄에 나타나는 정보는 mod_info에서도 보았던 서버에 대한 간단한 설명이며,



Server Version: Apache/1.3.12 (Unix)
Server Built: Jul 4 2000 01:28:01



다음 블록의 내용은 서버의 현 상태를 보여주고 있습니다.



Current Time: Wednesday, 05-Jul-2000 15:44:28 KST
Restart Time: Tuesday, 04-Jul-2000 13:31:58 KST
Parent Server Generation: 2
Server uptime: 1 day 2 hours 12 minutes 30 seconds
Total accesses: 17 - Total Traffic: 65 kB
CPU Usage: u.11 s.09 cu0 cs0 - .000212% CPU load
.00018 requests/sec - 0 B/second - 3915 B/request
1 requests currently being processed, 5 idle servers


‘Current Time’ 은 2000년 7월 5일 3시 44분으로 현재의 시간을 의미한다는 걸 알 수 있으며, 그 다음 줄은 7월 4일 오후 1시에 서버를 재시작 했군요.



구분
의미

Current Time
현재의 시간을 의미

Restart Time
아파치 서버가 재 시작(Restart) 된 시간

Parent Server Generation
httpd.conf에서 StartServer로 지정한 값

Server Uptime
서버의 가동시간

Total Accesses, Total Traffic
전체 접근 횟수 와 전송된 트래픽

CPU Usage, CPU load
CPU 사용률 과 CPU 로드



그 다음 블록을 살펴보니 모스부호와도 같은 이상한 코드값들이 몇 라인에 걸쳐서 기술되어 있네요. 이 것이 의미하는 바는 무엇일까요 ? 정말 아리송하죠. 이것은 “scoreboard”로 아파치 서버의 자식 프로세스에 대한 상태를 알아보기 쉽게 표현한 것입니다. <그림 3> 의 현 상태는 서버가 하나의 요청에 대해서 응답을 보내는 코드와 ‘W’ 요청이 일어날 것을 기다리고 있는 9 개의 예비 프로세스가 대기하고 있습니다. <그림 3> 은 예를 들어 보여주기 위해 제가 따로 설정한 것이기 때문에 접속상태는 아주 조용한 편입니다. J 사용자 접속이 아주 많은 곳은 상태 코드인 W 또는 K로 가득차겠죠. 그런데 여러분 들께서는 서버상태 화면을 보시면서 한가지 궁금하게 생각되는 부분이 없으신가요 ? 자식프로세스의 상태를 나타내는 부분이 4 줄에 이어서 ‘.’로 표시되어 있습니다. 왜 이렇게 많이 표시해 놓았을까요 ? 그냥 한 줄이면 멋이 안 나서 길게 해 놓은것일까요 이건 아니고요, 여러분들 httpd.conf 파일에서 ‘MaxClient 256’ 을 보셨죠. 바로 이 값을 의미합니다. 못 믿으시겠다고요. 그럼 직접 한번 세어 보세요. ^^

256 이상의 동시접속을 허용하고자 할 경우에는 아파치를 다시 재 컴파일 하여야 합니다.

아파치가 있는 곳으로 이동한 다음 src/include 안의 httpd.h 에서 다음과 같은 부분을 찾아 값을 높여 주시면 됩니다.



#define HARD_SERVER_LIMIT 256



만약 클라이언트가 256 이상의 접속을 넘어서 이루어질 경우에는 다음과 같은 메시지가 로그파일에 남게 되며, 클라이언트는 다른 요청의 접속이 끝날 때 까지 대기하거나 또는 특정시간이 지난 후 접속이 이루어질 수 없다는 메시지를 보여주게 된답니다.



[error] server reached MaxClients setting, consider raising the MaxClients setting.




마지막으로 남은 부분은 프로세스가 현재 요청을 처리하고 있는 것에 대해 자세히 출력해 주는 것입니다. 아래 예를 들어 여러분들이 더욱 쉽게 이해하실 수 있도록 <표 1> 를 만들어 보았습니다.



Srv
PID
Acc
M
CPU
SS
Req
Conn
Child
Slot
Client
VHost
Request

0-3
20685
0/1/1
W
0.04
2321
186
0.0
0.00
0.00
211.51.68.181
www.apache.kr.net
GET /server-status HTTP/1.1



<표 1> mod_status 각 파라미터 의미


의미

Srv
부모 프로세스로부터 생성된 자식프로세스의 ID 번호. 외부의 또 클라이언트의 접속이 요청 되어질 경우 ‘1-3’ 과 값이 증가되어 진다.

PID
자식 프로세스의 Process ID 번호로 Srv 와는 다르다.

Acc
0/1/1 과 같이 세 개로 나뉘어져 표현되어지는데 처음의 값이 의미하는 바는 현재 연결되어 있는 접속에서 엑세스된 총계입니다. KeepAlive(지속연결) 가 설정되어 있지 않은 경우, 이 값은 각 요청마다 접속을 이룬후 끊어지기 때문에 0 을 가지게 됩니다. 두 번째의 값은 이 자식 프로세스에서 처리한 요청의 총계이며, 세 번째는 이 슬롯에서 요청되어진 합계입니다.

M
프로세스의 작동 모드로 다음과 같은 하나의 값을 가질 수 가 있습니다;

“_” 접속 대기 , “S” Starting UP

“R” 요청을 읽어들임 , “W” 응답을 보냄, “K” 지속연결(KeepAlive) , “D” DNS Lookup , “L” 로깅 , “G” 잘끝냄 , “.” 현재의 프로세스는 없으며 슬롯은 열려 있는 모드

CPU
초당 사용한 CPU 사용률

SS
가장 최근의 요청이 시작된 후의 초

Req
가장 최근의 요청을 처리하는데 걸린 시간을 1000분의 1(Milliseconds) 로 표시

Conn
현 접속에서 전송된 양을 킬로바이트(Kilobytes) 로 표시

Child
현 자식프로에서 전송된 양을 메가바이트(Megabytes) 로 표시

Slot
현 슬롯에서 전송된 전체 양을 메가바이트(Megabytes) 로 표시

Client
접속중인 클라이언트의 주소

Vhost Request
가상호스트 방법을 이용하여 한 서버에 여러 개의 가상도메인을 운영할 수 있으며 바로 어떠한 도메인이 페이지를 요청하였는지 알 수 있도록 도와주는 컬럼이다.

Request
각각의 요청한 정보에 대해서 보여준다. 위의 예에서는 문서에 대해 간단한 요청을 수행하는 GET 방식을 이용하여 /server-status 를 요청하였으며 브라우저는 HTTP 프로토콜 1.1 을 사용하였다.


주의 / 아파치는 standalone 와 inetd 두가지로 작동되어질 수 있는데, mod_status 모듈은 standalone 모드에서만 작동하며, inetd 에서는 작동하지 않습니다. inetd 방식으로 아파치를 운영하는 것은 권장하지 않습니다.




<그림 5> 확장정보를 이용한 mod_status


어떠세요 ? 기존에 무심코 지나간 이 모듈에서 상당히 많은 정보를 얻어낼 수 있었죠. 이 모듈의 설치는 mod_info와 같이 모듈을 추가해 준 다음 아파치의 환경설정 파일인 httpd.conf 에서 <Location /server-status> 와 </Location> 사이의 각 라인앞에 붙어져 있는 # 문자를 제거해 준후 웹 서버를 다시 재시작 시켜주시면 지금까지 설명드린 mod_status 모듈을 사용하실 수 있습니다.

참고로 이와 같이만 해주면 <그림 5> 과 같이 위에서 예를 들어 살펴보았던 것과 같은 자세한 정보가 나오지 않습니다. 자세한 정보를 원할 경우에는 아래에 해당하는 라인을 찾아 ExtendedStatus 지시어의 주석을 다음과 같이 제거해 주셔야만 합니다 :



# ExtendedStatus controls whether Apache will generate "full" status

# information (ExtendedStatus On) or just basic information (ExtendedStatus

# Off) when the "server-status" handler is called. The default is Off.

#

ExtendedStatus On



이제 웹 브라우저를 통해 다음과 같이 URL에 접속하시면 서버의 상태를 살펴볼 수 가 있으며, refresh 옵션을 통해 “N” 초 마다 자동으로 페이지를 갱신할 수도 있습니다.



http://localhost/server-status

http://localhost/server-status?refresh=N



/* 실제 N 값이 들어가는 것이 아니라 정수형이 들어간다 */



Tip / Cricket 을 이용한 아파치 모니터링



우선 Cricket 은 무엇일까요 ? 비스켓,디스켓 도 아닌 이것은 페이지에서 로드 되는 시간등을 기록하여 애플리케이션등 에서 쉽게 설정하여 사용할 수 있도록 도와주며, 다양한 포맷으로 데이터를 차트로 생성하여 , 웹 기반의 그래프를 제공해 줍니다. Cricket 은 RRDtool(round robin data tool) 을 기반으로 만들어져 <그림 6> 과 같이 사용자에게 친숙한 그래프 환경을 제공해 주어 알아보기 쉽도록 해 줍니다. 이 방법을 응용하여 웹 페이지를 특정한 시간 간격으로 로드 시간을 분석하여 그 결과를 그래프로 제공해 주는 등의 아파치 웹 서버를 모니터링 할 수 가 있습니다.







<그림 6> RRDTool 의 사이트



내 서버의 성능은 과연 얼마일까 ?



아파치 모듈 mod_info , mod_status를 이용하여 아파치의 설정 정보 및 상태를 살펴보았습니다. 이렇게 살펴보는데의 궁극적인 목적은 서버의 상태를 최적화 하기 위함이라 생각하며, 날로 증가하는 접속량에 따라 지속적인 확인이 필요하다 하겠습니다.

아파치 설정에서 성능(Perforamance)과 밀접한 관련을 가진 가장 중요한 파라미터는 ‘StartServers’, ‘MaxClients’, ‘MaxSpareServers’, ‘MinSpareServers’ 그리고 ‘MaxRequestPerChild’ 입니다. 물론 이러한 설정 값 들에는 디폴트 즉, 기본값이 따로 있지는 않습니다. 이 값들은 시스템의 성능과 , 접속에 따라 달라지며, 일반 사용자 분들은 기본으로 설정되어져 있는 값을 이용하시면 별다른 큰 문제는 없습니다.



위에서 살펴본 각 모듈의 정보와 성능에 영향을 미치는 파라미터의 설정을 위하여 아파치 HTTP 서버를 밴치마크 해 볼 수 있는 ApacheBench(ab) 툴을 이용해 보도록 해보겠습니다. 이 툴은 다양한 방법으로 시뮬레이터 해 볼 수 있으며, 초당 아파치 웹 서버가 얼마나 많은 요청을 처리할 수 있는지 등을 보여줍니다. AB 툴은 아파치 소스에 포함되어 있으므로 자유롭게 사용하실 수 있습니다. (src/support)



ab 의 기본사용법은 다음과 같으며, 각 옵션은 <표 2>를 참고하시기 바랍니다.



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



<표 2> ApacheBench Options

옵션
의미

-n requests
요청을 수행할 개수

-c concurrency
요청을 만들 개수로 동시 사용자 개념으로 이해하면 되겠다.

-t timelimit
최대 몇 초까지 응답을 기다릴 것인지를 가르킨다.

-p postfile
POST 의 데이터 파일을 포함

-T content-type
POSTing 에 대한 문서타입의 헤더를 결정

-v verbosity
얼마나 자세한 정보를 화면에 출력해 줄 것인지 결정

-w
HTML 문서형식으로 테이블로 만들어 결과를 화면에 출력

-I
GET 대신 HEAD를 사용

-x attributes
HTML 문의 테이블(table)에 대한 특정 문자열을 삽입

예를들어 ‘-x border=2’ 와 같이 주었을 경우 ‘-w’ 만 주었을 때의<table> 과 달리 <table border=2> 와 같이 들어간다. <그림>

-y attributes
테이블의 Tr 에 대한 특성의 값을 삽입

-z attributes
테이블의 Td 또는 Th 에 대한 특성의 값을 삽입

-C attribute
‘Apache=1234’ 와 같은 쿠키를 더한다.

-H attribute
‘Accept-Encoding: zip’ 과 같은 임의의 헤더를 일반적인 헤더라인 다음에 삽입한다. 예를들면 “ab –c 10 –n 10 –H ‘Accept-Encoding: zip’ –v 2 http://www.apache.kr.net:80/” ;

GET / HTTP/1.0

User-Agent: ApacheBench/1.3a

Host: www.apache.kr.net

Accept: */*

Accept-Encoding: zip

-A attribute
기존 암호인증을 추가하며 , 사용자 이름과 패스워드의 값들은 ‘:’ 으로 구분되어 진다.

-p attribute
기본 프록시 인증 방법을 사용하며, 이에 대한 값인 사용자 이름과 패스워드는 ‘:’ 으로 구분되어 진다.

-V
프로그램에 대한 버전의 정보를 출력

-k
HTTP 프로토콜의 지속연결 (KeepAlive) 기능을 사용

-h
각 옵션에 대한 설명




<그림 7> ApacheBench 도움말





<그림 8> AB에서 –x 옵션을 이용하여 만들어본 HTML 결과화면


자아 ! 그럼 10 명의 유저가 동시에 http://www.apache.kr.net/index.html 을 요청하는 것을 모의 실험 해 보겠습니다. 각각의 시뮬레이트 유저는 요청을 10 번씩 하게 됩니다.



#./ab –n 100 –c 10 http://www.apache.kr.net:80/



결과는 <그림 9> 과 같습니다.





<그림 9> ab 를 이용하여 10 명의 유저가 10 번씩 요청하는 가상 테스트


제가 몇몇 파라미터가 성능에 중요하다고 말씀드렸죠. 그럼 다음과 같이 요청을 30 x 50 (50 명의 사용자가, 각각 30 번의 요청) 해 보겠습니다.



# ab -n 1500 -c 50 http://www.apache.kr.net:80/

Concurrency Level: 50

Time taken for tests: 18.639 seconds

Complete requests: 1500

Failed requests: 0

Total transferred: 59208219 bytes

HTML transferred: 58809899 bytes

Requests per second: 80.48

Transfer rate: 3176.58 kb/s received

Connnection Times (ms)

min avg max

Connect: 0 74 275

Processing: 161 531 712

Total: 161 605 987



여러분들이 예상했던 결과값과 비교해 보니 어떠세요? 결과값은 반대적으로 오히려 더 좋은 결과가 나왔습니다. 방금전에 수행하였던 테스트 보다 5배 많은 유저와 3배의 요청을 하였을 경우 초당 80.48 개를 요청했다는 걸 볼 수 있습니다.

이렇듯 각 파라미터의 설정에 따라 성능에 차이가 나타난다는 것을 느끼실 수 있으실 겁니다. 이 정도만 배우셨는데도, 벌써 웹 서버 튜닝을 할 수 있다는 자신감이 들지 않으세요. 그럼 한 가지 더 알려드릴께요 . 웹 서버를 운영하는데 있어서는 다른 하드웨어들도 중요하겠지만 무엇보다도 메모리가 중요합니다. 특히 접속량이 많을 경우 메모리를 더 늘려야 하는 상황에서 튜닝만 잘 하시면 어느 정도의 향상을 기대할 수도 있습니다. ‘MaxRequestsPerChild’ 는 메모리 누수현상(?) 등이 발생하지 않는다면 가능한 이 값을 높게 설정하시고요(파라미터의 값을 0 으로 설정해 무한대로 하실수도 있습니다) ‘StartServers’ 는 프로세스가 active 되어 있는 경우가 적을 경우 값을 낮게 설정하시고, 접속량이 아주 많을 경우는 MaxClients 에 가깝게 조절하시기 바라며, MaxSpareServers 를 MaxClients 와 같게 설정합니다. MaxClients 는 너무 낮게 설정하지 않도록 주의하시기 바라며, 그렇다고 또 너무 크게 잡으셔도 안됩니다. 이렇듯 정의된 값은 따로 있지는 않으며, 여러분들의 서버 상황에 따라 이런 파라미터들의 값은 바뀌게 된답니다.



마무리를 지으며…



아파치에 대한 소개와 설정에 대한 것은 이미 다른 매체 및 인터넷을 통해서도 많이 알려졌었습니다. 그러나 , 날로 아파치를 이용하여 웹 서버를 구성하는 사용자들은 늘어가고 있으나 정작 아파치의 뛰어난 기능에도 불구하고 제대로 된 기능을 많은 분들이 사용하지 못하고 있는점은 무척 아쉽다고 생각합니다. 물론 지금까지 해왔던 일련의 강좌들을 조금이라도 충실하게 따라 해 보신 분들 이시라면 아마도 제 말씀을 이해하실 수 있으리라 믿습니다. 같은 프로그램이라 할지라도 사용자의 충실한 손길이 이어지면 얼마나 다른 프로그램으로도 변모할 수 있는지 충분히 깨달을 수 있으셨을겁니다. 즉, 구현 그 자체는 어느 누구도 할 수 있습니다만 자신의 기법을 쌓아나가는 방식이나 얼마나 세심하게 구성요소를 튜닝하느냐에 따라서 부족한 하드웨어를 보강할 수도 있고 더 뛰어나게 손볼 수도 있게 됩니다. 본인의 손끝에 달렸다고 해야 할까요?



자, 이번 "다섯번째 이야기" 주제로 아파치의 상태 및 성능을 측정하고 모니터링 할 수 있는 기법에 대해서 간단히 다루어 보았는데 어떠셨습니까? 이 아파치 이야기 시리즈는 이른바 이러한 프로그램에 대하여 전문가가 아니신 분들을 대상으로 한 것이기 때문에 그리 깊게 다루지는 아니하였고 운영하는데 있어서의 기본적인 부분들만을 다루었습니다만...


출처 : http://blog.naver.com/jungjuseong.do?Redirect=Log&logNo=80001675956

[바로가기 링크] : http://coolx.net/cboard/computer/43



Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog