아파치 성능테스트 프로그램
1) ab -n 1000 -c 1000 -t 10 http://주소/
다음은 동시접속수 10 ( -c 옵션 ), 10번 접속 ( -n 옵션) 해서 나오는 ab 의 샘플 입니다.
이 옵션값을 적당하게 조절해서 퍼포먼스가 얼마인지 측정해 보면 되겠습니다.
ab [ -k ] [ -i ] [ -n 요청수 ] [ -t 시간제한 ] [ -c 동시접속 ] [ -p POST file ] [ -A 인증 유저이름:패스워드 ] [ -P 프락시인증 유저이름:패스워드 ] [ -H Custom header ] [ -C Cookie name=value ] [ -T content-type ] [ -v verbosity ] ] [ -w HTML 출력 ] ] [ -x <table> 속성 ] ] [ -y <tr> 속성 ] ] [ -z <td> 속성 ] [http://]서버이름[:port]/path
ab [ -V ] [ -h ]
설명
ab는 Apache Web server의 상태를 측정하는 툴이며 초당 Apache server가 얼마나 많은 요청을 처리할수 있는지를 측정할수 있다.
옵션
-k
HTTP KeepAlive (연결 지속성) 요소를 사용 가능 하게 한다. 이것은 하나의 HTTP session에서 여러 개의 요청을 처리할 수 있다. 기본값은 연결 지속성 기능을 사용하지 않는다.
-i
GET 방식 대신에 HTTP 'HEAD'를 사용한다. POST와 섞어서 사용할수 없다.
-n 요청수
측정을 하기 위한 요청수를 지정한다. 따로 지정하지 않는다면 하나의 요청만이 수행된다.
-t 시간제한
측정을 어느 정도까지 할 지 초단위로 지정한다. 따로 지정하지 않으면 측정 세션에 대해서 50000개의 요청을 자동으로 정의한다. 고정된 시간 동안 서버를 측정하기 위하여 사용한다. 기본적으로 시간을 제한하지는 않는다.
-c 동시접속수
동시에 요청을 처리할 수 있는 수량을 지정한다. 기본값으로는 한번에 하나의 요청만을 수행한다. 즉 동시 접속을 하지 않는다는 의미이다.
-p POST file
아파치 웹서버에 어떠한 HTTP POST 요청을 보내기 위한 data를 가진 파일을 지정한다.
-A Authorization username:password
서버로 신용증명을 하는 기본 인증을 지원한다. 사용자 이름과 패스워드는 하나의 ':'로 구분하고, uuencoded로 변환한 데이터를 보낸다. 문자열은 서버가 필요로 하든 안하든 상관없이 보내며, 401 인증을 보내는 것을 필요로 한다.
-p Proxy-Authorization username:password
프락시 서버로 신용증명을 하는 기본 인증을 지원한다. 사용자 이름과 패스워드는 하나의 ':'로 구분하고, uuencoded로 변환한 데이터를 보낸다. 문자열은 프락시가 필요로 하든 안하든 상관없이 보내며, 407 인증을 보내는 것을 필요로 한다.
-C Cookie name=value
요청에 'Cookie:' line을 추가한다. 이 인자는 'name=value'의 형태를 가진다. 이 옵션은 반복된다.
-H Header string
요청에 임의의 헤더를 추가한다. 이 인자는 유효한 헤더의 형태를 가지며, 보통 하나의 쌍으로 이루어진 필드 값을 콜론(:)으로 구분을 한다. 예를 들어
-T content-type
POST data에 대한 content-type header를 지정한다.
-v
출력 레벨을 지정한다. 4단계는 결과값 상단에 HTML 헤더를 출력하며, 3단계는 결과물 상단에 응답 코드(예를 들어 404, 200등)를 출력하며, 2단계는 경고와 정보 메세지를 출력한다.
-w
HTML table로 결과물을 출력한다. 기본 table은 2칼럼이며 흰색 바탕이다.
-x attributes
<table> 에 대한 속성을 지정한다. 속성은 <table 속성> 과 같이 들어간다.
-y attributes
<tr>에 대한 속성값을 지정한다.
-z attributes
<td>에 대한 속성값을 지정한다.
-V
버전 정보를 출력하고 프로그램을 종료한다.
-h
사용법에 대한 정보를 출력한다.
버그
고정 길이를 가진 다양한 정적 선언 버퍼가 있다. 이 사실로 인해서 비효율적인 명령 라인의 인자와 서버로부터의 헤더 응답, 그리고 다른 외부 입력과의 결합으로 인해 버퍼 오버 플로우가 발생할 수 있다.
Ab는 HTTP/1.x를 완전하게 충족시키지는 못한다. 대신 어떠한 형태의 응답도 수용할 수 있다. 프로그램에 의한 strstr(3)의 과도한 사용은 비정상적인 수행 결과를 가져오며, CPU 리소스를 잡아 먹게 된다. 서버의 한계에 도달하기 전에 ab에 의하여 한계에 접근 하지 않도록 ab를 수행해야 한다.
ab 의 측정결과에서 다음과 같은 내용을 분석할수 있다.
Server Software |
아파치버전을 표시 |
Server Hostname |
특정사이트의 이름(도메인명) |
Server Port |
웹서비스 사용포트번호 |
Document Path |
초기 문서가 준재하는 웹문서 root위치 |
Time take for tests |
응답시간(매우 중요한 결과 값임) |
Document Length |
초기문서(대부분 index.html, index.htm)의 용량크기 |
Complete requests |
요구에 응답완료한 세션수 |
Failed requests |
요구에 응답실패한 세션수 |
Broken pipe errors |
실패한 에러수 |
Total transferred |
총 전송바이트수 |
HTTP transferred |
총 전송한 HTML바이트수 |
Requests per second |
초당응답요구수 |
Time per request |
요구에 응답한 시간(단위 micro second, 중요한 결과값) |
Time per request |
요구에 응답한 시간 |
Transfer rate |
초당전송가능한 용량 |