스레드풀의 상태를 모니터링하는 방법은 무엇인가요?
_____1. Q: 스레드풀 상태를 기본 API로 어떻게 확인하나요?
A: Java의 ThreadPoolExecutor가 제공하는 주요 메소드로 확인할 수 있습니다.
- getPoolSize(): 전체 스레드 풀 크기
- getCorePoolSize(), getMaximumPoolSize(): 코어·최대 스레드 수
- getActiveCount(): 현재 실행 중인 스레드 수
- getTaskCount(): 총 제출된 작업 수
- getCompletedTaskCount(): 완료된 작업 수
- getQueue().size(): 대기 큐에 쌓인 작업 수
2. Q: JMX를 이용해 모니터링하려면?
A: ThreadPoolExecutor를 MBean으로 등록한 뒤 JConsole·VisualVM 등으로 조회합니다.
1) ThreadPoolExecutor를 ThreadPoolExecutorMXBean으로 래핑
2) MBeanServer에 ObjectName으로 등록
3) JConsole/VisualVM에서 해당 MBean의 속성(poolSize, activeCount 등) 확인
3. Q: Spring Boot Actuator로 모니터링하는 방법은?
A: spring-boot-starter-actuator와 Micrometer가 제공하는 메트릭을 활용합니다.
- application.yml 설정: management.endpoints.web.exposure.include=health,metrics,prometheus
- `/actuator/metrics/jvm.thread.count`,
`/actuator/metrics/spring.executor.active.count` 등 엔드포인트 조회
- 원하는 Executor를 @Bean으로 등록할 때 MetricsCustomizer를 통해 태그나 이름을 지정
4. Q: Micrometer로 커스텀 메트릭을 수집하려면?
A: MeterRegistry에 ThreadPoolExecutor 메소드를 게이지로 등록합니다.
```java
meterRegistry.gauge("thread.pool.active", Tags.of("pool", "myPool"),
threadPoolExecutor, ThreadPoolExecutor::getActiveCount);
meterRegistry.gauge("thread.pool.queue.size", Tags.of("pool", "myPool"),
threadPoolExecutor, e -> e.getQueue().size());
```
Grafana·Prometheus와 연동해 시계열 대시보드 구축 가능.
5. Q: VisualVM·Java Mission Control로 무엇을 볼 수 있나요?
A:
- Thread Dump: 스레드 상태(실행, 대기, BLOCKED)
- CPU·메모리 프로파일링: 스레드별 CPU 사용량
6. Q: 커스텀 로그를 활용한 모니터링은?
A: 스케줄러나 별도 모니터 스레드에서 일정 주기로 로그 출력.
```java
ScheduledExecutorService monitor = Executors.newSingleThreadScheduledExecutor();
monitor.scheduleAtFixedRate(() -> {
log.info("Pool size: {}, Active: {}, Queue: {}, Completed: {}",
executor.getPoolSize(), executor.getActiveCount(),
executor.getQueue().size(), executor.getCompletedTaskCount());
}, 0, 10, TimeUnit.SECONDS);
```
7. Q: Prometheus·Grafana 연동 시 주의사항은?
A:
- 메트릭 네이밍 컨벤션 준수 (단위, 태그 포함)
- 스크랩 주기 설정 (10~30초 권장)
- Cardinality 폭증 방지: 태그 수 최소화
8. Q: 과부하 여부 판단 기준은?
A:
- activeCount ≒ maximumPoolSize
- queue.size() → queue capacity에 근접
- RejectedExecutionHandler가 호출되거나 타임아웃 증가
- 평균 대기 시간(latency) 급증
9. Q: 모니터링 시 유의해야 할 점은?
A:
- 과도한 모니터링은 오버헤드 발생
- 게이지·타이머 등록은 ThreadPoolExecutor 레퍼런스를 안전하게 관리
- 지표 수집 주기와 Retention 정책 조절로 시스템 안정성 확보
10. Q: 클라우드 환경·AIOps 연동 방법은?
A:
- AWS CloudWatch, Azure Monitor, GCP Stackdriver 등 에이전트 활용
- Datadog, New Relic APM 에이전트로 JVM 메트릭 자동 수집
- 스레드풀 태그를 커스텀 애트리뷰트로 설정해 서비스 식별
—끝—
작성자:
김시현 [비회원]
| 작성일자: 1년 전
2024-11-21 22:51:35
조회수: 216 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 216 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.