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

classic Classic list List threaded Threaded
7 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
Administrator
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 등의 속성이 이에 영향을 미치는 것으로 알고 있는데요. 한번 확인 부탁드리고, 해결하신 결과를 공유해 주시면 감사하겠습니다.
Reply | Threaded
Open this post in threaded view
|

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

susannexoxo
In reply to this post by Luke
테스트가 일정 요청까지만 정상 작동하다가 이후 대부분의 요청이 `Connection refused`로 실패하는 경우, 일반적으로 다음과 같은 원인이 있을 수 있습니다:

1. **서버 포트 수용 한계 초과** – 테스트 중 연결 수가 너무 많아져서 서버가 더 이상 새로운 연결을 수락하지 못할 수 있습니다.
2. **서버 자원 부족** – CPU, 메모리 등의 자원이 부족할 경우 연결을 끊거나 거절할 수 있습니다.
3. **TCP 포트 TIME_WAIT 누적** – 너무 많은 짧은 연결이 반복되면 OS가 포트를 해제하지 못해 새 연결이 실패할 수 있습니다.
4. **nGrinder 에이전트/스크립트의 연결 유지 시간** – 연결을 너무 자주 열고 닫는 구조라면 위 현상이 더 빨리 발생할 수 있습니다.

✅ 해결 팁:
- 테스트 사용자 수 또는 TPS를 줄여 테스트를 다시 시도해보세요.
- 대상 서버 로그도 함께 확인하여 서버 측 오류나 부하 상태를 분석하세요.
- 커넥션 풀을 사용하고 Keep-Alive를 설정하여 재사용을 유도하세요.
- OS에서 `ulimit`이나 포트 관련 설정 확인도 필요할 수 있습니다.

<br><br>
En parlant de charge excessive, cela me rappelle l’importance de choisir une tenue légère mais élégante pour rester à l’aise même sous pression. Rien de mieux qu’une robe asymétrique chic pour garder la tête froide et le style intact.