웹 성능 분석 – WCAT(Web Capacity Analysis Tool)

 

웹은 현재 우리가 가장 많이 접하면서, 기업에서도 많이 구축하는 시스템으로, 성능 분석에 빠질 수 없는 항목이다. 하지만, 운영체제가 아닌 웹 환경으로 응용 서비스 상의 성능을 측정해야 하는 만큼 지금까지보다 더 복잡한 분석 방법이 필요하며, 측정이 어려운 만큼 분석하기 힘든 분야이기도 하다.

 

이러한 상황 때문에 마이크로소프트에서는 IIS Resource Kit에 WCAT(Web Capacity Analysis Tool)을 배포하여, 운영자들의 성능 분석에 도움을 줄 수 있도록 하였다. 이중 WCAT을 통해 웹 서비스 성능을 측정할 수 있는데, WCAT의 구성 및 테스트 방법은 아래 그림과 같다.

 

[그림] WCAT 전체적인 구성도

 

[그림 6-29]와 같이 여러 대의 WCAT 클라이언트(Client)를 설치하고, 이를 조정하는 WCAT 컨트롤러(Controller)를 통해, 사전에 작성한 시나리오를 여러 대의 클라이언트를 통해 웹 서버에 접근하여, 해당 결과 보고서를 생성하는 방식이다.

 

그럼 테스트를 위해 가상 머신 윈도우 XP에서 IIS를 설치하자.

IIS는 제어판 à 프로그램 추가/제거 à Windows 구성요소 추가/제거에서 설치할 수 있다. IIS 설치를 완료하면, http://localhost(http://127.0.0.1)로 접속이 가능한지 확인해 보기 바란다.

 

[그림] IIS는 윈도우 XP 프로페셔널 버전 이상인 경우 설치할 수 있다

 

IIS 준비가 완료되었다면, 기본 설치 경로 C:\Inetpub\wwwroot로 이동하여 기본 main.htm이라는 파일을 메모장을 통해 만들어 보자.

 

source\part01\ch06\main.htm

// HTML 문서임을 선언한다.

<html>

// HTML 헤더 내용으로 문서 관련 정보 및 이름을 입력한다.

<head>

<title id=titletext>TEST</title>

</head>

// HTML 문서 내용을 입력한다. 아래에서는 추가로 메인 배경을 흰색으로 지정하였다. 간단한 출력 문구 기입

<body bgcolor=white>

기본 페이지 입니다.

</body>

</html>

[예제] 기본 웹 문서 생성

 

위와 같이 구성하였다면 인터넷 익스플로러나 파이어 폭스를 통해 해당 페이지를 확인해보자,

 

[그림] 생성한 페이지가 잘 로드된다

 

그리고 별도의 다른 가상 머신에 WCAT을 설치하도록 하자. 필자는 다음과 같이 웹 테스트를 위해 다음과 같이 네트워크를 구성하였다.

 

// IIS 웹 서비스를 설치한 가상 머신

IP: 10.0.2.17

// WCAT을 통해 성능 분석을 진행할 가상 머신

IP: 10.0.2.16

 

// 버추얼 박스 네트워크 속성

내부 네트워크: intnet (버추얼 박스는 가상 머신간 통신을 위해 내부 네트워크를 이용할 수 있다)

 

[그림] 테스트 환경 구성

 

이제 테스트 준비가 끝났으므로, 본격적으로 WCAT 도구의 각 구성 파일에 대해 알아보자.

Wcctl (WCAT Controller)

Wcclient.exe (WCAT Client)

config.txt

script.txt

distribution.txt

 

환경설정은 연결할 클라이언트 개수와 실행 준비 시간 및 각 클라이언트의 실행 스레드 개수를 지정할 수 있다.

 

Config.txt [각 WCAT 클라이언트의 환경 설정]

source\part01\ch06\config.txt

Warmuptime 20s

Duration 60s

CooldownTime 5s

NumClientMachines 1

NumClientThreads 3000

 

Config.txt에서 중요한 값으로, Duration과 NumClientThreads이다.

Duration은 각 요청의 유지 시간으로 값이 클 경우 한 개의 연결 요청에 대해 유지하는 시간이 길어지게 된다. 그리고 NumClientThreads는 동시에 실행할 스레드 수로서 동시 요청 수에 영향을 주게 된다. 총 동시 요청 수는 스레드와 소켓 수를 곱한 수가 되는데, 만약 5개의 소켓으로 3000의 스레드를 실행하면, 5 X 3000 = 15000의 요청수가 동시에 진행되게 된다.

이렇게 환경설정을 마쳤다면, 요청을 할 페이지를 Script.txt로 생성하자.

 

Script.txt [접속 시도 내용]

source\part01\ch06\script.txt

NEW TRANSACTION

classId = 1

NEW REQUEST HTTP

Verb = “GET”

URL = “http://10.0.2.17/main.html”

 

성능 분석을 진행할 페이지를 지정하면 된다. 위에서는 http://10.0.2.17/main.html 페이지를 GET 방식으로 호출하도록 설정하였다.

 

Distribution.txt [각 클라이언트당 연결 시도에 대한 백분율 수치]

source\part01\ch06\distribution.txt

1 100

 

Distribution.txt는 WCAT을 여러 클라이언트로 구성하였을 때, 각각의 구성한 클라이언트당 서버에 요청하는 부하에 대해 지정할 수 있다. 퍼센트로 계산하여 입력하면 된다.

예를 들어 2대로 성능을 테스트하는데, 1번 클라이언트가 요청이 많은 상황으로 가정하고자 할 때는 다음과 같이 지정할 수 있다.

 

1 70 // 전체의 70퍼센트에 대한 호출을 진행한다.

2 30 // 전체의 30퍼센트에 대한 호출을 진행한다.

 

이렇게 구성한 파일을 저장하고 아래와 같이 Controller 서버에서 실행하면, 클라이언트를 연결 할 수 있는 대기상태가 된다(-a는 성능 분석을 진행할 웹 서버를 지정한다).

 

Wcctl –c config.txt –d distribution.txt –s script.txt –a 10.0.2.17

 

이제 Controller 서버 구성은 완료하였다. 이제 테스트에 참여할 머신에 Wcclient.exe를 복사하여 위 Controller 서버로 연결하면 테스트를 아래 명령을 통해 진행할 수 있다.

 

Wcclient.exe 10.0.2.16

 

Config.txt의 NumClientMachines의 개수에 따라 전체가 연결될 때까지 Controller 서버는 대기한 후, 연결이 전부 정상적으로 완료되면, 아래 그림과 같이 연결되었다는 메시지와 함께 분석을 진행하게 된다.

 

[그림] 실행 환경에 대한 정보를 확인할 수 있다.

 

분석 결과는 텍스트 파일로 남기게 되며, 중요하게 확인할 내용은 아래와 같이 요청 응답 시간이 된다. 아래는 Virtual Clients 개수에 따른 응답 시간을 측정하였다. 단 측정을 진행할 때는 정상이라고 판단할 수 있는 기준 값이나, 비교 데이터를 사전에 마련하여, 성능 측정 결과 값을 통해, 해당 값보다 더 높은 성능이 필요한지를 판가름할 수 있을 것이다.

 

[그림] WCAT Virtual Clients 3000으로 성능 테스트

 

[그림] WCAT Virtual Clients 1000으로 성능 테스트

 

[그림] WCAT Virtual Clients 100으로 성능 테스트

 

위와 같은 결과에서 중요하게 봐야 할 부분은 Avg Response Time, 즉 평균 응답 시간이라 할 수 있다. 만약 Avg Response Time 기준을 회사에서 서비스 질을 위해 400 이하 시 테스트 통과라는 기준을 가지고 평가를 진행하였다면, 동시 접속 1000 x 5 =5000개 이상의 요청이 발생할 경우 서버를 증설하거나, 서비스 분리에 대해 생각해야 한다.

그리고 위 값을 보면, 해당 웹 서버의 전체 연결 가능 개수가 40,000개이고, Virtual Client 개수를 통해 서버의 최대 동시 접근 이용 가능 수를 알 수 있다. 이를 통해 서버가 목표로 하는 접속 인원을 산정하는 데도 도움이 된다.

이외에도 이 도구를 이용해 여러 서버에서 측정하고 이를 비교 진행하여, 현재 서버와 비교 서버간의 차이를 확인하는 방법도 좋은 성능 측정 방법이 될 것이다.

 

WCAT 5.3 버전 이후의 상위 버전은 마이크로소프트 본사 IIS팀에서 운영하는 사이트를 통해 개별 패키지로 배포하였는데, 해당 팀 사이트에 가면 받을 수 있다.

http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1466

팀 사이트에 방문해보면, IIS 관련 도움이 되는 문서들도 상당하므로 확인해 보기 바란다.

WCAT 6.3은 WCAT 5.2와 조금은 다른 방식으로 사용된다. 하지만 테스트 결과는 큰 차이를 보이지 않지만 WCAT 6.3이 더 나은 분석 결과 보고서를 보여준다.

 

WCAT 6.3에서는 사용법이 약간 달라졌는데, 테스트를 위해 여기서는 Scenario.txt와 Settings.txt 파일을 생성하여 진행하는 방법으로 설명할 것이다. 각 설정 파일의 내용은 아래와 같다.

 

Scenario.txt [접속 시도 내용]

source\part01\ch06\scenario.txt

scenario

{

warmup = 20; // 시작 전 대기 시간

duration = 60; // 유지 시간

cooldown = 20; // 종료 시 대기 사간

 

default

{

setheader

{

name = “Connection”; // HTTP 해더 값 지정

value = “keep-alive”; // HTTP 해더 값 지정

}

setheader

{

name = “Host”; // HTTP 해더 값 지정

value = server(); // HTTP 해더 값 지정

}

setheader

{

name = “Cookie”; // HTTP 해더 값 중 쿠키 지정

value = “Theval=test”; // HTTP 해더 값 지정

}

version = HTTP11;

close = ka;

}

 

transaction

{

id = “bar”;

weight = 2000;

request

{

url = “/”;

}

}

}

 

Settings.txt [각 클라이언트의 환경 설정]

source\part01\ch06\settings.txt

settings

{

virtualclients = 3000;

 

}

 

위와 같이 시나리오와 세팅 파일을 생성하였다면, 아래와 같이 실행하여 웹 서비스를 테스트해보자.

 

Wcat.wsf –run –t scenario.txt –f settings.txt –s 10.0.2.17 –clients localhost

 

 

실행 방식은 조금 달라졌지만, 동작 방식은 비슷하므로 어렵지 않게 이용이 가능하다. 실행하면 아래와 같이 웹 분석을 진행하게 된다.

 

[그림] WCAT 실행 방식이 기존 버전과 조금 달라졌다

 

이번 테스트에서는 서비스 거부 현황을 확인해 보기 위해 IIS에서 허용 인원을 200명으로 설정하였다.

 

[그림] IIS 사용자 제한 설정

 

위와 같이 설정한 후 성능 분석을 진행하면, 6.3 버전에서는 결과 보고서에서 아래와 같이 XML을 통해 결과를 확인할 수 있다. 본 자료는 비교를 위해 각 3000과 30으로 하였을 때의 보고서 요약을 함께 첨부하였다.

 

[그림] Virtualclients 3000으로 설정 시 결과 보고서

 

아래 그림은 30으로 설정한 후 결과이다.

 

[그림] Virtualclients 30으로 설정 시 결과 보고서

 

결과값을 통해 확인할 수 있듯이 서버의 요청 수가 얼마 되지 않으면, 초당 처리되는 양이 4배 이상 늘어나는 것을 알 수 있다. 이 같은 결과를 통해 사전에 연결 가능 수를 계산하여 서버 증설 및 서비스 실행 계획을 짤 수 있을 것이다.

추가로 서비스 응답 시간과 시간대별 응답 시간에 대해서도 확인할 수 있다. 즉 연결 세션이 남아 있는 경우에 따른 처리 지연도 확인할 수 있다.

 

[그림] Virtualclients 3000으로 설정 시 결과 보고서

 

분석 보고서를 확인해보면 Response Time Analysis를 통해 시간이 지남에 따라 점차적으로 느려지는 것을 확인할 수 있다.

Request/Response Statistics를 통해 전체 요청 수와 응답 수를 비교할 수 있으며, HTTP Status Codes를 통해 서버의 응답 유형을 확인할 수 있다.

연결 허용 인원이 200명일 경우 24,940(약30%)의 세션이 정상 코드를 가져 왔다. 3000명의 동시 접속 상황을 감안하면, 30%의 인원만이 정상적인 연결이 가능한 상황임을 짐작할 수 있다.

Request/Response Statistics와 HTTP Status Codes를 통해 적정 허용 인원과 동시 접속자 수 대비 필요 서버 수를 사전에 예측하여, 증설 및 계획안을 마련할 수 있을 것이며, 이 결과를 통해 서비스에 필요한 기준치를 정해 놓고 원하는 성능치가 나올 수 있는 환경을 구성할 수 있을 것이다.

 

그리고 아래는 이러한 테스트를 1회 진행한 동안 발생한 로그 용량이다. 만약 여러 대수로 장시간 테스트를 진행한다면 로그 용량은 물론, 서버에 상당한 무리를 줄 수 있음을 염두에 두기 바란다(DDoS 공격 용도로 사용하지 않기를).

 

[그림] 하나의 머신에서 단 10~20초에 5MB의 IIS 로그 발생은 상당한 수준이다.

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.