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.
| Feature | Java 11+ | Java 17+ | Java 21+ |
|---|---|---|---|
| CLI (67 commands) | Yes | Yes | Yes |
| Dashboard & Web UI | — | Yes (MXBean) | Yes (JFR) |
| GC / CPU / Memory | CLI only | Yes | Yes |
| Allocation Tracking | — | — | Yes |
| Virtual Threads | — | — | Yes |
| Flame Graph | — | — | Yes |
| Lock Contention | — | — | Yes |
| Spring Boot Starter | — | Yes | Yes |
| Micrometer Metrics | — | Yes | Yes |
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:
| Module | Purpose |
|---|---|
argus-core | Shared event types, configuration, ring buffer transport |
argus-agent | Java agent entry point, JFR streaming engine, MXBean polling engine |
argus-server | Netty HTTP/WebSocket server, 10 analyzers, metrics export |
argus-frontend | Dashboard web UI (vanilla JS, Chart.js, D3 flame graph) |
argus-cli | 67 diagnostic commands using jcmd/jstat |
argus-micrometer | Framework-agnostic Micrometer MeterBinder |
argus-spring-boot-starter | Spring 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
| Property | Default | Description |
|---|---|---|
argus.server.port | 9202 | Dashboard HTTP port |
argus.gc.enabled | true | GC event collection via JFR |
argus.cpu.enabled | true | CPU load sampling |
argus.cpu.interval-ms | 500 | CPU sampling interval in milliseconds |
argus.allocation.enabled | false | Object allocation tracking (higher overhead) |
argus.allocation.threshold | 524288 | Minimum allocation size to track (bytes) |
argus.profiling.enabled | false | CPU method profiling via JFR |
argus.contention.enabled | false | Lock contention monitoring |
argus.metaspace.enabled | true | Metaspace usage tracking |
argus.buffer-size | 131072 | Ring buffer size in bytes |
argus.metrics.prometheus.enabled | true | Expose Prometheus endpoint at /prometheus |
CLI Flags
| Flag | Values | Description |
|---|---|---|
--format | text, json | Output format (default: text) |
--source | auto, agent, jdk | Data source selection (default: auto) |