에이전트 설치 없이, 재시작 없이, 실행 중인 JVM에 바로 붙어서 진단합니다. 내부적으로 jcmd와 jstat을 호출하고, async-profiler를 연동해서 프로파일링까지 지원합니다.
Argus
Java 11+ · CLI + Web Dashboard · MIT License ·
jcmd, JFR, async-profiler를 하나의 CLI와 웹 대시보드로 통합한 JVM 관측성 오픈소스입니다. 에이전트 없이 실행 중인 아무 JVM에 바로 붙어서 쓸 수 있고, Java 버전에 따라 자동으로 데이터 소스를 전환합니다.
JVM 모니터링 도구는 이미 많지만, 필요한 것들을 찾아서 조합하고 대시보드를 구성하고 어댑팅 로직까지 직접 짜는 건 꽤 번거로운 일입니다. Argus는 이런 프로파일링 도구들을 하나로 오케스트레이션하면서, 자체적으로 가공한 지표와 독자적인 대시보드를 함께 제공합니다.
Dashboard — Real-time JVM Monitoring
CLI — 50+ Diagnostic Commands
CLI — 50개 이상의 진단 명령
메모리 분석
힙 히스토그램, 힙 덤프, 메타스페이스 분석, 네이티브 메모리 추적, 스냅샷 비교를 통한 메모리 누수 탐지
GC 모니터링
세대별 사용률을 시각적 바로 표시, YGC/FGC 카운트, 전체 GC 시간, GC 원인 분석
스레드 진단
스레드 덤프, 상태별 요약, 데드락 감��, 스레드 풀 분석, 파이널라이저 큐 확인
프로파일링
async-profiler 연동으로 CPU, 할당, 락, wall-clock 프로파일링. --flame 플래그 하나로 HTML 플레임 그래프 생성
JFR 제어
JFR 녹화 시작/중지/체크/덤프를 CLI에서 직접 제어. Java Flight Recorder 라이프사이클을 명령줄로 관리
런타임 제어
VM 플래그 조회 및 런타임 변경, JVM 로깅 설정, JMX 제어, 종합 진단 리포트 생성
인터랙티브 TUI
k9s 스타일의 터미널 UI. 모든 명령을 브라우징하고 실시간 모니터링 대시보드를 제공
헬스 진단 & CI 게이트
argus doctor로 원클릭 JVM 건강 진단 및 튜닝 권장. argus ci로 CI/CD 파이프라인에서 헬스 게이트 실행
슬로우 메서드 & GC 로그
JFR 스트리밍으로 실시간 슬로우 메서드 탐지. GC 로그를 분석해서 pause 분포와 튜닝 방향 제시
비교 & 최적화
두 JVM을 나란히 비교하고, 워크로드 분석 기반 VM 플래그 최적화 제안
모든 명령에 --lang=en|ko|ja|zh 옵션이 있어서 4개 언어로 출력할 수 있고, --format=json으로 자동화 파이프라인에 연결할 수도 있습니다.
Web Dashboard — 실시간 모니터링
Java Agent를 붙이면 내장 Netty 서버가 올라가면서 웹 대시보드를 제공합니다. WebSocket 스트리밍으로 실시간 데이터가 들어오고, Chart.js와 d3-flamegraph로 시각화합니다.
플레임 그래프
연속 프로파일링 결과를 d3-flamegraph로 시각화. 줌, 호버, 내보내기 지원
가상 스레드 모니터링
Java 21+ 가상 스레드 라이프사이클 추적, 피닝 감지, 캐리어 스레드 분석
GC & 메모리
힙 사용량, GC pause 분석, 할당 속도 추적, 메타스페이스 모니터링
상관 분석
여러 메트릭 간 상관관계를 자동 분석하고 권장 사항을 제시
메트릭 내보내기 & 스프링 통합
Prometheus 스크래핑 엔드포인트와 OTLP 푸시 내보내기를 기본 제공합니다. CSV, JSON, JSONL 형식으로 데이터를 내보낼 수도 있습니다.
argus-micrometer 모듈은 약 25개의 JVM 메트릭을 Micrometer 레지스트리에 바인딩합니다. Prometheus, Datadog, InfluxDB 등 어떤 백엔드든 연결할 수 있습니다.
argus-spring-boot-starter는 Spring Boot 3.2+ 애플��케이션에 설정 없이 자동으로 통합됩니다. application.properties에 argus.* 프로퍼티만 추가하면 됩니다.
아키텍처
Java 버전별 호환성
| 기능 | Java 11+ | Java 17+ | Java 21+ |
|---|---|---|---|
| CLI (33개 명령) | Yes | Yes | Yes |
| 웹 대시보드 | - | Yes | Yes |
| GC / CPU / 힙 / 스레드 | CLI only | MXBean | JFR |
| 락 경합 분석 | - | - | JFR |
| 할당 추적 | - | - | JFR |
| 가상 스레드 모니터링 | - | - | JFR |
| 플레임 그래프 | - | - | JFR |
| Micrometer / Spring Boot | - | Yes | Yes |
Java 17~20에서는 MXBean 폴링을 사용하고, Java 21 이상에서는 JFR 스트리밍으로 자동 전환됩니다. 대시보드 UI도 감지된 Java 버전에 따라 표시 항목을 자동으로 조정합니다.
$ argus report 12345 JVM Info PID: 12345 | Java 21.0.2 | OpenJDK 64-Bit Server VM Uptime: 2h 34m | Args: -Xmx512m -XX:+UseG1GC Heap Memory Used: 287MB / 512MB ▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░ 56% GC Utilization Eden ▓▓▓▓▓▓▓░░░ 72% Old ▓▓▓░░░░░░░ 31% YGC: 847 (1.2s) FGC: 0 (0s) Thread Summary Total: 42 | RUNNABLE: 8 | WAITING: 28 | TIMED_WAITING: 6 $ argus profile 12345 --type cpu --flame --duration 10 Profiling for 10s... done. Flame graph saved → /tmp/argus-flame-12345.html