Releases: rlaope/Argus
Argus 1.0.0
Argus v1.0.0
50 CLI commands. Production-ready JVM diagnostics.
Killer Features
| Command | Description |
|---|---|
argus doctor <pid> |
One-click JVM health diagnosis with 8-rule engine + tuning recommendations |
argus gclog <file> |
GC log analysis with pause distribution + tuning (GCEasy alternative) |
argus flame <pid> |
One-shot flame graph β HTML β browser open |
argus watch <pid> |
Real-time terminal dashboard (htop for JVM) |
argus tui [pid] |
k9s-style interactive terminal UI β browse all 50 commands |
argus ci <pid> |
CI/CD health gate with GitHub annotations + exit codes |
argus suggest <pid> |
JVM flag optimization by workload (web/batch/streaming) |
argus compare <pid1> <pid2> |
Side-by-side JVM comparison with delta % |
argus slowlog <pid> |
Real-time slow method detection via JFR streaming |
Architecture
- DiagnosticCommand SPI β ServiceLoader-based pluggable command system
- CommandRegistry β auto-discovery, zero registration code
- RouteTable β declarative HTTP routing for dashboard
- JLine3 β proper terminal handling for TUI
Critical Fixes (since v0.9.0)
doctor/suggest/watchnow properly diagnose target PID via jcmd (was diagnosing self)- jcmd errors propagated to user with helpful messages (was silently swallowed)
- GC log parser: streaming (handles multi-GB), ZGC + Shenandoah support
suggest: classpath-based framework detection (was 3 if-statements)watch: shutdown hook for terminal restore, Windows safety- TUI: arrow key handling fixed
- VERSION read from JAR manifest (never drifts)
Infrastructure
- Docker:
docker run --pid=host ghcr.io/rlaope/argus doctor - GitHub Action: CI/CD JVM health checks with
--format=github-annotations - 125 unit tests passing
Breaking Changes
- CLI requires Java 21+ to run (diagnoses any JVM 11+)
- Version numbering: 0.8.0 β 1.0.0 (no intermediate releases)
What's Changed
- refactor: introduce DiagnosticCommand SPI for pluggable command architecture by @rlaope in #55
- refactor: migrate legacy commands to SPI + RouteTable by @rlaope in #56
- refactor: bridge CLI commands with core CommandGroup SPI by @rlaope in #57
- feat: argus doctor β one-click JVM health diagnosis with recommendations by @rlaope in #65
- feat: argus gclog β GC log analysis with tuning recommendations by @rlaope in #66
- feat: argus flame β one-shot flame graph with browser open by @rlaope in #67
- feat: argus watch β real-time terminal dashboard (htop for JVM) by @rlaope in #68
- feat: argus suggest β JVM flag optimization by @rlaope in #69
- fix: code review fixes (deprecated API, resource leak) by @rlaope in #70
- fix: code review round 2 (CRITICAL sparkline bug, HIGH injection fix) by @rlaope in #71
- docs: sync to 47 commands + killer features in README by @rlaope in #72
- docs: detailed documentation for doctor, gclog, flame, watch, suggest by @rlaope in #73
- feat: HTML export + on-demand profiling API by @rlaope in #74
- fix(critical): doctor/suggest/watch now diagnose target PID by @rlaope in #89
- fix(high): GcLogParser streaming + ZGC/Shenandoah support by @rlaope in #90
- fix(high): suggest workload detection β classpath-based framework detection by @rlaope in #91
- fix(high): watch terminal β shutdown hook + Windows safety by @rlaope in #93
- feat: argus tui β k9s-style interactive terminal UI by @rlaope in #94
- feat: argus ci β CI/CD health gate with exit codes by @rlaope in #95
- feat: argus compare β side-by-side JVM comparison by @rlaope in #96
- feat: argus slowlog β real-time slow method detection by @rlaope in #97
- feat: Dockerfile + GitHub Actions for Docker image by @rlaope in #98
- feat: GitHub Action for CI/CD JVM health checks by @rlaope in #99
- docs: final overhaul β 50 commands, Docker, CI/CD by @rlaope in #100
- test+fix: 30+ tests for core features + hardened doctor rules by @rlaope in #101
- fix: critical UX fixes for v1.0.0 by @rlaope in #102
Full Changelog: v0.9.0...v1.0.0
Argus 0.9.0
Argus v0.9.0
42 CLI commands β up from 33 in v0.8.0. Major expansion of diagnostic capabilities.
New Commands
| Command | Description |
|---|---|
argus threaddump <pid> |
Full thread dump with stack traces (jstack replacement) |
argus buffers <pid> |
NIO direct/mapped buffer pool statistics |
argus gcrun <pid> |
Trigger System.gc() remotely via jcmd |
argus logger <pid> |
View and change log levels at runtime |
argus events <pid> |
VM internal event log (safepoints, deopt, GC phases) |
argus compilerqueue <pid> |
JIT compilation queue inspection |
argus sc <pid> <pattern> |
Search loaded classes by glob pattern |
argus jfranalyze <file.jfr> |
Comprehensive JFR recording analysis |
Enhanced Commands
| Command | Enhancement |
|---|---|
argus info |
CPU section: JVM/System CPU%, processors, load average |
argus ps |
Java version and uptime per process |
argus threads |
Daemon thread count, peak thread count |
Documentation
- Categorized command table in README (Process, Memory, Threads, Runtime, Profiling, Monitoring)
- Removed all
--enable-previewreferences (no longer needed since v0.8.0) - Updated all docs, site, and completions for 42 commands
- Version references synced to 0.8.0+ across all .md files
Technical Details
jfranalyzeuses JFR Consumer API (RecordingFile) to parse GC, CPU, hot methods, allocations, lock contention, exceptions, and I/O eventsbuffersusesBufferPoolMXBeanfor local,VM.infoparsing for remote processesloggersupports JVM unified logging (VM.log) andjava.util.logging(LoggingMXBean)scconverts glob patterns to regex for class histogram filtering- All new commands support
--format=jsonand i18n (EN/KO/JA/ZH) - Shell completions updated for bash, zsh, fish, PowerShell
What's Changed
- feat: add argus threaddump command by @rlaope in #45
- enhance: enrich ps and threads commands with additional metrics by @rlaope in #52
- feat: add 8 new CLI commands (buffers, gcrun, logger, events, compilerqueue, sc, jfranalyze, CPU%) by @rlaope in #53
- docs: comprehensive documentation overhaul for v0.9.0 by @rlaope in #54
Full Changelog: v0.8.0...v0.9.0
Argus 0.8.0
What's New
Spring Boot & Micrometer Integration
argus-spring-boot-starterβ Add one dependency, get auto-configured JFR streaming + dashboard + health indicator. Supportsapplication.ymlwith IDE autocomplete.argus-micrometerβ ~25 JVM diagnostic metrics exposed to any Micrometer-compatible backend (Prometheus, Datadog, Grafana). Works with Quarkus/Micronaut too.
Interactive Console
- New
/console.htmlpage with a terminal UI for running 24 JVM diagnostic commands directly from the browser. - Commands grouped by category (System, Memory & GC, Threads, Runtime, Diagnostics) with hover descriptions.
- Typing animation and real-time output display.
Dashboard Overhaul
- JVM Health (GC, CPU, Memory) shown first β incident-response layout.
- New metrics: GC cause distribution, GC collector type, top allocating classes, carrier thread distribution, metaspace growth rate, peak allocation rate.
- Light editorial design, smoother charts, section descriptions, long-scroll single page.
Java 17+ Dashboard Support
MxBeanPollingEngineprovides GC/CPU/Memory monitoring on Java 17-20 without JFR.- 32 Java records converted to compatible classes;
--enable-previewremoved. - Dashboard auto-adapts: shows VT notice on < 21, JVM Health works everywhere.
Java Version Compatibility
| Feature | Java 11+ | Java 17+ | Java 21+ |
|---|---|---|---|
| CLI (33 commands) | β | β | β |
| Dashboard | β | β MXBean | β JFR |
| Virtual Threads | β | β | β |
| Flame Graph | β | β | β |
| Spring Boot Starter | β | β | β |
Security
- Secret masking for
env/syspropscommands (PASSWORD, KEY, TOKEN, etc.) - jcmd execution timeout (10s), rate limiting (Semaphore), HTTP method validation
- Path traversal fix in static file handler, JSON control char escaping
Tests
- ArgusMeterBinderTest (7 tests), ArgusPropertiesTest (3), ArgusAutoConfigurationTest (2)
Full Changelog: v0.7.0...v0.8.0
What's Changed
- feat: add Micrometer integration and Spring Boot Starter by @rlaope in #28
- feat: redesign dashboard to light theme by @rlaope in #29
- test: add unit tests for micrometer and spring-boot-starter by @rlaope in #31
- feat: add interactive console for JVM diagnostics by @rlaope in #30
- feat: Java 17+ dashboard support with MXBean polling by @rlaope in #32
Full Changelog: v0.7.0...v0.8.0
Argus 0.7.0
What's New
9 New Diagnostic Commands
gccauseβ GC cause analysis with utilization statsmetaspaceβ Detailed metaspace breakdown (Class/Non-Class)dynlibsβ Native library listing by categoryvmsetβ Live VM flag modification without restartvmlogβ JVM unified logging controljmxβ JMX Management Agent controlclassstatβ Class loading statisticsgcnewβ Young generation GC detailsymboltableβ Symbol table statistics
Multi-OS Support
install.ps1β Windows PowerShell installer- fish + PowerShell shell completions
- Improved Java version detection (prefers highest available)
- Auto
--enable-previewfor Java 21+
Total: 32 CLI Commands
All support --format=json, --source=auto|agent|jdk, i18n (en/ko/ja/zh).
What's Changed
- feat: add deadlock detection command and JVM System Observability Command. by @rlaope in #24
- feat: add 9 diagnostic commands (Tier 1 + Tier 2) by @rlaope in #27
Full Changelog: v0.6.0...v0.7.0
Argus 0.6.0
Argus 0.6.0
async-profiler Integration
argus profile <pid> wraps async-profiler for one-command CPU/allocation/lock/wall profiling. Native binary auto-downloads on first use with SHA-256 verification and platform detection (macOS, Linux glibc/musl). Supports --flame for HTML flame graph generation with browser auto-open.
Heap Dump with STW Warning
argus heapdump <pid> generates .hprof heap dumps via jcmd GC.heap_dump. Shows a mandatory Stop-The-World warning with [y/N] confirmation before proceeding. Skip with --yes for scripts.
Shell Completions
Tab completion for bash and zsh β all 19 commands with per-command option completion. Installed automatically via install.sh.
New Commands (since v0.5.1)
| Command | Description |
|---|---|
argus profile <pid> |
async-profiler CPU/alloc/lock/wall profiling |
argus heapdump <pid> |
Heap dump with STW warning |
argus diff <pid> |
Heap snapshot comparison (leak detection) |
argus report <pid> |
Comprehensive diagnostic report |
JDK 11+ CLI Support
CLI runs on Java 11+ (agent still requires Java 21+). All Java 16+ syntax (records, switch expressions) removed.
Quality
- 64 unit tests
/simplifycode review (shared JdkParseUtils, i18n fixes, ANSI-aware rendering)- 19 commands, 4 languages (en/ko/ja/zh), JSON output
Install
curl -fsSL https://raw.githubusercontent.com/rlaope/argus/master/install.sh | bashFull Changelog: v0.5.1...v0.6.0
Argus 0.5.1
Argus 0.5.1
JDK 11+ CLI Support
The Argus CLI now runs on Java 11+. The Agent still requires Java 21+.
New Commands (+7, total 17)
| Command | Description |
|---|---|
argus sysprops <pid> |
System properties with --filter |
argus vmflag <pid> |
VM flags viewer/setter (--filter, --set) |
argus nmt <pid> |
Native memory tracking by category |
argus classloader <pid> |
Class loader hierarchy |
argus jfr <pid> start|stop|check|dump |
Flight Recorder control |
argus diff <pid> [interval] |
Heap snapshot diff (leak detection) |
argus report <pid> |
Comprehensive diagnostic with auto-warnings |
Quality
- 64 unit tests
- JDK 11 compatible syntax (no records, no switch expressions)
- Shared JdkParseUtils, i18n error messages (en/ko/ja/zh)
Install
curl -fsSL https://raw.githubusercontent.com/rlaope/argus/master/install.sh | bashargus ps
argus report <pid>
argus histo <pid> --top 10
argus --lang=ko gc <pid>Argus 0.5.0
Argus 0.5.0 β Unified CLI Diagnostic Tool
New: argus CLI with JVM diagnostics (no agent required)
Argus CLI is now a full-featured JVM diagnostic tool. Diagnose any running JVM process directly via jcmd/jstat β no Argus agent needed.
Commands
| Command | Description |
|---|---|
argus init |
First-time setup (language selection) |
argus ps |
List running JVM processes |
argus histo <pid> |
Heap object histogram |
argus threads <pid> |
Thread dump summary |
argus gc <pid> |
GC statistics |
argus gcutil <pid> |
GC generation utilization (jstat-style) |
argus heap <pid> |
Heap memory with detailed metrics |
argus info <pid> |
JVM information and flags |
argus top |
Real-time monitoring (agent required) |
Key Features
- Auto source detection: Uses Argus agent (HTTP) when available, JDK tools (
jcmd) as fallback. Override with--source=agent|jdk - Multi-language: English, Korean, Japanese, Chinese (
--lang=en|ko|ja|zh) - Rich terminal output: Box-drawing, color-coded progress bars, dynamic terminal width
- Human-readable class names:
[Bβbyte[],HashMap$NodeβHashMap.Node - JSON export:
--format=jsonfor scripting and pipelines - Argus branded headers: Each command shows a description explaining what the metrics mean
- Watch mode:
argus gcutil <pid> --watch 2for continuous monitoring --help/--version: Standard CLI flags
Improvements
- Smart Java 21 auto-detection in install script (jenv, JAVA_HOME, java_home, PATH scan)
- Shared rendering utilities (escapeJson, truncate, ANSI-aware box alignment)
- Cached provider availability checks for faster startup
- Fixed JcmdExecutor potential deadlock (redirectErrorStream)
Install
curl -fsSL https://raw.githubusercontent.com/rlaope/argus/master/install.sh | bashQuick Start
argus ps # List JVM processes
argus histo 12345 --top 20 # Heap histogram
argus gcutil 12345 # GC utilization
argus --lang=ko heap 12345 # Korean output
argus gc 12345 --format=json # JSON for scriptsFull Changelog: v0.4.0...v0.5.0
Argus 0.4.0
What's New
Argus v0.4 pivots to a lightweight, zero-dependency JVM monitoring tool β JDK 24+ eliminates virtual thread pinning (JEP 491), so Argus now focuses on general JVM observability.
Flame Graph
- Interactive d3-flamegraph visualization from JFR
ExecutionSampledata - 60-second auto-reset window for fresh data
- Pause/Resume to freeze snapshots with timestamp
- Export in collapsed stack format
- Embedded in dashboard JVM Overview tab
CLI Monitor (argus top)
- htop-style terminal UI: CPU, heap, GC, virtual threads, hot methods, contention
- Zero external dependencies β standalone fat JAR (35KB)
- ANSI color coding with green/yellow/red thresholds
--host,--port,--interval,--no-coloroptions
OTLP Export
- Push-based metrics to OpenTelemetry collectors
- Hand-coded OTLP JSON (no OpenTelemetry SDK dependency)
- 30+ metrics mapped: counters β Sum, gauges β Gauge
- Configure via
-Dargus.otlp.*system properties
One-Line Install
curl -fsSL https://raw.githubusercontent.com/rlaope/argus/master/install.sh | bashBug Fixes
- Fix d3-flamegraph CDN URL (package:
d3-flame-graph) - Fix demo duration passthrough in Gradle tasks
Downloads
| File | Description |
|---|---|
argus-agent-0.4.0.jar |
Java agent (attach to your app with -javaagent:) |
argus-cli-0.4.0-all.jar |
Standalone CLI monitor (java -jar argus-cli-0.4.0-all.jar) |
Quick Start
# Attach agent
java -javaagent:argus-agent-0.4.0.jar -Dargus.profiling.enabled=true -jar your-app.jar
# Open dashboard
open http://localhost:9202/
# Or use CLI
java -jar argus-cli-0.4.0-all.jarFull Changelog: v0.3.0...v0.4.0
What's Changed
- feat: separate dashboard into Virtual Threads and JVM Overview tabs by @rlaope in #22
- feat: Argus v0.4 - Flame Graph, CLI Monitor, OTLP Export by @rlaope in #23
Full Changelog: v0.3.1...v0.4.0
Argus 0.3.1
Changes
- feat: add Argus logo to README and dashboard
- fix: add image file support to static file handler
- docs: README argus log resizing
Full Changelog: v0.3.0...v0.3.1
Full Changelog: v0.3.0...v0.3.1
Argus 0.3.0
New Features
Phase 3: GC Deep Dive
- Allocation Rate Tracking - Track object allocations with configurable threshold
- Metaspace Monitoring - Monitor class metadata memory usage
- GC Overhead Calculation - Calculate GC time as percentage of total time
Phase 4: CPU/Thread Deep Dive
- Method Profiling - Identify hot methods with execution sampling (Top 20)
- Lock Contention Tracking - Detect synchronization bottlenecks
Phase 5: Correlation Analysis
- GC β CPU Correlation - Detect CPU spikes around GC events
- GC β Pinning Correlation - Identify pinning increases during GC
- Automatic Recommendations - Actionable insights for:
- GC overhead warnings (>10%)
- Memory leak detection
- Lock contention hotspots
- High allocation rate warnings
- Metaspace growth warnings
New Configuration Options
| Property | Default | Description |
|---|---|---|
argus.allocation.enabled |
false |
Enable allocation tracking (high overhead) |
argus.allocation.threshold |
1048576 |
Minimum allocation size to track (1MB) |
argus.metaspace.enabled |
true |
Enable metaspace monitoring |
argus.profiling.enabled |
false |
Enable method profiling (high overhead) |
argus.profiling.interval |
20 |
Profiling sampling interval (ms) |
argus.contention.enabled |
false |
Enable lock contention tracking |
argus.contention.threshold |
50 |
Minimum contention duration to track (ms) |
argus.correlation.enabled |
true |
Enable correlation analysis |
New API Endpoints
/allocation-analysis- Allocation rate and top allocating classes/metaspace-metrics- Metaspace usage statistics/method-profiling- Hot methods analysis/contention-analysis- Lock contention hotspots/correlation- Correlation analysis and recommendations
Usage
Production (Safe Defaults)
java -javaagent:argus-agent-0.3.0.jar \
-Dargus.server.enabled=true \
--enable-preview \
-jar your-app.jarFull Profiling (Development/Testing)
java -javaagent:argus-agent-0.3.0.jar \
-Dargus.server.enabled=true \
-Dargus.allocation.enabled=true \
-Dargus.profiling.enabled=true \
-Dargus.contention.enabled=true \
--enable-preview \
-jar your-app.jarBreaking Changes
None
Full Changelog: v0.2.0...v0.3.0
What's Changed
- feat: Enhanced Pinning Analysis with Stack Trace Grouping by @rlaope in #18
- feat: add event export functionality by @rlaope in #19
- feat: add Memory/GC and CPU monitoring by @rlaope in #20
- feat: add advanced profiling and correlation analysis (Phase 3-5) by @rlaope in #21
Full Changelog: v0.2.0...v0.3.0