종종(어쩔 때는 자주) 아래와 같은 형태의 오류가 발생합니다.
검색해보니 Controller 와 Agent 사이의 통신이 불량할 때 발생할 수 있다고 나오던데요...vlan 으로 연결된 클라우드 서버 간에 연결된 것이라... 처음부터 발생하는 경우는 기본 설정을 바꾸면 되던데, 테스트 도중 이렇게 뜰 때도 있습니다. 테스트 대상 서버의 문제는 아닌건가요? 조언 부탁드립니다. 2013-12-25 01:06:18,245 INFO cc1e40dd-4f1d-4fb5-9155-5f0aa7988df7-1: Report to console failed net.grinder.communication.CommunicationException: Exception whilst sending message at net.grinder.communication.AbstractSender.send(AbstractSender.java:57) ~[grinder-core-3.9.1.jar:na] at net.grinder.communication.QueuedSenderDecorator.flush(QueuedSenderDecorator.java:60) ~[grinder-core-3.9.1.jar:na] at net.grinder.engine.process.GrinderProcess.sendStatusMessage(GrinderProcess.java:568) ~[grinder-3.9.1-patch.jar:na] at net.grinder.engine.process.GrinderProcess.access$6(GrinderProcess.java:563) ~[grinder-3.9.1-patch.jar:na] at net.grinder.engine.process.GrinderProcess$ReportToConsoleTimerTask.run(GrinderProcess.java:552) ~[grinder-3.9.1-patch.jar:na] at java.util.TimerThread.mainLoop(Timer.java:555) ~[na:1.7.0_25] at java.util.TimerThread.run(Timer.java:505) ~[na:1.7.0_25] Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.7.0_25] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) ~[na:1.7.0_25] at java.net.SocketOutputStream.write(SocketOutputStream.java:153) ~[na:1.7.0_25] at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[na:1.7.0_25] at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[na:1.7.0_25] at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1816) ~[na:1.7.0_25] at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:716) ~[na:1.7.0_25] at net.grinder.communication.AbstractSender.writeMessageToStream(AbstractSender.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 |
Administrator
|
예. 말씀 하신 에러는 테스트 대상의 문제가 아니라..
ngrinder controller 와 agent 간의 통신 문제입니다. agent 에서 대량의 트래픽을 다루고 있을때 controller와 agent 간의 통신이 끊기고 이에 테스트가 중단되는 경우가 간간히 발생하는데요.(대신 에이전트를 자동으로 재시작하여 재 접속 시킵니다.) 저희도 아직까지 해결하지 못했습니다. 하단의 grinder 엔진에서 컨트롤러<=>에이전트 간의 통신에 아주 기초적인 소켓 통신을 사용하고 있고, 여기에 에러 복구를 위한 어떠한 추가적인 프로토콜도 사용하고 있지 않기 때문에 엔진을 크게 손보지 않는이상 이 문제는 한동안 안고가야 하는 것이라 생각하고 있습니다. 이 문제는 너무 많은 트래픽을 발생시킬 때 발생 가능성이 증가함으로, 에이전트 수를 늘려서 한 에이전트당 실행하는 최대 vuser 수를 적절히(최대 3000 정도로) 줄여주시면 이 문제는 거의 발생하지 않을 겁니다. 참고로 네이버에서 운영하는 ngrinder 인스턴스(총 80여대 규모)에서는 해당 에러가 발생하지 않습니다. 이는 에이전트와 컨트롤러가 3gbps 정도로 빠르고 신뢰성 있는 네트웍 구간상에 연결되어 있어서 그런것 같습니다. |
저의 경우 원인은 찾았습니다. 스크립트를 잘못 만들었더군요.
@BeforeProcess 에 있던 DB 쿼리를 @BeforeThread 로 옮겼습니다. 이유는 사용자 id 을 random 하게 DB 에서 조회해서 Thread 에서 사용을 하게 하려고 했는데, @BeforeProcess 에 넣으니 프로세스 개수(10개) 만큼만 쿼리를 실행하기 때문에 2000 vUser 을 이용할 경우 200 번의 같은 아이디 동시접속(?)이 발생할 수 있겠더라구요. 그래서 이걸 @BeforeThread 로 옮겨서 실행하게 했더니 비교적 많은 쿼리를 실행하게 되어서 분산이 되더군요(그런데, 이 경우 2000 번을 실행하는 것이 맞죠?). 게다가 Groovy 에서 DB 을 connection 한 뒤 close() 을 안적어줘서 DB Connection Full 까지 떠버려서... 어쨌든 현재로썬 수정을 했습니다. 중복되지 않는 수를 가져오는 부분을 좀 더 고민해봐야겠습니다. 조언 감사합니다. |
Free forum by Nabble | Edit this page |