외장 Tomcat을 이용하여서 운영하던 서비스를 Spring Boot에서 제공하는 내장 Tomcat으로 전환하기로 하였다.
그 과정에서 Tomcat server.xml 설정의 Connector 내용을 spring boot 설정으로 옮기게 되었다.
각 설정들의 값들 중에 connection, thread에 해당하는 값들을 살펴보도록 하자.
Thread
server.tomcat.threads.max: 200
server.tomcat.threads.min-spare: 10
해당 값들은 application.yml에 "server.tomcat.." 설정을 하지 않았을 때의 default값들이다.
( https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.server.server.tomcat.max-connections )
maxThreads
Connector가 생성할 수 있는 최대 Thread 수로 기본 200이다.
Thread 수 설정은 CPU 사용량을 고려해야 한다.
만약 호스트 CPU 사용량이 적은 경우 Thread 수 증가를 고려해 볼 수 있다.
minSpareThreads
Connector를 생성 시 최초에 만드는 Thread 수로 기본 10이다.
Connector는 항상 이 수만큼의 여유 Thread를 유지한다.
Connection
server.tomcat.max-connections: 8192
server.tomcat.accept-count: 100
maxConnections
서버가 허용하고 처리할 수 있는 최대 연결 개수를 의미한다.
accpetCount
들어오는 연결 요청이 maxConnections에 도달했을 때 들어오는 요청의 대기열(queue) 길이를 의미한다.
이 대기열이 가득 차면, 운영체제가 요청을 거부하거나 연결이 타임아웃 될 수 있다.
keep-alive
server.tomcat.keep-alive-timeout : 30s
server.tomcat.max-keep-alive-requests : 100
keep-alive-timeout
세션 연결 비용 (3-Way HandSharke)을 줄이기 위해, 연결이 닫지 않고 다른 HTTP 요청을 기다리는 시간
(미설정 시 Connection Timeout이 세팅 됨, -1은 사용하지 않음)
max-keep-alive-requests
Keep Alive 유지할 수 있는 최대 HTTP 요청 수
0이나 1은 Keep Alive를 비활성화
-1은 요청 수가 무제한 (Default : 100)