Benchmarking tool for testing web performance

Siege

Siege?

Siege는 http 로드 테스트와 벤치마킹 유틸이다.
인터텟 상에서 로드에 얼마나 견딜 수 있는지 측정할 수 있다.

Siege가 지원하는 프로토콜 

- basic authentication
- cookies
- HTTP
- HTTPS
- FTP

클라이언트에서 설정된 값으로 서버에 부하를 줄 수 있다.

지원하는 플랫폼 : 

GNU/Linux에서 작성되었으며, AIX, BSD, HP-UX, Solaris에 성공적으로 테스트 되었다.
대부분의 System V UNIX 계열과 BSD 시스템에서 컴파일 된다.
기본적으로 POSIX.1b 기능에 대한 의존성이 있다. (윈도우에서는 사용 불가)

Manual

siege가 수행되는 동안 트랜잭션들을 측정한다. 시뮬레이트된 사용자의 합과 각 시뮬레이트된 사용자가 일정시간동안 반복해서 서버로 히팅을 한다. 
만약 20 동시 유저가 50번을 히팅하면 총 1000개의 트랜잭션이 히팅된다. 
성능 측정은 테스트 소요 시간을 포함하며, 전송된 데이터의 량 (헤더 포함), 서버의 응답시간, 트랜잭션 율, throughput, 동시성과 OK반환을 성공한 개수등을 결과로 반환한다. 

이측정들은 각 실행의 끝에 집계되고 리포트 된다. 

각 의미들은 아래에 설명될 것이다. 

siege는 3가지 핵심 모드를 가지고 있다. regression, internet simulation, brute force가 그것이다. 
이것은 큰 수의 URL들을 설정 파일로 부터 읽어 드릴 수 있고, 각각 증가시켜가면서 수행(regression)을 하거나, 랜덤하게 (internet simulation) 수행하거나, 혹은 단일 URL에 커맨드 라인에서 설정한 실행만큼 요청(brute force)를 수행하게 된다. 

regression : 많은 URL들을 각각 증가 시켜가면서 호출
internet simulation : 랜덤하게 URL호출
brute force : 하나의 URL을 집중해서 호출 

호출방법 : 

형식 : 
siege <options>
siege <options> [url]

Options : 
‘ -V ‘
‘ –version’
스크린에 버젼정보 노출한다. 

‘ -h ‘
‘ –help’
help섹션을 출력한다. 메뉴얼에 나와있는 옵션들의 요약을 보여준다. 

‘ -C ‘
‘ –config’
현재 설정내역을 보여준다. 이 옵션은 .siegerc파일을 읽고 설정 내용을 출력한다. 
이 내용은 $HOME/.siegerc 파일을 수정하여 변경가능하다. 만약 .siegerc파일을 가지고 있지 않다면 "siege.config"를 수행하여 생성할 수 있다. 

‘ -v ‘
‘ –verbose ‘
수행 내용을 출력한다. 이 옵션을 선택하며 siege는 트랜잭션 정보를 출력할 것이다. 
이것은 HTTP프로토콜 타입을 포함한다. 반환 코드와 요청된 페이지가 그것이다. 
HTTP/1.1 200 OK: /cgi-bin/whoohoo.cgi?first=Homer&last=simpson
이 옵션은 많은 수의 다양한 URL에 대한 히팅을 수행할때 regression이나 internet modes 에서 차트 처리를 할때 매우 유용하다. 

‘ -g URL ‘
‘ –get URL ‘
Get에 대한 HTTP트랜잭션을 수행한다. 서버로 부터 헤더를 무너뜨리고, HTTP트랜잭션을 디스플레이한다. 웹 어플리케이션 디버깅을 위해 좋다. 

‘ -c NUM ‘
‘ –concurrent=NUM ‘
동시 유저수를 설정한다. 이 옵션은 웹 서버에 스트레스를 주는 동시 유저의 수이다. 
수에 대한 제한은 컴퓨터의 리소스가 가능한데 까지 줄 수 있다. 그러나 현실적으로 수백개의 유저는 호출 수와 같다. 이 수는 실제 세션에 유저의 수와 같다.
이는 서버가 처리할 수 있는 트랜잭션의 수 나타날때 선택할 수 있는 값이다. 이는 동시 세션의 수를 표현하지 않는 것에 주의하자. 기억할 것은 실제 유저는 페이지를 보고 읽고나서 다음 리퀘스트를 던진다. 

‘ -i ‘
‘ –internet ‘
이 옵션은 설정파일과 함께 사용된다. 이는 많은 URL을 포함하는 파일이다. 
이 옵션이 있으면 각 사용자는 URL의 하나를 랜덤하게 호출한다. 서버의 어떠한 페이지를 호출하여 볼 수 있는지 알 수없고, 인터넷 모드에서 특정 페이지를 지정할 수 없다. 
이 옵션이 세팅되면 모든 페이지가 호출 될 것이라고 보장할 수 없다.

‘ -t NUMm ‘
‘ –time=NUMm ‘
타임, 특정 시간동안 테스트를 하도록 한다. 포맷은 "NUMm"이다. NUM은 타임 유닛이고, m은 모디파이어이며, S, M, H 를 줄 수 있다. 
한시간동안 테스트를 한다면 -t3600S, -t60M, -t1H 로 지정하면 된다. 
모디파이어는 대소문자를 가리지 않는다. 그러나 숫자와 모디파이어 사이에 공백은 허용하지 않는다. 

‘ -f FILE ‘
‘ –file=FILE ‘
기본 설정파일을 의미한다. 모든 URL들을 포함하고 있는 파일은 SIEGE_HOME/etc/urls.txt이다. 
이 옵션을 이용하여 서로다른 설정들을 지정하고 선택적으로 사용할 수 있다. 
ex) siege -file=serverb.txt

‘ – l ‘
‘ –log ‘
이 옵션은 siege가 SIEGE_HOME/var/siege.log파일에 통계 자료를 남기도록 한ㄷ.ㅏ 
각 새로운 통계는 log에 추가되는 형태이다. 

‘ – m MESSAGE ‘
‘ –mark=MESSAGE ‘
이 옵션은 구분자와 함께 로그 파일에 기록하도록 한다. 로그파일 엔터티를 다르게 지정하여 리포트의 헤더에 마크를 할 수 있다. 이는 -m옵션과 -l옵션을 함께 사용할 필요는 없다. -m은 -l을 트랜잭션에 대해 마크를 한다. 만약 MESSAGE가 공백을 가지면 quote마크를 꼭 붙여야 한다. 

‘ -d NUM ‘
‘ –delay=NUM ‘
각 siege 시뮬레이터 유저는 특정 수의 초사이 간격으로 랜덤하게 호출한다. 만약 벤치마킹을 한다면 -d1으로 1초로 설정하는 것을 추천한다. 기본 값은 3이다. 이 딜레이는 파도처럼 두드리는 것 보다 트랜잭션을 휘청거리게 해준다. 

Configuration File

버젼 2.0부터 siege는 설정파일을 지원하고 있다.
이 설정파일에 커맨드 라인 옵션을 지정할 수 있다.
이를 통해 매번 siege를 실행할 때마다 동일한 설정값으로 요청을 수행할 수 있다.
어디에 저장 되는가?
siege 는 설치된 디렉토리에서 해당 설정 파일을 찾는다. 만약 siege를 설치하지 않고 사용하고자 한다면 홈 디렉토리에 .siegerc파일을 만들고 설정을 하면 된다.
.siegerc파일은 siege.config 유틸리티를 통해서 생성이 가능하며, 다양한 커멘트를 제공해준다.

URL Format

Siege는 다음 URL포맷을 인식할 수 있다.
[protocol://] [servername.domain.xxx] [:portnumber] [/directory/file]
현재는 http, https 프로토콜만 지원하고 있다.

The URLs File

regression테스트 혹은 인터넷 시뮬레이션 테스트를 수행하고자 할때 아마도 테스팅할 URL로 요청을 보내야 할 것이다. 이를 완료하기 위해서 URL을 설정 파일에 지정 할 수 있다. 기본 설정 파일은 SIEGE_HOME/etc/urls.txt 이다.
url은 파일내 한 라인에 하나씩 기술하면 된다. 

# comments behind hashes
http://homer.whoohoo.com/index.shtml
http://homer.whoohoo.com/howto.jsp
http://homer.whoohoo.com/cgi-bin/hello.pl?first=bart&last=simpson
# and on and on....

Siege-2.06 이후 버젼에서는 POST와 GET 디렉티브를 사용할 수 있다.
GET 디렉티브는 위에서 기술한것과 같이 요청이 가능하다.
POST는 POST키워드가 필요하며, 다음과 같이 수행한다. 

http://homer.whoohoo.com/cgi-bin/hello.pl POST name=homer
http://homer.whoohoo.com/haha.jsp POST word=doh!&scope=ALL

URL옵션이 없이 호출된경우 siege는 URL을 파일에서 찾는다.
이를 메모리로 로드하고, 실행하게 된다. 보통 siege는 파일의 시작에서 부터 순차적으로 수행한다. 만약 특정 internet mode 를 이용한다면 [-i | -internet] 을 지정하게 되면 랜덤하게 URL을 선택하게 된다.


Variables

2.57 릴리즈부터는 다양한 선언과 평가기능을 지원한다. 이는 .siegerc파일과 urls.txt파일내에 사용할 수 있다. Siege는 다양한 문법을 UNIX shell과 같이 사용할 수 있다.
이는 파일내의 각 라인에 선언될 수 있다. 이는 varname=value 로 변수값을 참조할 수 있도록 선언한다. 이는 $(), ${}에서 이 값을 이용할 수 있다.
예제를 보면 $(varname) 으로 변수에 접근하고 있다. 이를 통해 다양한 값을 스위치 하여 사용할 수 있다. 

PROT=https://
$(PROT)eos.joedog.org/siege/index.php
$(PROT)eos.joedog.org/wacky/index.php
$(PROT)eos.joedog.org/scout/index.php
$(PROT)eos.joedog.org/libping/index.php
$(PROT)eos.joedog.org/gunner/index.php

이제 https와 http를 스위치 할 수 있다. 

Log File

Siege가 로깅이 가능하도록  [-l / -log]로 실행이 되면 프로그램은 PREFIX/var/siege.log 에 트랜잭션을 기록하게 된다. PREFIX는 Siege가 설치된 디렉토리를 나타낸다.
트랜잭션은 각 siege 실행시 표준 출력과 유사하게 출력된다. 그러나 정보는 comma로 구분된 텍스트로 스프레드쉬트에서 쉽게 임포트 가능하도록 포매팅 된다.
로깅 옵션은 히스토리 관리를 할 수 있도록 해주며, 차트 처리도 수행할 수 있도록 지정할 수 있다. -m "message" / -mark="message"로 옵션을 주게 되면 마크를 삽입한다. 이는 테스트의 시작을 나타낸다. 

Performance Statistics
성능 측정은 테스트 소요시간, 전송된 데이터의 량 (헤더에 포함되어 있음), 서버의 응답시간, 트랜잭션 처리율, throughtput, 병렬처리와 수행횟수로 성공 응답을 반환한 개수가 수집된다. 이 측정들은 각 실행의 종료시점에 수치화 화여 리포팅 된다.

Ben: $ siege -u shemp.whoohoo.com/Admin.jsp -d1 -r10 -c25
..Siege 2.65 2006/05/11 23:42:16
..Preparing 25 concurrent users for battle.
The server is now under siege...done
Transactions: 250 hits
Elapsed time: 14.67 secs
Data transferred: 448000 bytes
Response time: 0.43 secs
Transaction rate: 17.04 trans/sec
Throughput: 30538.51 bytes/sec
Concurrency: 7.38
Status code 200: 250
Successful transactions: 250
Failed transactions: 0

Transactions는 서버의 히트 수이다. 이 예제에서는 25개의 동시 유저 [-c25]가 각 서버를 10번 반복해서 히트 [-r10]하였고, 총 250개의 트랜잭션이 수행되었음을 나타낸다. 
Elaspsed time는 전체 siege테스트의 시간이다. 이값은 사용자가 siege를 호출한 시간부터 트랜잭션이 완료되는 시점까지의 시간이다. 위 예제를 보면 이 테스트는 완료되는데 14.67 초가 소요되었음을 보여준다. 
Data transferred는 각 siege의 시뮬레이트된 사용자의 전송한 데이터의 총 썸을 나타낸다. 이것은 컨텐츠와 같은 정보와 헤더 정보를 포함한다. 이 측정값이 헤더의 정보를 포함하기 때문에 서버에 리포트된 숫자보다 더 클 수 있다. 인터넷 모드에서는 랜덤 URL에 히트를 하기 때문에 실행때마다 다양한 값이 나온다.
Response time는 각 시뮬레이트된 사용자의 요청에 대한 response까지 걸린 시간의 평균값이다.
Transaction rate는 초당 처리될 수 있는 트랜잭션의 수의 평균값이다. 간단히 봐서 이는 트랜잭션 수를 소요시간으로 나눈 값이다.
Throughput는 매 초마다 서버로 부터 모든 시뮬레이트된 사용자에게 전송된 바이트의 평균 수를 나타낸다.
Concurrency는 동시 커넥션 수의 평균을 나타낸다. 이 숫자가 올라가면 서버의 성능은 감소된다.
Successful transactions는 서버가 반환한 코드의 횟수를 의미하는 것으로 400 이하로 타나난다. 리다이렉트는 성공적인 트랜잭션에 포함된다. 


Availabilty
새로운 릴리즈 발표는 freshmeat.net에 의해서 수행된다. 새로운 릴리즈 정보를 보기 위해서 해당 사이트를 방문하자. 새로운 버젼은 FTP등 다양한 경로로 받을 수 있다. 

Platforms
멀티 쓰레드 Siege는 다음 환경에서 성공적으로 테스트 되었다. 

AIX( powerpc-ibm-aix4.2.1.0 ) Siege has been built and tested successfully using IBM C for AIX version 5. It currently does not support gcc on that platform.

GNU/Linux( i[56]86-pc-linux-gnu ) Siege was originally developed on SuSE GNU/Linux with gcc, there are no known issues on this platform.

HP-UX ( hppa2.0w-hp-hpux11.00 ) Siege has been built on this platform with both the HP ANSI C compiler and gcc.

Solaris( sparc-sun-solaris2.[678] ) Siege LOVES this platform. It was built and tested successfully using gcc.

Microsoft Windows( pc-i686-cygwin ) Siege was ported to Cygwin by Funkman. It runs nicely on all versions greater than or equal to 1.5.

Authors

Jeffrey Fulmer, et al — Designed and implemented Siege in his position as Webmaster for Armstrong World Industries

License

Please consult the file, COPYING for complete license information. Copyright (C) 2000-2009 Jeffrey Fulmer, et al. Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them.




from : https://www.joedog.org/siege-manual/

Share this

Related Posts

Previous
Next Post »