콘텐츠로 이동

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 다운로드

SDK

  • 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 거부된 작업 수 스레드 풀이 가득 찼거나(스레드 수가 최대치에 도달하고 큐도 가득 참) 거부 정책이 발동되어 실행이 거부된 작업 수입니다.

문서 평가

이 페이지가 도움이 되었나요?