안녕하세요.
저는 게임 개발사에 근무하는 개발자입니다. 최근에 nGrinder를 알게 되어 회사네 성능테스트 이슈도 있고 해서 지금 스크립트를 짜서 테스트를 진행 하고 있는데 잘 모르는게 있어서 이렇게 질문을 올리게 되었습니다. 현재 개발 환경은 게임서버 1대에 Agent 8대로 되어 있으며 게임서버는 상용엔진서버를 사용하는 관계로 연동하기 위해 별도의 Dll 을 만들어서 테스트를 진행하고 있습니다. 그리고 각각의 Agent는 동일한 시스템 사양으로 구성되어 있구요 (OS:Windows7,CPU 4Core,Memroy 8G,네트워크 속도는 100Mbps,jdk version:1.7) 질문내용은 테스트를 하다가 어느 순간부터 Agent 서버의 상태를 나타내는 수치가 차이가 나는거 같아서요 Agent의 CPU나 RX/TX값의 차이가 좀 나더라구요 테스트 설정환경은 3대의 Agent에 프로세스 10개 쓰레드 50개 총 1500Vuser 를 2시간동안 테스트 하려고 합니다. 그런데 10분정도 지나니까 아래와 같이 agent별 cpu와 RX/TX값들이 차이가 나더라구요 (Agent3인경우 특히 차이가 많이 나네요) agent2-PC CPU-46% MEM-33% / RX-3.79M TX-3.77M Agent1-PC CPU-20% MEM-34% / RX-3.96M TX-3.84M agent3-PC CPU-0.4% MEM-33% / RX-27.2K TX-55.6K 이런 차이가 어떤 이유로 발생하는지 잘 몰라서 질문을 올립니다. 참고로 테스트하고 있는 스크립트소스는 다음과 같습니다. import com.sun.jna.Library import com.sun.jna.Native import com.sun.jna.Pointer import com.sun.jna.ptr.PointerByReference import static net.grinder.script.Grinder.grinder import static org.junit.Assert.* import static org.hamcrest.Matchers.* import net.grinder.script.GTest import net.grinder.script.Grinder import net.grinder.scriptengine.groovy.junit.GrinderRunner import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess import net.grinder.scriptengine.groovy.junit.annotation.AfterProcess import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread import net.grinder.scriptengine.groovy.junit.annotation.AfterThread // import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3 import org.junit.Before import org.junit.BeforeClass import org.junit.Test import org.junit.runner.RunWith /** * A simple example using the HTTP plugin that shows the retrieval of a * single page via HTTP. * * This script is automatically generated by ngrinder. * * @author admin */ @RunWith(GrinderRunner) class GameServerRunner { // Define the interface which native library has. interface NativeClient extends Library { public void Init(PointerByReference testClientRef); public void Cleanup(Pointer testClient); public int ConnectToLoginServer(Pointer testClient, String ip, int port, int timeout); public int DisconnectFromLoginServer(Pointer tester); public int EchoLoginServer(Pointer testClient, int timeout); public int ConnectToGameServer(Pointer testClient, String ip, int port, int timeout); public int DisconnectFromGameServer(Pointer testClient); public int EchoGameServer(Pointer testClient, int timeout); public int ConnectToChatServer(Pointer testClient, String ip, int port, int timeout); public int DisconnectFromChatServer(Pointer testClient); public int EchoChatServer(Pointer testClient, int timeout) ; } public static GTest test public static def nativeClient; public static int timeout = 30000; // timeout 30 seconds def PointerByReference testerRef; def Pointer tester; @BeforeProcess public static void beforeProcess() { nativeClient = Native.loadLibrary("myGames", NativeClient); test = new GTest(1, "myTest") } @BeforeThread public void beforeThread() { testerRef = new PointerByReference(); nativeClient.Init(testerRef); tester = testerRef.getValue(); test.record(this,"doEchoGameServer"); grinder.statistics.delayReports=true; } @AfterThread public void afterThread() { nativeClient.Cleanup(tester) } public def doEchoGameServer() { def resultCode = nativeClient.EchoGameServer(tester, timeout); return resultCode } @Test public void test(){ nativeClient.ConnectToGameServer(tester, "xxx.xxx.xxx.xxx", 12000, timeout); int resultCode = doEchoGameServer() nativeClient.DisconnectFromGameServer(tester) assertThat(resultCode , is(0)) } } 질문을 끝까지 읽어 주셔서 감사합니다. |
Administrator
|
스크립트를 검토해 보았는데, 스크립트 상에는 큰 문제가 없어 보입니다.
그리고 말씀 하신 상황으로 봐서는 세번째 에이전트에서 서버측 문제로 Connection Hang 이 걸리는 듯 하군요. 메모리를 봐서는 아마 실제로 제대로 실행은 된것 같고, 3번째 에이전트의 에이전트 로그를 검토해 보셔야 할 것 같습니다. |
Free forum by Nabble | Edit this page |