Report TPS for test {} does not exist 에러에 대해서

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Report TPS for test {} does not exist 에러에 대해서

Jung
안녕하세요. 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.
Reply | Threaded
Open this post in threaded view
|

Re: Report TPS for test {} does not exist 에러에 대해서

Jung
중요한 정보를 누락했습니다.

report 하위 파일 자체를 생성하지 못합니다. logs 하위 파일은 생성합니다.

설치된 서버 메모리는 넉넉합니다...
Reply | Threaded
Open this post in threaded view
|

Re: Report TPS for test {} does not exist 에러에 대해서

leedonggyu
안녕하세요.
에이전트 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 하는 부분을 살펴봐 주세요.
Reply | Threaded
Open this post in threaded view
|

Re: Report TPS for test {} does not exist 에러에 대해서

Jung
먼저 좋은 답변에 정말 감사드립니다.

에이전트 2개라고 말함은, 말 그대로 두 대의 서버에 각기 에이전트-컨트롤러를 설치하였고, 참고용 로그는 문제가 발생한 서버의 에이전트에서 발생시킨 로그를 첨부했었습니다.

말씀주신 '스크립트에 recording 하는 부분' 이 어디를 말씀하시는건지 잘 모르겠습니다.
assertThat 말고는 응답에 대해 특별히 처리하는 구문은 특별히 작성되지 않았습니다.
두 대의 서버에서 실행한 테스트는 설정부터 스크립트까지 동일합니다.

주신 답변을 참고하였고, 정상적으로 작동한 서버에서는 recording이 정상적으로 동작하는 것로 말미암아
단순히 각 서버의 성능, 자원 등에 따른 차이점이 있다는 결과를 도출했습니다.

하여 질문을 재차 드리고 싶습니다.
1. 스크립트 recording 처리를 스크립트에서 선언해야되는 시점.
2. 스크립트 recording을 테스트 결과에 상관없이 강제적으로 남길 수 있는 방법이 있는지

다시 한번 좋은 답변에 감사드립니다.
Reply | Threaded
Open this post in threaded view
|

Re: Report TPS for test {} does not exist 에러에 대해서

leedonggyu
혹시 아래의 스크립트를 오류가 발생하는 컨트롤러에서 실행 시켜도 똑같은 현상이 발생 되시나요?
테스트 전, 에이전트를 컨트롤러로 부터 새로 다운받아 실행 시킨 후 테스트 해보시길 권장드립니다.

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);
        }
}
Reply | Threaded
Open this post in threaded view
|

Re: Report TPS for test {} does not exist 에러에 대해서

Jung
작성해주신 스크립트 실행 시 문제 없음을 확인했습니다.
권장해주신 방법으로 에이전트 재 설치 후 테스트 진행해보겠습니다.

친절한 답변 감사드립니다.
차후에도 여러가지 질문이 필요할 것 같지만 일단 앞전에 질문드렸던 내용은 정상 작동되는 서버를 사용하는 것으로 결론지었습니다.

정말로 감사드립니다.