안녕하세요. Stress Test를 위해 ngrinder를 사용하고 있습니다.
다름이 아니라, ngrinder 에이전트를 각기 다른 서버(편의상 A,B로 호칭하겠습니다)에 설치하고, 이를 하나의 Target Web 서버를 대상으로 테스트를 진행하고 있습니다. 허나, A서버와 B서버의 설치 및 설정 옵션이 동등함에도 불구하고, A 서버는 제목과 같이, 생성된 Report를 찾지 못하고, B서버는 생성된 Report를 찾습니다. 이로인해 A서버는 정상적으로 테스트가 완료되어도 이를 에러로 판단하고, B서버는 문제없이 정상적으로 기동되는 상황입니다. 그리하여 질문드리고 싶은 부분은 이처럼 Report를 agent가 찾지 못할 때, 어떤 설정을 통해서 헤쳐나갈 수 있는지 여쭤보고 싶습니다. ngrinder 한국 포럼 여러분들의 현명한 조언을 부탁드립니다. 감사합니다. * 참고용 에러 로그를 남깁니다. 2020-11-23 05:28:55,407 INFO Home.java:252 : /opt/ngrinder-controller/perftest/0_999/127 is created. 2020-11-23 05:28:55,408 INFO Home.java:252 : /opt/ngrinder-controller/perftest/0_999/127/dist is created. 2020-11-23 05:28:55,419 INFO PerfTestService.java:669 : Script type is 'groovy'. 2020-11-23 05:28:55,425 INFO ScriptHandler.java:163 : scl.divide.test.groovy is being written in /opt/ngrinder-controller/perftest/0_999/127/dist for test 127 2020-11-23 05:28:55,428 INFO PerfTestService.java:674 : File write is completed in /opt/ngrinder-controller/perftest/0_999/127/dist 2020-11-23 05:28:55,430 INFO PerfTestService.java:629 : Grinder Properties : {grinder.threads=5, grinder.jvm.user.library.classpath=., grinder.numberOfOldLogs=1, grinder.test.id=test_127, grinder.sleepTimeVariation=0.2, grinder.runs=1, grinder.useConsole=true, grinder.script=scl.divide.test.groovy, grinder.jvm=java, grinder.security=false, grinder.processIncrement=0, grinder.sleepTimeFactor=1, ngrinder.etc.hosts=, grinder.user=admin, grinder.reportTimesToConsole=true, grinder.debug.singleprocess=false, grinder.processes=2, grinder.security.level=normal, grinder.ignoreSampleCount=0, grinder.reportToConsole.interval=500, grinder.agents=1, grinder.dcrinstrumentation=true, grinder.logProcessStreams=true} 2020-11-23 05:28:55,448 INFO ConsoleFoundationEx.java:174 : console localhost:12005 has been started 2020-11-23 05:28:55,452 INFO AgentService.java:362 : 1 agents are starting for user admin 2020-11-23 05:28:55,452 INFO AgentService.java:364 : - Agent b646a59a856c 2020-11-23 05:28:55,456 INFO AgentControllerServerDaemon.java:246 : Process 'b646a59a856c' [b646a59a856c:1545087375|1603877200308|-1046521249:0] agent is started. 2020-11-23 05:28:55,960 INFO SingleConsole.java:382 : Send digest of distribution files to agent for refresh agent's cache directory. 2020-11-23 05:28:56,975 INFO Home.java:252 : /opt/ngrinder-controller/perftest/0_999/127/report is created. 2020-11-23 05:28:56,979 INFO SingleConsole.java:1195 : Sampling is started 2020-11-23 05:29:15,191 INFO Home.java:252 : /opt/ngrinder-controller/perftest/0_999/127/logs is created. 2020-11-23 05:29:17,472 ERROR PerfTestRunnable.java:402 : Abnormal test 127 due to SCRIPT_ERROR 2020-11-23 05:29:18,200 INFO PerfTestRunnable.java:470 : Terminate 127 2020-11-23 05:29:18,203 INFO SingleConsole.java:1207 : Sampling is stopped 2020-11-23 05:29:18,203 INFO PerfTestService.java:986 : Total Statistics for test 127 is {} 2020-11-23 05:29:19,890 WARN PerfTestService.java:762 : Report TPS for test 127 does not exist. |
중요한 정보를 누락했습니다.
report 하위 파일 자체를 생성하지 못합니다. logs 하위 파일은 생성합니다. 설치된 서버 메모리는 넉넉합니다... |
Administrator
|
안녕하세요.
에이전트 2개(A, B)를 구동 시켰다고 말씀하셨는데, 아마 에이전트(부하 발생기)와 컨트롤러(웹 어플리케이션)를 헷갈리신 것 같습니다. 아래 로그를 보면 1에이전트로 테스트를 진행하신 것 같아요. '1 agents are starting for user admin' 그럼 해당 로그를 좀 더 살펴보면 다음과 같은 메시지가 있는데요. 'ERROR PerfTestRunnable.java:402 : Abnormal test 127 due to SCRIPT_ERROR' 이는 sampling count가 0이고, 에이전트로부터 오는 processReports에 데이터가 없는 경우입니다. 대게 스크립트에 recording 하는 부분을 누락하셨거나, 잘 못 작성하신 경우 발생되게 됩니다. 테스트가 실행은 되지만, TPS 그래프에 아무것도 찍히지 않고 데이터가 출력되는 게 없다면 스크립트에 recording 하는 부분을 살펴봐 주세요. |
먼저 좋은 답변에 정말 감사드립니다.
에이전트 2개라고 말함은, 말 그대로 두 대의 서버에 각기 에이전트-컨트롤러를 설치하였고, 참고용 로그는 문제가 발생한 서버의 에이전트에서 발생시킨 로그를 첨부했었습니다. 말씀주신 '스크립트에 recording 하는 부분' 이 어디를 말씀하시는건지 잘 모르겠습니다. assertThat 말고는 응답에 대해 특별히 처리하는 구문은 특별히 작성되지 않았습니다. 두 대의 서버에서 실행한 테스트는 설정부터 스크립트까지 동일합니다. 주신 답변을 참고하였고, 정상적으로 작동한 서버에서는 recording이 정상적으로 동작하는 것로 말미암아 단순히 각 서버의 성능, 자원 등에 따른 차이점이 있다는 결과를 도출했습니다. 하여 질문을 재차 드리고 싶습니다. 1. 스크립트 recording 처리를 스크립트에서 선언해야되는 시점. 2. 스크립트 recording을 테스트 결과에 상관없이 강제적으로 남길 수 있는 방법이 있는지 다시 한번 좋은 답변에 감사드립니다. |
Administrator
|
혹시 아래의 스크립트를 오류가 발생하는 컨트롤러에서 실행 시켜도 똑같은 현상이 발생 되시나요?
테스트 전, 에이전트를 컨트롤러로 부터 새로 다운받아 실행 시킨 후 테스트 해보시길 권장드립니다. import static net.grinder.script.Grinder.grinder import static org.junit.Assert.* import static org.hamcrest.Matchers.* import net.grinder.plugin.http.HTTPRequest import net.grinder.plugin.http.HTTPPluginControl 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.BeforeThread // 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 import java.util.Date import java.util.List import java.util.ArrayList import HTTPClient.Cookie import HTTPClient.CookieModule import HTTPClient.HTTPResponse import HTTPClient.NVPair @RunWith(GrinderRunner) class TestRunner { public static GTest test public static HTTPRequest request public static NVPair[] headers = [] public static NVPair[] params = [] public static Cookie[] cookies = [] @BeforeProcess public static void beforeProcess() { HTTPPluginControl.getConnectionDefaults().timeout = 6000 test = new GTest(1, "Test1") request = new HTTPRequest() grinder.logger.info("before process."); } @BeforeThread public void beforeThread() { test.record(this, "test") grinder.statistics.delayReports=true; grinder.logger.info("before thread."); } @Before public void before() { request.setHeaders(headers) cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) } grinder.logger.info("before. init headers and cookies"); } @Test public void test(){ sleep(300); } } |
Free forum by Nabble | Edit this page |