저는 springboot에서 Tomcat 구성을 다루고 있습니다.
다음 구성이 있다고 가정 해 보겠습니다.
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:1}
max-connections: ${max-tomcat-connections:100}
이 코드로 간단한 RestController가 있습니다.
public String request(@Valid @RequestBody Info info) {
log.info("Thread sleeping");
Thread.sleep(8000);
return "OK";
}
그런 다음 다음 테스트를 수행합니다.
- 초당 200 개의 HTTP 요청을 보냅니다.
- 로그를 확인하고 예상대로 100 개의 동시 실행이 표시되고 8 초 후에 마지막 실행 (대기 중)이 표시됩니다.
- 다른 실행은 거부됩니다.
내가 가진 주요 문제는 클라이언트 호출에 대한 제한 시간 제어 (예 : 5 초)가있는 경우 대기중인 작업이 클라이언트에서 거부 된 경우에도 서버에서 처리된다는 것입니다. 이 상황을 피하고 싶어서 다음과 같이 시도했습니다.
server:
tomcat:
min-spare-threads: ${min-tomcat-threads:20}
max-threads: ${max-tomcat-threads:20}
accept-count: ${accept-concurrent-queue:0}
max-connections: ${max-tomcat-connections:100}
그러나이 "0"은 완전히 무시됩니다 (이 경우 "무한"을 의미한다고 생각합니다). 그래서, 내 질문은 : ¿ 최대 연결 제한에 도달하면 작업을 대기열에 넣지 않도록 Tomcat을 구성 할 수 있습니까? 아니면 ¿ 대기열에있는 작업을 거부하도록 Tomcat을 구성 할 수 있습니까?
미리 감사드립니다.
친애하는.