Undertow
Undertow는 고성능 Java Web 서버이자 Web 애플리케이션 프레임워크로, 가볍고 유연하며 확장성이 뛰어나고, 높은 동시성 요청을 효율적으로 처리할 수 있습니다. HTTP/1.1, HTTP/2, WebSocket 등 여러 프로토콜을 지원하며, 고성능 Web 애플리케이션과 서비스를 구축할 때 자주 사용됩니다.
구성¶
DataKit 수집기 활성화¶
- StatsD 수집기 활성화
cp /usr/local/datakit/conf.d/samples/statsd.conf.sample /usr/local/datakit/conf.d/samples/statsd.conf
- ddtrace 수집기 활성화
cp /usr/local/datakit/conf.d/samples/ddtrace.conf.sample /usr/local/datakit/conf.d/samples/ddtrace.conf
- Datakit 재시작
datakit service -R
애플리케이션 설정¶
dd-java-agent다운로드
undertow.yaml설정
DDTrace는 JavaBean에서 Undertow의 메트릭 데이터를 가져옵니다
init_config:
instances:
- jvm_direct: true
name: undertow-monitoring
collect_default_jvm_metrics: false
collect_default_metrics: false
refresh_beans: 60
conf:
- include:
bean_regex: "org.xnio:type=Xnio,provider=\"nio\",worker=\"XNIO-.*\""
attribute:
IoThreadCount:
metric_type: gauge
alias: undertow.io.thread.count
- include:
bean_regex: "jboss.threads:name=\"XNIO-.*\",type=thread-pool"
attribute:
CorePoolSize:
metric_type: gauge
alias: undertow.core.pool.size
MaximumPoolSize:
metric_type: gauge
alias: undertow.max.pool.size
ActiveCount:
metric_type: gauge
alias: undertow.active.count
LargestPoolSize:
metric_type: gauge
alias: undertow.largest.pool.size
CompletedTaskCount:
metric_type: gauge
alias: undertow.completed.task.count
PoolSize:
metric_type: gauge
alias: undertow.pool.size
GrowthResistance:
metric_type: gauge
alias: undertow.growth.resistance
MaximumQueueSize:
metric_type: gauge
alias: undertow.max.queue.size
LargestQueueSize:
metric_type: gauge
alias: undertow.largest.queue.size
SubmittedTaskCount:
metric_type: gauge
alias: undertow.submitted.task.count
RejectedTaskCount:
metric_type: gauge
alias: undertow.rejected.task.count
SpinMissCount:
metric_type: gauge
alias: undertow.spin.miss.count
QueueSize:
metric_type: gauge
alias: undertow.queue.size
KeepAliveTimeSeconds:
metric_type: gauge
alias: undertow.keep.alive.time.seconds
- 시작 명령
java \
-javaagent:/xxx/dd-java-agent.jar \
-Ddd.agent.port=9529 \
-Ddd.service=demo \
-Ddd.jmxfetch.check-period=1000 \
-Ddd.jmxfetch.enabled=true \
-Ddd.jmxfetch.config.dir=/xxx/ \
-Ddd.jmxfetch.con]fig=undertow.yaml \
-jar xxxx.jar
메트릭¶
- 메트릭 세트
undertow
| 메트릭 | 설명 | 용도 |
|---|---|---|
| active_count | 활성 스레드 수 | 현재 스레드 풀에서 작업을 실행 중인 스레드 수입니다. |
| completed_task_count | 완료된 작업 수 | 스레드 풀이 시작된 이후 완료된 작업의 총 수입니다. |
| core_pool_size | 코어 스레드 풀 크기 | 유휴 상태여도 항상 활성 상태를 유지하는 스레드 수입니다. |
| io_thread_count | I/O 스레드 수 | Undertow 하위의 XNIO 프레임워크가 네트워크 I/O 이벤트(예: 연결 수락, 데이터 읽기/쓰기)를 처리하는 데 사용하는 스레드 수입니다. |
| keep_alive_time_seconds | 스레드 유지 활성 시간 | 스레드 수가 코어 스레드 수를 초과할 때, 초과한 유휴 스레드가 종료되기 전에 대기할 수 있는 시간입니다. |
| largest_pool_size | 과거 최대 스레드 풀 크기 | 스레드 풀이 시작된 이후 도달한 최대 스레드 수입니다. |
| largest_queue_size | 과거 최대 큐 크기 | 작업 큐가 시작된 이후 도달한 최대 작업 수입니다. |
| max_pool_size | 최대 스레드 풀 크기 | 스레드 풀이 생성할 수 있는 최대 스레드 수입니다. 동시 처리 능력을 제한하는 핵심 설정 값입니다. |
| max_queue_size | 최대 큐 크기 | 작업 큐가 수용할 수 있는 최대 작업 수입니다. |
| pool_size | 현재 스레드 풀 크기 | 현재 스레드 풀의 총 스레드 수입니다(활성 및 유휴 스레드 포함). |
| queue_size | 현재 큐 크기 | 현재 작업 큐에서 실행을 기다리는 작업 수입니다. 지속적으로 증가하면 처리 능력이 부족하다는 의미일 수 있습니다. |
| rejected_task_count | 거부된 작업 수 | 스레드 풀이 가득 찼거나(스레드 수가 최대치에 도달하고 큐도 가득 참) 거부 정책이 발동되어 실행이 거부된 작업 수입니다. |