안녕하세요.
ngrinder 사용중 이슈가 발생하여 문의드립니다. -------------------- :: 이슈 - ngrinder에서 윈도우 웹서버로 POST파라미터를 하나라도 보내면 GET호출에 비해 심각한 응답지연이 발생함. : 테스트시 사용된 버전들 - ngringer시스템: CentOS 5.x, jdk 1.6+tomcat6, jdk1.7+tomcat7 (jdk1.8은 ngrinder 에러발생), ngrinder-3.3, ngrinder-3.2.3, - 웹서버시스템: Windows Server 2008, jdk1.7+tomcat7, IIS7 : 테스트한 스크립트 방식 - jython (GET, POST) - groovy (GET, POST) : 테스트 jsp페이지 (IIS페이지는 상용소스라 생략) test.jsp <%@ page language="java" contentType="text/html; charset=euc-kr" %> <% request.setCharacterEncoding("euc-kr"); String id=request.getParameter("id"); out.println(id); %> : 테스트결과 (각 패키지(jdk, ngrinder, tomcat) 버전을 불문하고 결과는 동일하게 나왔음) 1) ngrinder(리눅스) ----> 톰캣(리눅스) GET호출과 POST호출의 응답속도 동일 2) ngrinder(리눅스) ----> 톰캣(윈도우) GET호출에 비해 POST호출이 매우 느림(약 20배정도의 응답지연) (GET:17ms, POST: 200ms) (부하검증을 하면 POST호출은 성능저하가 더욱 심해진다) 3) ngrinder(리눅스) ----> IIS(윈도우) GET호출에 비해 POST호출이 매우 느림(약 20배정도의 응답지연) (부하검증을 하면 GET에 비해 POST호출은 TPS성능 저하가 더욱 심해짐) 4) curl(리눅스) ----> 톰캣(윈도우), IIS(윈도우) GET호출과 POST호출의 응답속도 동일 ------------------- <> 예상결론 - ngrinder(리눅스)에서 윈도우 웹서버 접속시 지연이 발생함. - curl로 접속 시 지연이 없기 때문에 리눅스와 윈도우간 문제라기보다는 ngrinder의 문제 <> 대응책 - ngrinder,jdk,tomcat의 버전변경으로는 해결 불가 로컬에 nginx proxy를 구현하여 임시해결 =========================================================== * ngrinder스크립트 작성(POST) ---------------------------------------------------------------------------------------- # -*- coding:utf-8 -*- # 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 from net.grinder.script.Grinder import grinder from net.grinder.script import Test from net.grinder.plugin.http import HTTPRequest, HTTPPluginControl from HTTPClient import Cookie, CookieModule from java.util import Date from HTTPClient import NVPair control = HTTPPluginControl.getConnectionDefaults() control.timeout = 6000 test1 = Test(1, "post_test") requestPost = HTTPRequest() test1.record(requestPost) class TestRunner: # initlialize a thread def __init__(self): grinder.statistics.delayReports=True pass # test method def __call__(self): #url = "http:// xxxxx.xxxxxx.xxxxx:8080/test.jsp" url = "http://127.0.0.1:81/test.jsp" #로컬nginx를 호출 params = [NVPair("id", "ttt")] result = requestPost.POST(url, params) rs = result.getText() grinder.logger.info(rs) 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 위 방법으로 테스트시 GET과 POST호출의 응답속도 차이가 거의 발생하지 않음! (POST 부하검증도 잘 진행됨) ============================================================ (문의> 제가 뭔가 잘못한 부분이 있는것인지, 아니면 ngrinder의 버그인지 명확한 원인 확인과 문제 해결방법이 궁금합니다. (nginx proxy 등 임시해결책이 아닌) |
Free forum by Nabble | Edit this page |