피드로 돌아가기
Your Virtual Threads Are Leaking: Why ScopedValue is the Only Way Forward
Dev.toDev.to
Backend

ThreadLocal 제거 및 ScopedValue 도입을 통한 Virtual Thread 메모리 누수 해결

Your Virtual Threads Are Leaking: Why ScopedValue is the Only Way Forward

Vishal Aggarwal2026년 4월 23일2advanced

Context

Virtual Thread 도입 후 ThreadLocal 사용 시 발생하는 과도한 Heap 메모리 점유 문제 분석. 수십만 개의 동시 작업 수행 시 ThreadLocalMap의 오버헤드로 인한 메모리 붕괴 위험 존재.

Technical Solution

  • Mutable 상태의 ThreadLocal.set() 방식에서 Immutable ScopedValue 기반의 Context 전파 구조로 전환
  • ScopedValue.where()를 활용한 데이터 바인딩 범위의 엄격한 제한 및 자동 해제 메커니즘 구현
  • StructuredTaskScope 적용을 통한 부모-자식 스레드 간 효율적인 Context 공유 및 전파 체계 구축
  • 데이터 수정 필요 시 기존 값 변이 대신 중첩 Scope 내 재바인딩을 수행하는 불변성 유지 전략 채택
  • 복잡한 Hash Map 구조 대신 단일 내부 배열 기반의 경량 저장 방식을 통한 메모리 접근 최적화

1. 100k 이상의 Virtual Thread 환경에서 ThreadLocal 사용 여부 전수 조사

2. Tenant ID, User Principal 등 전역 Context 전달 시 ScopedValue 도입 검토

3. try-finally 기반의 수동 remove() 로직을 ScopedValue의 자동 범위 해제 구조로 대체

4. StructuredTaskScope를 통한 자식 스레드 데이터 상속 구조 설계 적용

원문 읽기