Connection reset on each test run 옵션과 Connection refused의 관계

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

Connection reset on each test run 옵션과 Connection refused의 관계

Luke
안녕하세요.

nGrinder를 통해 테스트 진행 중, 아래와 같이 에러 메세지를 받게 되어 질문 드립니다. (output log의 일부입니다.)

```
2021-06-14 03:03:08,964 ERROR java.util.concurrent.ExecutionException: java.net.ConnectException: Connection refused
java.net.ConnectException: Connection refused
        at org.apache.hc.core5.reactor.InternalConnectChannel.onIOEvent(InternalConnectChannel.java:64)
        at org.apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:51)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:179)
        at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:128)
        at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:85)
        at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
```

특이한 점은 일정 요청까지는 정상적으로 동작하다가 어느 순간부터 위 메세지가 나오면서 거의 모든 요청이 refused됩니다.




Advanced Configuration에서 Connection reset on each test run 옵션을 체크 해제하니 위와 같은 증상이 사라졌습니다.

본 옵션을 체크하였을 때 나오는 증상이 버그인지, 아니면 제가 무언가 잘못한 것인지 궁금합니다.


[환경]

nGrinder v3.5.5-p1

테스트 타겟:
Spring 5.3.8
Spring boot 2.5.1
Reply | Threaded
Open this post in threaded view
|

Re: Connection reset on each test run 옵션과 Connection refused의 관계

leedonggyu
This post was updated on .
안녕하세요.

에러 메시지로 추측해 본다면, 서버쪽에서 connection full 상태라 추가 요청에 대한 connection을 처리하지 못하는 듯 보이는데요.
'Connection reset on each test run' 체크를 해제하시고 테스트를 하시면 keep alive 형태로 테스트가 진행되기 때문에 해당 문제가 발생하지 않는게 아닌가 싶습니다.

vuser를 좀 줄여서 테스트 해보시거나, 서버 설정을 변경하시고 한번 해보실 수 있나요?
그리고, 똑같은 스크립트를 legacy groovy로 작성하셔서 같은 현상이 발생하는지 한번 테스트 부탁드립니다.
Reply | Threaded
Open this post in threaded view
|

Re: Connection reset on each test run 옵션과 Connection refused의 관계

Luke
말씀해주신 부분을 모두 시도해 보았지만 여전합니다.

서버 설정 부분은 혹시 제가 빼먹은게 있을지도 모르니 계속 다른 설정으로 시도해 보고 있긴 합니다.
Reply | Threaded
Open this post in threaded view
|

Re: Connection reset on each test run 옵션과 Connection refused의 관계

junoyoon
Administrator
https 인가요? http 인가요?
Reply | Threaded
Open this post in threaded view
|

Re: Connection reset on each test run 옵션과 Connection refused의 관계

Luke
http 입니다.
Reply | Threaded
Open this post in threaded view
|

Re: Connection reset on each test run 옵션과 Connection refused의 관계

junoyoon
Administrator
아무런 설정을 안하면
ngrinder 는 한번의 test run 시마다, 서버로 연결된 커넥션을 끊고, 다시 테스트를 수행할때 커넥션을 맺습니다.
Connection reset on each test run 을 끄게 되면
서버로 연결된 커넥셜을 전체 테스트 life cylcle 동안 유지합니다.
connectionless protocol 인 HTTP 도 사실은 커넥션을 재활용할 경우, 하단의 tcp keepalive 를 유지하는 정도의 커넥션 유지 기법이 사용되는 것으로 알고 있습니다.

아무래도, Connection reset on each test run 을 킬 경우, 님의 서버에서 tcp 커넥션이 모두 소진된 것으로 보입니다. 따라서 추가적인 접속 요청에 응답하지 못하는 것이구요. 제가 알기론 tcp linger 등의 속성이 이에 영향을 미치는 것으로 알고 있는데요. 한번 확인 부탁드리고, 해결하신 결과를 공유해 주시면 감사하겠습니다.