안녕하세요.
전에 문의 드린 파일 로드 및 동시 실행 관련해서 스크립트를 작성했습니다. # -*- coding:utf-8 -*- from net.grinder.script import Test from net.grinder.script.Grinder import grinder from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest control = HTTPPluginControl.getConnectionDefaults() connectionDefaults = HTTPPluginControl.getConnectionDefaults() httpUtilities = HTTPPluginControl.getHTTPUtilities() test1 = Test(1, "Test1") request1 = HTTPRequest() test_host = "http://www.google.co.kr/" request1 = test1.wrap(HTTPRequest(url=test_host)) # Make any method call on request increase TPS test1.record(request1) #load from file test_query_file = "D:\url_all.txt" #(로컬 테스트용) class TestRunner: def __init__(self): grinder.statistics.delayReports=True self.urlCount = 0 self.urlList = [] try: fpQuery = open(test_query_file, "r") for line in fpQuery: self.urlList.append(line) self.urlCount = self.urlCount + 1 print line except: print("error") # finally: # print(self.urlCount) self.phase1CompleteBarrier = grinder.barrier("Phase 1") def __call__(self): # Wait for all worker threads to reach this point before proceeding. self.phase1CompleteBarrier.await() for line in self.urlList: result1 = request1.GET(line) if result1.getStatusCode() == 200 : grinder.statistics.forLastTest.success = 1 elif result1.getStatusCode() in (301, 302) : grinder.logger.warn("Warning. The response may not be correct. The response code was %d." % result1.getStatusCode()) grinder.statistics.forLastTest.success = 1 else : print(result1.getStatusCode()) grinder.statistics.forLastTest.success = 0 url_all.txt에는 테스트 데이터가 저장되어있습니다. (10개의 테스트 될 각기 다른 url) 테스트 되어야할 대상 url을 url_all.txt 파일에서 읽어와서 배열에 넣고 동시에 읽어온 url을 호출하려는 의도입니다. 코드가 적절한지 한번 리뷰 부탁 드립니다. 그리고, 실제 for문으로 배려에서 읽어온 url을 호출하게 되어있는데, 이부분이 동시에 실행이 가능한 지 여부(랑데뷰 포인트), 쓰레드 10개로 설정한 경우 한개의 쓰레드에서 for문에서 반복되는 횟수만큼 실행이 되는건지요?(url이 10개인 경우) 총 100개의 url 호출되는 효과인지? 만일 유일하게 1개의 쓰레드에서 파일에서 로드된 1개의 유일한 url을 호출하고자 하는 경우에는 어떻게 처리해야하는지 확인 부탁 드립니다. 처음 접하다 보니 어렵네요. ㅠㅠ 감사합니다. |
Administrator
|
정확히 어떤 시나리오를 테스트 하시려고 하는지 잘 모르겠습니다. 만약 각 쓰레드에게 다른 일을 시키시려고 하시면 다음 자료를 참고하시기 바랍니다. 2014년 3월 11일 오후 12:50, mulder [via ngrinder] <[hidden email]>님이 작성: 안녕하세요. |
This post was updated on .
그대로 옮기다보니 리소스 부분 수정을 안해서 발생한 문제입니다.
해결되었습니다. 감사합니다. ====================================================== 말씀해주신 부분 적용해서 쓰레드별로 유일한 url을 호출하도록 수정하였습니다. 다만, 로컬 환경(eclipse+jython)에서 정상 동작하지만, nGrinder에 올려서 테스트하면 실행 시 오류가 발생합니다. # -*- coding:utf-8 -*- from net.grinder.script import Test from net.grinder.script.Grinder import grinder from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest control = HTTPPluginControl.getConnectionDefaults() connectionDefaults = HTTPPluginControl.getConnectionDefaults() httpUtilities = HTTPPluginControl.getHTTPUtilities() test1 = Test(1, "Test1") request1 = HTTPRequest() test_host = "http://www.google.co.kr/" request1 = test1.wrap(HTTPRequest(url=test_host)) # Make any method call on request increase TPS test1.record(request1) #load from file test_query_file = "D:\url_all.txt" class TestRunner: def __init__(self): grinder.statistics.delayReports=True # 에이전트당 프로세스 개수를 가져옵니다. totalProcessCount = grinder.getProperties().getInt("grinder.processes", 1) # 프로세스당 쓰레드 개수를 가져옵니다. totalThreadCount = grinder.getProperties().getInt("grinder.threads", 1) # 현재 이 쓰레드가 동작하는 에이전트의 번호를 가져옵니다. (0부터 시작) agentNumber = grinder.agentNumber # 현재 이 쓰레디가 동작하는 프로세스의 번호를 가져옵니다. (0부터 시작) processNumber = grinder.processNumber # 현재 이 쓰레드의 번호를 가져옵니다. threadNumber = grinder.threadNumber # 현재 쓰레드의 Unique ID를 계산합니다. self.curNumber = (agentNumber * totalProcessCount * totalThreadCount) + (processNumber * totalThreadCount) + threadNumber; self.urlCount = 0 self.urlList = [] try: fpQuery = open(test_query_file, "r") for line in fpQuery: self.urlList.append(line) except: print("error") self.phase1CompleteBarrier = grinder.barrier("Phase 1") def __call__(self): # Wait for all worker threads to reach this point before proceeding. self.phase1CompleteBarrier.await() url = self.urlList[self.curNumber] result1 = request1.GET(url) if result1.getStatusCode() == 200 : grinder.statistics.forLastTest.success = 1 elif result1.getStatusCode() in (301, 302) : grinder.logger.warn("Warning. The response may not be correct. The response code was %d." % result1.getStatusCode()) grinder.statistics.forLastTest.success = 1 else : print(result1.getStatusCode()) # grinder.statistics.forLastTest.success = 0 아래 부분에서 오류가 발생합니다. result1 = request1.GET(url) index out of range: 0 이라고 오류가 발생하는데 무슨 문제인지 확인 부탁 드립니다. 감사합니다. |
In reply to this post by junoyoon
nGrinder 실행 중에 이상한 점이 발생하여 문의 드립니다.
vUser를 차츰 증가 시키면서 테스트 했는데, 400명 정상, 800명 정상, 1200명 정상, 1600명 오류 발생 1600명 오류 발생 이후에 적은 수의 vUser로 테스트 해도 오류가 발생하여 실행이 안됩니다. 에이전트 리스타트 이후 정상 동작함. 아래는 에이전트 로그인데, 무슨 문제인지 알수가 없습니다. 도움 부탁 드립니다. 감사합니다. <Agent1 error> 2014-03-11 17:41:06,408 INFO agent daemon: received a stop message 2014-03-11 17:41:06,408 INFO agent daemon: Don't start anymore by message from controller. 2014-03-11 17:41:06,440 INFO agent daemon: communication shut down 2014-03-11 17:41:06,440 INFO s-lr1-0: Waiting for threads to terminate 2014-03-11 17:41:06,876 ERROR agent daemon: Error while pumping up the AgentProc essReportMessage 2014-03-11 17:41:06,939 INFO s-lr1-0: Report to console failed net.grinder.communication.CommunicationException: Exception whilst sending messa ge at net.grinder.communication.AbstractSender.send(AbstractSender.java:57) ~[grinder-core-3.9.1.jar:na] at net.grinder.communication.QueuedSenderDecorator.flush(QueuedSenderDec orator.java:60) ~[grinder-core-3.9.1.jar:na] at net.grinder.engine.process.GrinderProcess.sendStatusMessage(GrinderPr ocess.java:544) ~[ngrinder-runtime-3.3.jar:na] at net.grinder.engine.process.GrinderProcess.access$1100(GrinderProcess. java:83) ~[ngrinder-runtime-3.3.jar:na] at net.grinder.engine.process.GrinderProcess$ReportToConsoleTimerTask.ru n(GrinderProcess.java:528) ~[ngrinder-runtime-3.3.jar:na] at java.util.TimerThread.mainLoop(Unknown Source) [na:1.7.0_51] at java.util.TimerThread.run(Unknown Source) [na:1.7.0_51] Caused by: java.net.SocketException: Software caused connection abort: socket wr ite error at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.7.0_51 ] at java.net.SocketOutputStream.socketWrite(Unknown Source) ~[na:1.7.0_51 ] at java.net.SocketOutputStream.write(Unknown Source) ~[na:1.7.0_51] at java.io.BufferedOutputStream.flushBuffer(Unknown Source) ~[na:1.7.0_5 1] at java.io.BufferedOutputStream.flush(Unknown Source) ~[na:1.7.0_51] at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source ) ~[na:1.7.0_51] at java.io.ObjectOutputStream.flush(Unknown Source) ~[na:1.7.0_51] at net.grinder.communication.AbstractSender.writeMessageToStream(Abstrac tSender.java:90) ~[grinder-core-3.9.1.jar:na] at net.grinder.communication.StreamSender.writeMessage(StreamSender.java :70) ~[grinder-core-3.9.1.jar:na] at net.grinder.communication.AbstractSender.send(AbstractSender.java:53) ~[grinder-core-3.9.1.jar:na] ... 6 common frames omitted 2014-03-11 17:41:11,447 INFO agent daemon: Terminating unresponsive processes b y force 2014-03-11 17:41:11,634 INFO agent daemon: All workers are finished 2014-03-11 17:41:11,634 INFO agent daemon: Test shuts down. 2014-03-11 17:41:11,634 INFO agent controller: Send log for test_71 2014-03-11 17:41:11,634 INFO agent controller: Clean up the perftest logs |
Administrator
|
ulmit 을 조정하셔야 할 듯 합니다. 2014-03-11 17:54 GMT+09:00 mulder [via ngrinder] <[hidden email]>: nGrinder 실행 중에 이상한 점이 발생하여 문의 드립니다. |
This post was updated on .
안녕하세요.
리눅스가 아니라 윈도우인데 질문에서 빠뜨렸네요. 죄송합니다. 윈도우 환경에서 조정하는 방법 부탁 드립니다. windows server 2008 R2(x64) 감사합니다. |
Administrator
|
윈도우 환경이라면.. 위 문제는 발생하지 않습니다. 대신 이 문제는 가용메모리가 작아서 에이전트가 오동작 했을 가능성이 있군요. 메모리를 올리시거나, 아니면 프로세스 개수를 작게 하셔서 실행해보세요. 2014-03-11 18:51 GMT+09:00 mulder [via ngrinder] <[hidden email]>: 안녕하세요. |
Administrator
|
In reply to this post by mulder
result1 = request1.GET(url) 에서는 index out of range: 0 에러가 발생하지 않습니다. 다른 문제를 오해하신 듯 합니다.
아무래도 파이선 프로그레밍에 익숙하지 않으셔서 nGrinder 를 사용하시는데 어려움을 느끼시는 것 같습니다. 자바가 친숙하시다면 Groovy를 사용하시기 바라며, 만약 자바도 익숙하지 않으시다면
LoadRunner 와 같이 외부 기술 지원을 받으실 수 있는 제품을 사용하시는 편이 더 나을 것 같습니다. 2014-03-11 16:03 GMT+09:00 mulder [via ngrinder] <[hidden email]>: 말씀해주신 부분 적용해서 쓰레드별로 유일한 url을 호출하도록 수정하였습니다. |
Free forum by Nabble | Edit this page |