Lewis's Tech Keep

[Spring Boot][JDK21] virtual threads 이슈 본문

Java/Spring

[Spring Boot][JDK21] virtual threads 이슈

Lewis Seo 2024. 6. 27. 00:27

java 21 로 버전업하면서 Spring kafka consumer도 virtual threads 로 사용하고 싶었기에 ListenerContainerFactory 빈을 등록할 때 링크 를 참고해서 AsyncTaskExecutor와 virtualThread 옵션을 활성화 시켜봤다.

그러나 운영 배포 후 rebalancing 이 계속 발생하면서 파드가 떨어지기 시작했다.

왜 그런가 했더니 설정 시

  asyncTaskExecutor.setConcurrencyLimit(SimpleAsyncTaskExecutor.UNBOUNDED_CONCURRENCY);

아래와 같이 TaskExecutor ConcurrenyLimit 정책을 UNBOUNDED_CONCURRENCY로 가져갔더니 쓰레드를 무한히 생성하였고 이로 인하여 가용 쓰레드 수가 부족해지게 되었다.

이로 인하여 리밸런싱이 계속 일어나게 되었고 파드가 무한 재시작하게 되었다.

대응

  • 일단 운영에서 바로 이슈가 발생했기에 virtual threads 를 적용한 부분은 빠르게 rollback하여 마무리하였다.
  • 다시 운영에 배포 할 수 있다면 UNBOUNDED_CONCURRENCY가 아닌 특정 값으로 설정되면 좋을 것 같다.
Comments