Skip to content

Undertow

Undertow is a high-performance Java web server and web application framework. It is lightweight, flexible, and highly scalable, capable of efficiently handling high-concurrency requests. It supports multiple protocols (such as HTTP/1.1, HTTP/2, WebSocket, etc.) and is commonly used to build high-performance web applications and services.

Configuration

Enable DataKit Collectors

  • Enable the StatsD Collector

cp /usr/local/datakit/conf.d/samples/statsd.conf.sample /usr/local/datakit/conf.d/statsd/statsd.conf

  • Enable the ddtrace Collector

cp /usr/local/datakit/conf.d/samples/ddtrace.conf.sample /usr/local/datakit/conf.d/ddtrace/ddtrace.conf

  • Restart Datakit

datakit service -R

Application Configuration

  • Download dd-java-agent

SDK

  • Configure undertow.yaml

DDTrace retrieves Undertow metrics from JavaBeans

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
  • Startup Command
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 

Metrics

  • Measurement undertow
Metric Description Use Case
active_count Active Thread Count The number of threads currently executing tasks in the thread pool.
completed_task_count Completed Task Count The total number of tasks completed since the thread pool started.
core_pool_size Core Thread Pool Size The number of threads that remain active in the thread pool, even if they are idle.
io_thread_count I/O Thread Count The number of threads used by the underlying XNIO framework of Undertow to handle network I/O events (e.g., accepting connections, reading/writing data).
keep_alive_time_seconds Thread Keep-Alive Time The time that excess idle threads can wait before being terminated when the number of threads exceeds the core pool size.
largest_pool_size Largest Pool Size The maximum number of threads reached since the thread pool started.
largest_queue_size Largest Queue Size The maximum number of tasks in the task queue since it started.
max_pool_size Maximum Pool Size The maximum number of threads allowed in the thread pool. This is a critical configuration parameter that limits concurrency.
max_queue_size Maximum Queue Size The maximum number of tasks that the task queue can hold.
pool_size Current Pool Size The total number of threads in the thread pool (including active and idle threads).
queue_size Current Queue Size The number of tasks currently waiting in the task queue to be executed. A continuous increase usually indicates insufficient processing capacity.
rejected_task_count Rejected Task Count The number of tasks that were rejected due to the thread pool being full (maximum threads reached and queue full) or rejection policy triggered.

Feedback

Is this page helpful? ×