JVM Observability Platform GitHub

Java Version Compatibility

Argus adapts its capabilities based on the Java version at runtime. You don't need to configure anything — it detects the version automatically and enables what's available.

FeatureJava 11+Java 17+Java 21+
CLI (67 commands)YesYesYes
Dashboard & Web UIYes (MXBean)Yes (JFR)
GC / CPU / MemoryCLI onlyYesYes
Allocation TrackingYes
Virtual ThreadsYes
Flame GraphYes
Lock ContentionYes
Spring Boot StarterYesYes
Micrometer MetricsYesYes

How it works: On Java 17–20, the agent uses an MXBean polling engine that queries ManagementFactory MXBeans for GC, CPU, and memory data at regular intervals. On Java 21+, it uses JFR streaming for lower overhead and richer event data. The dashboard automatically hides features that aren't available on your Java version.

Architecture

Argus is organized into seven modules, each with a clear responsibility:

ModulePurpose
argus-coreShared event types, configuration, ring buffer transport
argus-agentJava agent entry point, JFR streaming engine, MXBean polling engine
argus-serverNetty HTTP/WebSocket server, 10 analyzers, metrics export
argus-frontendDashboard web UI (vanilla JS, Chart.js, D3 flame graph)
argus-cli67 diagnostic commands using jcmd/jstat
argus-micrometerFramework-agnostic Micrometer MeterBinder
argus-spring-boot-starterSpring Boot auto-configuration

The agent and server communicate through lock-free ring buffers in shared memory — there is no network protocol between them. This means zero serialization overhead and minimal latency from event capture to dashboard display.

Configuration Reference

All Argus properties can be set as JVM system properties (-Dargus.xxx=value) when using the agent, or in application.yml / application.properties when using the Spring Boot starter.

Agent Properties

PropertyDefaultDescription
argus.server.port9202Dashboard HTTP port
argus.gc.enabledtrueGC event collection via JFR
argus.cpu.enabledtrueCPU load sampling
argus.cpu.interval-ms500CPU sampling interval in milliseconds
argus.allocation.enabledfalseObject allocation tracking (higher overhead)
argus.allocation.threshold524288Minimum allocation size to track (bytes)
argus.profiling.enabledfalseCPU method profiling via JFR
argus.contention.enabledfalseLock contention monitoring
argus.metaspace.enabledtrueMetaspace usage tracking
argus.buffer-size131072Ring buffer size in bytes
argus.metrics.prometheus.enabledtrueExpose Prometheus endpoint at /prometheus

CLI Flags

FlagValuesDescription
--formattext, jsonOutput format (default: text)
--sourceauto, agent, jdkData source selection (default: auto)