Skip to content
/ Argus Public

A high-performance JFR-streaming profiler for modern JVMs to monitor virtual threads, memory, and CPU at scale

License

Notifications You must be signed in to change notification settings

rlaope/Argus

Argus Logo

Argus

"Argus Panoptes, the all-seeing giant with a hundred eyes, never slept - for when some of his eyes closed, others remained open, watching everything."

Inspired by Argus Panoptes from Greek mythology - the giant with a hundred eyes who never slept and watched over everything - this project observes and analyzes all Virtual Threads in the JVM in real-time.

A next-generation real-time visualization profiler for JVM 21+ environments, focusing on Virtual Threads (Project Loom) monitoring and memory analysis.

Features

Virtual Thread Monitoring

  • Thread Lifecycle: Track creation, termination, and pinning of virtual threads
  • Pinning Detection: Identify pinned threads with detailed stack traces
  • Real-time State Tracking: Monitor running, pinned, and ended thread states

Memory & GC Monitoring

  • GC Events: Real-time garbage collection tracking with pause time analysis
  • Heap Usage: Before/after heap visualization with trend analysis
  • Allocation Rate: Track object allocation rate and top allocating classes
  • Metaspace Monitoring: Monitor metaspace usage and growth rate
  • GC Overhead: Calculate GC overhead percentage with warnings

CPU & Performance Monitoring

  • CPU Utilization: JVM and system CPU tracking with history
  • Method Profiling: Hot method detection via execution sampling
  • Lock Contention: Monitor thread contention and lock wait times

Correlation Analysis

  • GC ↔ CPU Correlation: Detect CPU spikes related to GC events
  • GC ↔ Pinning Correlation: Identify pinning increases during GC
  • Automatic Recommendations: Get actionable insights based on metrics

Core Features

  • JFR Streaming: Low-overhead event collection using JDK Flight Recorder
  • Real-time Dashboard: WebSocket-based streaming with interactive charts
  • Lock-free Architecture: High-performance ring buffer for event collection
  • Data Export: Export events in CSV, JSON, or JSONL formats

Requirements

  • Java 21+
  • Gradle 8.4+ (only if building from source)

Installation

Option 1: Download via curl (Recommended)

# Download the latest agent JAR
curl -LO https://github.com/rlaope/argus/releases/latest/download/argus-agent.jar

# Or download a specific version
curl -LO https://github.com/rlaope/argus/releases/download/v0.1.0/argus-agent.jar

Option 2: Build from Source

git clone https://github.com/rlaope/argus.git
cd argus
./gradlew build

# JARs are located at:
# argus-agent/build/libs/argus-agent-x.x.x-SNAPSHOT.jar
# argus-server/build/libs/argus-server-x.x.x-SNAPSHOT.jar

Quick Start

Run with Java Agent

java -javaagent:argus-agent.jar \
     --enable-preview \
     -jar your-application.jar

With Built-in Dashboard Server

java -javaagent:argus-agent.jar \
     -Dargus.server.enabled=true \
     --enable-preview \
     -jar your-application.jar

# Open dashboard: http://localhost:9202/
# View metrics: curl http://localhost:9202/metrics

Configuration

The agent accepts the following system properties:

Property Default Description
argus.server.enabled false Enable built-in dashboard server
argus.server.port 9202 Dashboard/WebSocket server port
argus.buffer.size 65536 Ring buffer size for event collection
argus.gc.enabled true Enable GC monitoring
argus.cpu.enabled true Enable CPU monitoring
argus.cpu.interval 1000 CPU sampling interval in milliseconds
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 (ms)
argus.correlation.enabled true Enable correlation analysis

See Configuration Guide for detailed documentation.

Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   argus-agent   │───▶│   argus-core    │◀───│  argus-server   │
│  (JFR Stream)   │    │  (Ring Buffer)  │    │   (WebSocket)   │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                                              │
         │              JFR Events                      │
         ▼                                              ▼
┌─────────────────┐                          ┌─────────────────┐
│   Target JVM    │                          │    Frontend     │
│ (Virtual Threads)│                          │  (Visualization)│
└─────────────────┘                          └─────────────────┘

Modules

  • argus-core: Core event models, ring buffer, and serialization
  • argus-agent: Java agent with JFR streaming engine
  • argus-server: WebSocket server for event streaming

JFR Events Captured

Virtual Thread Events

  • jdk.VirtualThreadStart - Thread creation
  • jdk.VirtualThreadEnd - Thread termination
  • jdk.VirtualThreadPinned - Pinning detection (critical for Loom performance)
  • jdk.VirtualThreadSubmitFailed - Submit failures

GC & Memory Events

  • jdk.GarbageCollection - GC pause duration, cause, and type
  • jdk.GCHeapSummary - Heap usage before and after GC
  • jdk.ObjectAllocationInNewTLAB - Object allocation tracking
  • jdk.MetaspaceSummary - Metaspace usage monitoring

CPU & Performance Events

  • jdk.CPULoad - JVM and system CPU utilization
  • jdk.ExecutionSample - Method execution sampling for CPU profiling
  • jdk.JavaMonitorEnter - Lock acquisition contention
  • jdk.JavaMonitorWait - Lock wait contention

API Endpoints

Endpoint Description
/ Dashboard UI
/health Health check
/metrics Virtual thread metrics
/gc-analysis GC statistics and recent events
/cpu-metrics CPU utilization history
/pinning-analysis Pinning hotspot analysis
/export Export events (CSV, JSON, JSONL)
/allocation-analysis Allocation rate and top allocating classes
/metaspace-metrics Metaspace usage and growth
/method-profiling Hot methods (Top 20)
/contention-analysis Lock contention hotspots
/correlation Correlation analysis and recommendations

Contributing

Everyone is welcome! Project Argus is an open-source project and we welcome all forms of contributions.

  • Bug reports & feature requests
  • Code contributions (bug fixes, new features)
  • Documentation improvements
  • Testing and feedback

See CONTRIBUTING.md for more details.

Maintainer

  • @rlaope - Project Lead & Maintainer

For questions, suggestions, or collaboration inquiries, please open a GitHub Issue or contact @rlaope directly.

License

MIT License - see LICENSE for details.

About

A high-performance JFR-streaming profiler for modern JVMs to monitor virtual threads, memory, and CPU at scale

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages