에이전트 로그 에러 질문입니다.

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

에이전트 로그 에러 질문입니다.

박용순
2013-12-18 15:50:58,887 ERROR Aborted run: Java exception calling TestRunner
net.grinder.scriptengine.jython.JythonScriptExecutionException: Java exception calling TestRunner

net.grinder.plugin.http.TimeoutException: Connection establishment timed out

이런 오류가 왜 생기는지 알수있을까요?
무엇을 의미하는지도요.
그리고 Timeout인것 같은데...
control.timeout = 6000

스크립트에서 이 부분을 늘리면 해결되는 문제인가요?
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

junoyoon
Administrator
로드 상황시 아주 자주 발생하는 서버측 문제입니다.
로드 상황에서 테스트 대상 서버가 더이상 에이전트가 요청하는 커넥션을 맺어주지 않아서 대기중에 타임아웃이 걸립니다.

만약 동시 커넥션을 1000을 지원하는 것이 목표인 서버에 대해, 1000 vuser를 사용하여 테스트할 때,
이 오류가 발생한다면, 해당 서버가 동시 커넥션 1000을 지원하지 않느 겁니다.
이와 같은 문제 발생시 스크립트를 고치는 것이 아닌 서버를 고쳐셔야 하는게 맞습니다.

 control = HTTPPluginControl.getConnectionDefaults()
# if you don't want that HTTPRequest follows the redirection, please modify the following option 0.
# control.followRedirects = 1
# if you want to increase the timeout, please modify the following option.
control.timeout = 6000

이 코드는 타임아웃을 늘리는 역할만 합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

박용순
현재 서버는 Apache와 Tomcat 2개를 연동한 후 로드밸런싱을 사용하고 있습니다.

서버를 설정하셔야 한다고 하셨는데, 하드웨어 스팩이 낮아서 연결을 맺어주지 못할수도 있나요?

아니면 서버 설정값에 의하여 연결이 안되도록 아얘 되있는건가요.

혹시 Tomcat 설정의 어느부분을 수정해야 되는지 알수있을까요?
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

junoyoon
Administrator
ngrinder 는 로드를 발생시키는 도구이고, 이에 충실하고 있습니다.
따라서 말씀하신 문제는 전문적인 APM 도구를 사용하시거나,
아니면 서버 튜닝 서적들을 참조하셔서 해결하셔야 할 듯 합니다.

저희가 도와드릴려면 저희에서 서버를 오픈하시고, 비용을 지불하셔야 하기에.. ^^
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

박용순
흠..
그럼 Tomcat으로는 무료이기때문에 설정방법이 없거나 모르시는 것이며, 유료기반의 웹 서버를 사용하면 해결할 수도 있다고 말씀하시는건가요?
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

junoyoon
Administrator
네이버에서 톰켓을 사용할때는 나름 설정을 많이 하고, 대충은 알고 있으나,
이는 ngrinder 의 기술지원 범위에 벗어나는 것으로..

아파치/톰켓 사이트를 참고하시거나 개별 WAS 의 커뮤니티에 질문하시는게 맞는 것 같습니다.

Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

박용순
아래 스크립트를 이용하여 KeepAlives 사용안함으로 설정하니 해당 오류는 사라졌는데요,

System.setProperty("HTTPClient.disableKeepAlives", "true")


아래와 같은 다른 오류가 나오네요.


2013-12-18 17:39:46,398 ERROR Aborted run: Jython exception: <type 'exceptions.UnboundLocalError'>: local variable 'result' referenced before assignment [calling TestRunner]
net.grinder.scriptengine.jython.JythonScriptExecutionException: <type 'exceptions.UnboundLocalError'>: local variable 'result' referenced before assignment
        if result.getStatusCode() == 200 :


이 오류는 어떤것인지 알수 있을까요?
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

junoyoon
Administrator
아래 옵션을 keepalive 를 강제로 끄는 것으로써, 실제 서버에서 리턴하는 옵션과는 다른 방식으로 테스트하게 하는 겁니다.
즉 결과값이 정확해 지지 않습니다. 서버 Response 에서 keepalive 를 리턴하지 않도록 하셔야 합니다.


 local variable 'result' referenced before assignment
        if result.getStatusCode() == 200 :

그리고 위 오류는 result 변수가 할당되지 않은 상태에서 참조하시는 건데요.
스크립트를 자세히 살펴 보세요.
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

박용순
log = grinder.logger.info
err = grinder.logger.error

        def __call__(self):
                try :
                        json="{\"param\":\"test\"}"
                        result = request1.POST(URL, json,(NVPair('Content-Type','application/x-www-form-urlencoded'),))
                except Exception, e:
                        err(e.message)
                        err(json)
                if result.getStatusCode() == 200 :
                        grinder.statistics.forLastTest.success = 1
                elif result.getStatusCode() in (301, 302) :
                        grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result.getStatusCode())
                        grinder.statistics.forLastTest.success = 1
                else :
                        grinder.statistics.forLastTest.success = 0


이런식으로 구성되어 있습니다.

이해가 안가는게 실행 결과가 아래와같이 나오는데..

총 실행 테스트
126,030
성공한 테스트
115,230
에러
10,800

10,800개의 에러(exception)가 발생하여서 로그에 남았는데, 당연히 exception 부분에는 result 변수가 없으니 저 에러가 나오는게 당연한게 아닐까요.

즉, try에서 result를 할당하지, exception 부분에서는 result를 할당하지 않으니까 local variable 'result' referenced before assignment 에러가 나오는게 당연한것 같은데.(제 생각이 맞다면요)

그럼 result를 try 구문 밖에다가 사용해야되나요?
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

junoyoon
Administrator
잘 알고 계십니다. 그러나 저 같으면...

 try :
                        json="{\"param\":\"test\"}"
                        result = request1.POST(URL, json,(NVPair('Content-Type','application/x-www-form-urlencoded'),))
                except Exception, e:
                        err(e.message)
                        err(json)
                        raise e

와 같이 Exception 로깅을 한 다음에 다시 Exception을 던저 버리겠습니다.
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

박용순
감사합니다.
내일 한번 해보도록 하겠습니다.
수고하세요~
Reply | Threaded
Open this post in threaded view
|

Re: 에이전트 로그 에러 질문입니다.

zepinos
이 쓰레드를 지금 봤는데, 혹시 apache 1 대 - tomcat2 2 대를 한 장비에 설치한 뒤 테스트 하셨나요?

장비의 메모리와 tomcat 의 <connector> 의 동시연결수를 늘려는 주셨나요?