Skip to content

Releases: rlaope/Argus

Argus 1.0.0

08 Apr 05:37
9fd3f4d

Choose a tag to compare

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/watch now 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

06 Apr 03:31
527755e

Choose a tag to compare

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-preview references (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

  • jfranalyze uses JFR Consumer API (RecordingFile) to parse GC, CPU, hot methods, allocations, lock contention, exceptions, and I/O events
  • buffers uses BufferPoolMXBean for local, VM.info parsing for remote processes
  • logger supports JVM unified logging (VM.log) and java.util.logging (LoggingMXBean)
  • sc converts glob patterns to regex for class histogram filtering
  • All new commands support --format=json and 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

05 Apr 06:20

Choose a tag to compare

What's New

Spring Boot & Micrometer Integration

  • argus-spring-boot-starter β€” Add one dependency, get auto-configured JFR streaming + dashboard + health indicator. Supports application.yml with 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.html page 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

  • MxBeanPollingEngine provides GC/CPU/Memory monitoring on Java 17-20 without JFR.
  • 32 Java records converted to compatible classes; --enable-preview removed.
  • 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/sysprops commands (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

01 Apr 13:05

Choose a tag to compare

What's New

9 New Diagnostic Commands

  • gccause β€” GC cause analysis with utilization stats
  • metaspace β€” Detailed metaspace breakdown (Class/Non-Class)
  • dynlibs β€” Native library listing by category
  • vmset β€” Live VM flag modification without restart
  • vmlog β€” JVM unified logging control
  • jmx β€” JMX Management Agent control
  • classstat β€” Class loading statistics
  • gcnew β€” Young generation GC detail
  • symboltable β€” Symbol table statistics

Multi-OS Support

  • install.ps1 β€” Windows PowerShell installer
  • fish + PowerShell shell completions
  • Improved Java version detection (prefers highest available)
  • Auto --enable-preview for 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

25 Mar 05:29

Choose a tag to compare

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
  • /simplify code 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 | bash

Full Changelog: v0.5.1...v0.6.0

Argus 0.5.1

24 Mar 09:04

Choose a tag to compare

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 | bash
argus ps
argus report <pid>
argus histo <pid> --top 10
argus --lang=ko gc <pid>

Argus 0.5.0

21 Mar 08:43

Choose a tag to compare

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=json for scripting and pipelines
  • Argus branded headers: Each command shows a description explaining what the metrics mean
  • Watch mode: argus gcutil <pid> --watch 2 for 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 | bash

Quick 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 scripts

Full Changelog: v0.4.0...v0.5.0

Argus 0.4.0

10 Feb 09:16

Choose a tag to compare

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 ExecutionSample data
  • 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-color options

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 | bash

Bug 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.jar

Full 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

30 Jan 01:50

Choose a tag to compare

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

27 Jan 02:25

Choose a tag to compare

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.jar

Full 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.jar

Breaking 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