Tomcat Connector의 maxThreads, maxConnections, acceptCount 차이
Tomcat 앞단에서 동시 접속이 몰릴 때 세 값이 서로 다른 층에서 동작합니다. 헷갈려서 maxThreads만 올리는 경우가 많은데, 요청이 처리되는 경로를 순서대로 보면 구분이 됩니다. 요청 하나는 처리되는 동안 스레드 하나를 잡습니다. 가용 스레드가 부족하면 maxThreads까지 스레드를 늘려 처리하고, 그보다 더 몰리면 maxConnections에 도달할 때까지 커넥션을 받아 서버 소켓 안에 큐잉해 스레드가 나기를 기다립니다. maxConnections까지 차면 그 다음부터는 OS 커넥션 큐에 쌓이고, 이 OS 큐 길이가 acceptCount입니다. OS 큐마저 차면 이후 연결은 거부되거나 타임아웃됩니다.
Tomcat 10.1 기준 기본값은 maxThreads 200, maxConnections 8192, acceptCount 100, connectionTimeout 60000ms입니다. 다만 Tomcat이 배포하는 기본 server.xml은 connectionTimeout을 20000으로 설정해 둡니다. minSpareThreads 기본값은 10이고요.
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200"
minSpareThreads="10"
maxConnections="8192"
acceptCount="100"
connectionTimeout="20000" />한 가지 주의점은 공유 Executor를 Connector에 연결한 경우입니다. 이때 Connector의 maxThreads는 무시되고 스레드 설정은 Executor를 따릅니다. 값은 기록되지만 JMX 등에서는 사용되지 않음을 나타내려고 -1로 보인다고 문서에 나와 있습니다. 스레드 수를 조정했는데 반영이 안 되어 보이면 Executor가 붙어 있는지부터 확인해볼 필요가 있습니다.
🔗 https://tomcat.apache.org/tomcat-10.1-doc/config/http.html
로그인 후 답글을 남길 수 있습니다.