반응형

언리얼 엔진에서 더미 테스트를 진행해볼 예정이다.

간단하게 Stress Test 버튼을 만들어서 누르면 더미 플레이어를 100명씩 서버에 접속 시켜 줄 것이다.

그리고 0.5초? 정도의 간격으로 랜덤 좌표를 지정받아 그 곳으로 이동시켜 줄 것이다.

 

캐릭터에 그래픽 리소스가 있는 버전과 없는 버전 두 가지로 나눠서 해 볼 예정.

 

테스트 용으로 만들어둔 기본 마네킹 Bp_MyPlayer를 소환 해줄 때 IsMine 변수를 false로 바꿔서 소환 해줄것이다.

그리고 Tick 함수에서 일정 시간 간격을 둬서 계속 이동 패킷을 보내도록 해서 테스트를 진행 할 것이다.

 

그 전에 서버 구조를 다시 한번 확인하도록 하자.


 


 

 

 

 

 

 

 

 

 

 

 


서버 구조를 다시 한번 복습 해보았다. 이제 원래 하려던 작업으로 돌아오자. 

 

우리가 만들어 줘야 하는 건 다음과 같다.

 

  • 더미 클라이언트의 소켓.
  • 더미 클라이언트의 송수신을 담당할 쓰레드.
  • 더미 클라이언트를 관리하는 세션.
  • 더미 클라이언트 액터.

 

가장 먼저 소켓을 만드는 부분부터 진행하자.

 

 

우선 더미 클라이언트를 스폰 시켜줄 함수를 게임 인스턴스에 만들어 주었다.

 

 

함수에서는 원하는 더미의 개수만큼 더미 클라이언트의 소켓을 만들어 준다.

 

 

그 후, 더미 소켓으로 서버와 데이터를 송수신할 더미 패킷 세션을 만들어 주었다.

 

 

임시 더미 아이디를 발급해주고, 더미 플레이어를 스폰시켜 준다.

이렇게 해주면 더미클라이언트의 접속까지는 완료가 되었다.


이 더미 클라이언트의 소켓으로 서버와 송수신을 해야 하기 때문에,

기존에 있던 SendWorker와 RecvWorker의 코드를 조금 변형해서

DummySendWorker, DummyRecvWorker 클래스를 만들어 줬다.

 

 

TTuple로 보내려는 데이터와, 보내는 소켓의 인덱스를 받아와서, 해당 소켓으로 데이터를 전송하도록 해줬다.

 

 

데이터를 받을 때도 해당하는 소켓이 받을 데이터가 있으면 수신하고 그렇지 않으면 다음 소켓으로 넘어가도록 했다.

 

 

이제 더미 플레이어에서 일정 시간마다 랜덤 좌표를 뽑아서 서버로 보내고 다시 받는 식으로 흘러가게 될 것이다.

 

 

우선 1000명으로 테스트 해보았다.

서버의 점유율이 올라가는걸 보니 정상적으로 부하가 걸리는 것 같다.

 

이렇게 직접 더미 클라이언트를 만들어서 부하를 줘서 서버가 버티는지 테스트 해보았다.

렌더링을 키고 하니까 클라이언트에서 소모하는 자원양이 많아서 더 많은 인원을 테스트 하지 못했지만,

렌더링을 끄고 하면 몇천명 정도는 더 수용 가능 할 것 같다.

 

일단 내가 생각나는대로 만들긴 했는데, 이런식으로 만들어서 테스트 해도 되는건지 잘 모르겠다..


 

추가적으로 JMeter를 사용해서 서버 부하 테스트도 진행해보았다.

서버에 테스트 코드를 추가해서 진행했다.

 

 

 

 

 

 

 

 

 

여기서 발생하는 에러는 서버에서 보낸 데이터를 처리하는

코드를 작성안해줘서 처리하지 못해서 발생하는 오류로 예상된다.

 

 

 

 

 

 

총 3200번 정도의 요청이 수행되었다.

평균, 최소, 최대 ms 단위이므로 평균적으로 9초 정도의 응답시간이 소요되었다고 나온다.

처리량은 Throughput으로 Transaction Per Second를 의미하는 TPS라고도 한다.

이번 테스트에서는 51 TPS가 측정되었다.


나름 서버 스트레스 테스트를 한다고 해서 해봤는데, 맞게 잘한건지 모르겠다.

그래도 몇 천명 정도는 일단 수용 가능 하단걸 확인했다.

 

반응형