서버가 떴다는 로그가 두 번 나온다 — Tomcat initialized 와 Tomcat started. 왜 한 번이 아니라 두 번일까? 그리고 요청은 아직 하나도 안 보냈는데, 스레드는 몇 개나 떠 있을까?
아래 재생기의 ▶를 누르면 한 스텝씩 진행된다. 금색 테두리가 방금 바뀐 곳이고, 캡션이 무슨 일이 일어났는지 말해 준다. 굵게 밑줄 친 말은 누르면 뜻이 나온다.
장면 · 톰캣이 올라가고 포트가 열린다0 / 10
▶를 누르면 톰캣이 만들어지고 포트가 열리기까지, 그리고 요청이 왔을 때 스레드가 어떻게 쓰이는지 본다.
키보드 · ← → 한 스텝 · Space 재생/멈춤 · Home 처음
톰캣을 만드는 일과 포트를 여는 일은 따로다. 만들어 두고 508ms를 더 기다렸다가 연 이유는, 그 사이에 만들어지는 커넥션 풀과 주소 표가 없으면 들어온 요청이 갈 곳이 없기 때문이다. 그리고 문을 여는 순간 톰캣 스레드 12개는 이미 떠 있다 — 요청을 받고 나서 만들기 시작하면 그만큼 늦기 때문이다.
어떻게 확인했나
두 로그 줄의 시각(25.247 · 25.755)과 그 차이 508ms는 --debug 를 붙여 한 번 돌린 기동 로그에서 그대로 읽었다.
maxThreads 200 · minSpare 10 · maxConnections 8192 · acceptCount 100 은 기동이 끝난 뒤 도는 러너에서 톰캣 커넥터에 직접 물어본 값이다. 전부 톰캣 기본값이고 application.yaml 에서 바꾸지 않았다.
스레드 12개는 같은 러너가 이름이 http-nio- 로 시작하는 살아 있는 스레드를 센 값이다. 요청을 보내기 전에 쟀다. 그 12개가 각각 무슨 일을 하는 스레드인지(요청을 처리하는 일꾼 몇 개 · 연결을 받는 스레드 몇 개)까지는 가르지 않았다 — minSpare 가 10이라 일꾼이 10개이고 나머지 둘이 다른 역할로 보이지만, 확인하지 않았다.
8 · 9 · 10번 스텝은 실측이 아니다. 요청을 200개 넘게 몰아넣어 본 적이 없고, 위의 네 설정값이 말하는 대로 그린 장면이다. 캡션에도 그렇게 적었다.