LOGIN • JOININ

서버 성능을 테스트해보자 (1)

webmaster 2015.05.01 20:22 조회 수 : 5298

서버의 성능 중 가장 기본적인  TCP 소켓의 접속과 송수신 성능을 테스트 해봅시다.


"내가 만든 서버 혹은 엔진은 도대체 얼마나 많은 접속시도와 접속시도 해제를 처리할 수 있을까..."

"얼마나 많은 송수신 데이터를 처리할 수 있을까..."

"또 극단적인 접속과 접속해제 그리고 데이터 송수신 부하에서 얼마나 버틸 수 있는가..."

"서버 혹은 엔진들의 접속과 송수신 성능은 얼마나 차이가 나는가..."


와 같은 가장 기본적인 서버의 성능 테스트를 아래의 CGCII 예제를 사용하면 테스트를 해 볼수 있습니다.



1. 테스트 클라이언트


[테스트 클라이언트 샘플]   CGDK8\Samples\SocketClasses\Client\SampleSocketClient01_TCPTest(MFCControls)\



1) 접속 기능

테스트 클라이언트는 아래와 같이 기본적인 접속 테스트 기능을 제공합니다.


TCPEchoTest_05.png



2) 접속 테스트 메뉴

'접속 테스트'는 일정 시간 동안 계속 접속을 시도하고 접속을 강제 종료하는 것을 일정 시간마다 반복해 주는 기능입니다.

'Start/Stop'버튼을 누르면 설정된 값에 따라 테스트를 시작합니다.

접속시도 간격(Interval)마다 접속 시도과 접속해제를 시도합니다.

접속 시도는 접속수가 상한을 넘지 않으면 랜덤한 숫자로 접속을 시도합니다.

접속 해제는 접속수가 하한보다 작지 않으면 랜던함 숫자로 강제 접속 해제를 합니다.


이 테스트를 통해 서버 높은 접속시도와 접속해제 부하를 통해 그 성능을 확인해 볼수 있습니다.


TCPEchoTest_09.png


3) 접속 통계 정보

'접속 테스트'를 해 얼마만큼이 접속시도 되었고 또 얼마만큼이 접속을 성공했으며 얼마만큼이 실패했는가를 확인해 보기 위한 통계 정보를  표시해 줍니다.

아래와 같이 다양한 접속 통계 정보를 제공해 줍니다.


TCPEchoTest_06.png




4) 송수신 테스트 메뉴

전송 테스트는 접속된 소켓에 메시지를 계속 전송하는 테스트입니다.

'Start/Stop' 버튼을 누르게 되면 테스트가 동작합니다. 


선택한  '메시지크기'의 메시지를 1초마다 접속된 소켓당  메시지를 Times 만큼 전송합니다.

예를 들어 '1회 전송시 전송할 메시지 수'를 100으로 설정한 경우 초당 100개의 메시지가 전송됩니다.

또 접속된 소켓수가 100개라면 초당 총 10,000개의 메시지가 전송됩니다.


TCPEchoTest_08.png

이때 전송되는 메시지는  4Byte의 메시지의 크기를 저장한 헤드를 사용합니다.

즉 메시지의 크기가 32Byte라면 메시지의 제일 앞 4Byte에 32라는 값이 저장되어 있습니다.


이 것을 통해 초당 얼마만큼의 송수신이 가능한가를 테스트 할수 있습니다.

즉 서버의 송수신 성능을 테스트해볼수 있고 또 이것을 바탕으로 튜닝도 가능할 것입니다.



5) 송수신 통계 정보

'송수신 테스트'를 확인해 보기 위해 송수신 통신 정보를 제공해 줍니다.

송수신 전송 횟수 정보는 아래와 같이 제공해 줍니다.


TCPEchoTest_07.png

만약 서버를 Echo 처리 되도록 제작 했다면 송신한 만큼을 수신할 것입니다.



6) 풀 통계 정보

CGCII는 내부적으로 풀에 의해서 동작하며 자체적인 가비지 콜렉션을 수행합니다.

메뉴에서 "풀 통계 정보창 띄우기"에 해당하는 버튼을 누르게 되면 아래와 같은 창이 뜹니다.

풀의 동작을 아래와 같이 표시해 줍니다.


TCPEchoTest_02.png




7) 쓰레드 통계 정보

CGCII에서는 내부적으로 사용되는 쓰레드와 쓰레드 풀들을 관리해 줍니다.

메뉴에서 "쓰레드 통계 정보창 띄우기"에 해당하는 버튼을 누르게 되면 아래와 같은 창이 뜹니다.

쓰레드의 동작 상황과 처리 상황에 대한 통계 정보를 아래와 같이 표시해줍니다.


TCPEchoTest_01.PNG

8) 접속과 송수신 동시 테스트

접속테스트와 송수신 테스를 동시에 사용할 경우 접속과 접속해제를 함과 동시에 접속된 소켓은 메시지를 전송하는 테스트를 할수 있습니다.

임의의 위치에서 접속을 하고 접속을 해제 하기 때문에 서버의 좀더 복합적 기능을 테스트해 보실 수 있을 것입니다.


이 테스트 클라이언트의 기능을 사용해 여러 분들의 서버 혹은 다양한 엔진들의 기본적 접속 성능과 송수신 능력을 테스트 해보실 수 있습니다.

CGCII의 이런 기본적 테스트는 기본적으로 다양한 환경이나 하드웨어 성능에 맞는 튜닝을 위한 용도로 사용됩니다.



2. 테스트 서버


[서버 샘플]   CGDK8\Samples\SocketClasses\Server\SampleSocketServer01_TCPEchoServer(MFCControls)\


테스트 서버(Sample01) Server-TCP Echo (MFC Controls).exe)는 CGCII로 제작된 가장 간단항 형태의 TCP 에코 서버입니다.

접속을 해오면 접속을 받고 메시지를 전송할 경우 그것을 메시지 단위로 일일이 에코처리 해줍니다.

또 그때의 성능을 클라이언트와 동일한 형태로 표시해 줍니다.


이 테스트 서버는 기본 값으로 튜닝된 TCP서버입니다.

CGCII는 최대 성능으로 튜닝할 경우 소켓당 메모리를 매우 많이 소요합니다.

또 최대 접속으로 튜닝할 경우 소켓당 메모리는 매우 적은 대신 성능이 떨어집니다.

최대 성능 튜닝이나 최대 접속 튜닝을 한 것이 아니라 성능과 튜닝을 어느 정도 트레이드 어프를 통해 가장 문안한 값으로 설정된 서버입니다.

이 서버 역시 Sample이므로 원하실 경우 Sample에서 다양한 값을 설정해 튜닝을 하실 수 있습니다.

(다만 공개 배포판은 최대 접속 수가 최대 256개로 제한되어 있습니다.)


TCPEchoTest_03.png

위에서 같이 "Ready"버튼을 누르면 그냥 서버로 접속을 받을 수 있습니다.


또 서버를 완전히 끄려면 아래와 같이 'MENU'에서 Exit를 선택해서 종료하셔야 합니다.

TCPEchoTest_04.png


다른 엔진이나 라이브러리로 제작된 서버와 CGCII의 성능과 안정성을 이 서버와 비교해 보세요.

그리고 그 결과를 저희에게도 알려주세요~ ^ ^


3. 컴파일해 놓은 버전


샘플에 있는 것이긴 하지만 미리 컴파일해서 첨부해 놓았습니다.

아래의 것은 32Bit으로 컴파일 한 것입니다.


[32Bit 버전]

TestEcho32_110.zip   

(2015년 6월 4일 Update)   - Receive Pending 기본값을 false에서 true로 변경, vs2012로 다시 회귀컴파일.

(2015년 6월 9일 Update)   - 'Disable Echo Send' 기능 추가.


[64Bit 버전]

TestEcho64_110.zip   (2015년 6월 6일)