fix: CancellableQueryManager의 CachedThreadPool을 제한된 ThreadPoolExecutor로 교체
Phase 1.3: 무제한 스레드 생성 방지 - newCachedThreadPool → ThreadPoolExecutor(core:5, max:20, queue:100) - CallerRunsPolicy 적용으로 큐 포화 시 자연 백프레셔 - 부하 시 무제한 스레드 생성으로 인한 OOM/컨텍스트 스위칭 오버헤드 방지 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
부모
78ff307785
커밋
21916716bf
@ -20,13 +20,20 @@ public class CancellableQueryManager {
|
|||||||
// 활성 쿼리 컨텍스트 관리
|
// 활성 쿼리 컨텍스트 관리
|
||||||
private final Map<String, QueryExecutionContext> activeQueries = new ConcurrentHashMap<>();
|
private final Map<String, QueryExecutionContext> activeQueries = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
// 쿼리 실행을 위한 스레드 풀
|
// 쿼리 실행을 위한 스레드 풀 (상한 제한)
|
||||||
private final ExecutorService queryExecutor = Executors.newCachedThreadPool(r -> {
|
private final ExecutorService queryExecutor = new ThreadPoolExecutor(
|
||||||
Thread thread = new Thread(r);
|
5, // corePoolSize
|
||||||
thread.setName("query-executor-" + thread.getId());
|
20, // maximumPoolSize (무제한 방지)
|
||||||
thread.setDaemon(true);
|
60L, TimeUnit.SECONDS, // keepAliveTime
|
||||||
return thread;
|
new LinkedBlockingQueue<>(100), // 대기 큐 크기 제한
|
||||||
});
|
r -> {
|
||||||
|
Thread thread = new Thread(r);
|
||||||
|
thread.setName("query-executor-" + thread.getId());
|
||||||
|
thread.setDaemon(true);
|
||||||
|
return thread;
|
||||||
|
},
|
||||||
|
new ThreadPoolExecutor.CallerRunsPolicy() // 큐 포화 시 호출 스레드에서 실행
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 취소 가능한 쿼리 실행
|
* 취소 가능한 쿼리 실행
|
||||||
|
|||||||
불러오는 중...
Reference in New Issue
Block a user