Spring Boot ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ด์ฅ ํฐ์บฃ์ Servlet Container ๋ก ์ฌ์ฉํ์ฌ ์น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ํฉ๋๋ค. Tomcat ์ ๋ํ ๋ค์ค ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ฐ, ์ด๋ Thread Pool ์ ํตํด ๊ตฌํ๋์ด ์์ต๋๋ค.
Tomcat ์ Java ๋ก ๋ง๋ค์ด์ ธ ์๊ธฐ ๋๋ฌธ์ Java Thread Pool ์ ์ฌ์ฉํฉ๋๋ค.
๋๋ฌธ์ Tomcat ์ ์ดํดํ๊ธฐ ์ํด์ Java Thread Pool ์ ๋ํ ์ดํด๊ฐ ํ์์ ์ ๋๋ค.
org.apache.tomcat.embed:tomcat-embed-core:9.0.64
- apache
- catalina
- core
- StandardServer.java
- startup
- Tomcat.java
- core
- coyote
- http11
- Http11NioProtocol.java
- http11
- juli
- naming
- tomcat
- catalina
Tomcat ์ด ์ฌ์ฉํ๋ StandardServer ๋ฅผ ๋ณด๋ฉด ScheduledThreadPoolExecutor ๋ฅผ ์ฌ์ฉํ๊ณ ์์
์ ์ ์ง์
- Tomcat ์ ์ ScheduledThreadPoolExecutor ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
- NIO Connector ์ ๋ํ ์ดํด ํ์
- ์คํธ๋ฆผ vs ์ฑ๋์ ๋ํ ์ดํด ํ์
-
Spring Boot ๋ Tomcat ์ ๋ด์ฅ Servlet Container ๋ก ์ฌ์ฉ
-
Tomcat ์ Thread Pool ์ ํตํด ๋ค์ค ์์ฒญ์ ์ฒ๋ฆฌ
-
์์ฒญ์ด ๋ค์ด์ค๋ฉด Thread Pool ์์ Thread ๋ฅผ ํ ๋น
-
์คํ๋ง๊ณผ ์คํ๋ง๋ถํธ์ ์ฐจ์ด์ = ๋ด์ฅ Servlet Container ์ง์ ์ฌ๋ถ
์คํ๋ง๋ถํธ์ ๋ด์ฅ ํฐ์บฃ
# application.yml (์ ์ด๋์ ๊ฐ์ default)
server:
tomcat:
threads:
max: 200 # ์์ฑํ ์ ์๋ thread์ ์ด ๊ฐ์
min-spare: 10 # ํญ์ ํ์ฑํ ๋์ด์๋(idle) thread์ ๊ฐ์
max-connections: 8192 # ์๋ฆฝ๊ฐ๋ฅํ connection์ ์ด ๊ฐ์
accept-count: 100 # ์์
ํ์ ์ฌ์ด์ฆ
connection-timeout: 20000 # timeout ํ๋จ ๊ธฐ์ค ์๊ฐ, 20์ด
port: 8080. # ์๋ฒ๋ฅผ ๋์ธ ํฌํธ๋ฒํธ
- ์ ์ค์ ์ ํตํด Tomcat ์ ThreadPoolExecutor ์ Connector ๋ฅผ ์ค์ ํ ์ ์์
- Core Size ๋งํผ ์ค๋ ๋ ์์ฑ
- ์์ฒญ์ด ๋ค์ด์ฌ ๋ ๋ง๋ค Queue ์ ๋ด์๋
- Core Size ์ค idle ์ํ์ ์ค๋ ๋๊ฐ ์๋ค๋ฉด Queue ์์ ์์
์ ๊บผ๋ด ์ค๋ ๋์ ํ ๋น
- ๋ง์ฝ idle ์ํ์ ์ค๋ ๋๊ฐ ์๋ค๋ฉด Queue ์์ ๋๊ธฐ
- Queue ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์๋ก ์ค๋ ๋๋ฅผ ์์ฑ
- maxThreadSize ์ ๋๋ฌํ๋ฉด connection-refused ๋ฐํ
- ์์
์ด ์๋ฃ๋๋ฉด ์ค๋ ๋๋ ๋ค์ idle ์ํ
- Queue ๊ฐ ๋น์ด์๊ณ Core Size ์ด์์ ์ค๋ ๋๊ฐ ์์ฑ๋์ด ์๋ค๋ฉด ์ด๊ณผ๋ ์ค๋ ๋๋ฅผ destroy
์ค๋ ๋๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด CPU ์ ์์์ ๋๊ณ ๊ฒฝํฉํ๊ฒ๋์ด ์ฒ๋ฆฌ์๋ ์ ํ ๋ฐ CPU ์์ ํ์ฉ ๋นํจ์จ ๋ฐ์
๋ฐ๋ผ์, ์ ์ ํ ์ค๋ ๋ ์๋ก ์ค์ ํ๋ ๊ฒ์ด ํ์ํจ
์ค๋ ๋ํ ์ ๋ต๊ณผ ์ ์ ์ค๋ ๋ ๊ฐ์๋ก ๊ฒ์
์ค๋ ๋ํ
์๋ฐ์์ ThreadPoolExecutor ๋ฅผ ํตํด ์ค๋ ๋ํ์ ์ฌ์ฉ
accept-count = ์์ ๋๊ธฐ์ด
์คํ๋ง๋ถํธ๋ Integer.MAX 21์ต ์ ์ค์ ๋ฌดํ ๋๊ธฐ์ด ์ ๋ต์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ
server:
tomcat:
threads:
max: 2
min-spare: 2
accept-count: 1
port: 5000
์ด ์ํ์์ 5๊ฐ์ ์์ฒญ์ ๋ณด๋ด๋ฉด?
5๊ฐ ๋ชจ๋ ์ฒ๋ฆฌ๋จ
BIO ์์ 3๊ฐ๋ง ์ฒ๋ฆฌ๋๋ค๊ณ ํ๊ณ
NIO ์ฌ์ 5๊ฐ๊ฐ ๋ค ์ฒ๋ฆฌ๋๋ค๊ณ ํ๋๋ฐ
์ฌ์ค์ max-connections ๊ฐ ์์ด์ ๋๋๊ฑฐ์๋
๊ทธ๋ผ max-connections ๋ NIO ๋๋ฌธ์ ๊ฐ๋ฅํ๊ฐ?