Project Overview
Arthas is an interactive Java diagnostic tool that you run against a live JVM process to inspect behavior in real time. You can attach to a running service, execute diagnostic commands, and detach without rebuilding or redeploying.
You use it when logs and static metrics are not enough: high CPU spikes, slow endpoints, classloader conflicts, unexpected exceptions, or method-level latency that appears only under real traffic. Arthas is focused on runtime observability and troubleshooting, not long-term metric storage or dashboarding.
You can see ongoing maintenance activity directly in the GitHub repository, and you can use the official documentation at arthas.aliyun.com for command references and operational patterns.
Key Challenges Addressed
You often need answers from a JVM that is already in production-like state, where restarting with extra flags is risky or too slow. Arthas targets that constraint with live attach and command-based inspection.
-
Runtime visibility without restart: you can inspect threads, memory, class metadata, and method execution while the process stays online.
-
Method-level tracing on demand: you can trace invocation paths and timings for selected methods instead of adding temporary logging and redeploying.
-
Bytecode and class inspection in place: you can decompile loaded classes and verify what is actually running in memory, which is critical when packaging or classpath drift appears.
-
Incident-time diagnostics: you can run short, focused checks during outages, then detach to minimize overhead.
Getting Started
You can install Arthas from the official quick-start path and run arthas-boot.jar against a target JVM process. A first useful workflow is to attach, inspect, and trace one hot path.
# Start Arthas and select a JVM process interactively
java -jar arthas-boot.jar
# Inside Arthas shell
dashboard
thread -n 5
sc -d com.yourteam.orders.OrderService
trace com.yourteam.orders.OrderService placeOrder
Sharp edges you should expect immediately:
-
You need JVM/process access permissions on the host.
-
You should limit command scope (
class-pattern,method-pattern, condition expressions) to avoid excessive runtime overhead. -
You should rehearse attach/detach and command safety in staging before incident use.
Features and Use Cases
Arthas is strongest when you need direct runtime answers fast.
-
dashboard,thread, and memory commands: you can identify hot threads, blocked states, and system pressure quickly. -
trace,watch, andtt(time tunnel): you can inspect method latency, arguments, return values, and execution paths for targeted code paths. -
jadand classloader inspection: you can confirm loaded bytecode and diagnose class shadowing or version conflicts. -
profilerintegration paths: you can capture profiling data when command-level checks are not enough. -
Tunnel and remote operation modes: you can run diagnostics for distributed deployments where direct shell access is constrained.
Typical scenarios for your team include debugging intermittent latency in one service method, validating which class version is loaded after rollout, and triaging CPU saturation caused by lock contention or expensive reflection paths.
Ecosystem and Dependencies
Arthas integrates with standard JVM operational tooling rather than replacing your full observability stack. You can pair it with log aggregation and metrics systems for incident workflows where you first detect an anomaly, then attach with Arthas for root-cause detail.
At runtime, you rely on JVM attach/instrumentation capabilities and command execution inside the target process. You should align Arthas usage with your service ownership model, access controls, and incident playbooks so diagnostics stay auditable and safe.
If you evaluate adjacent tools, you will likely compare Java Mission Control, VisualVM, async-profiler, and BTrace.
Architectural Overview
Arthas follows a live-attach architecture:
-
Bootstrap/attach entrypoint: you launch
arthas-boot.jarand connect to a target JVM. -
Agent inside target JVM: command handlers run in-process so you can inspect classes, threads, and method execution directly.
-
Command shell and protocol layer: you execute interactive diagnostics and receive structured output.
-
Optional remote/tunnel mode: you can operate across network boundaries for controlled remote diagnostics.
This design matters because you get low-latency diagnostics during incidents without redeploy cycles. You trade some operational complexity for that speed: your team needs disciplined command scopes, access controls, and runbooks to keep overhead predictable.
Pros and Cons
-
Pro: you get deep JVM runtime introspection without restart.
-
Pro: you can narrow diagnostics to exact classes/methods during live incidents.
-
Pro: command coverage is broad enough for most Java troubleshooting workflows.
-
Con: safe use requires practiced operators and explicit guardrails.
-
Con: interactive shell workflows can be harder to standardize than fully automated profiling pipelines.
-
Con: in-process diagnostics can add overhead if command scope is too wide or left running too long.
Comparison and Alternatives
GitHub stars
Weekly star gains
Full metrics details
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
Arthas
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
82 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub GraphQL current stargazer cohort, reconstructed from starredAt events and totalCount retrieved in one stable pagination walk. GitHub does not expose historical unstar events, so this is not an exact ledger of past star counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Arthas
GitHub API observation. Historical values render only when the source provides a real observation for that day.
179 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Issues closed
Weekly total
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Arthas
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
179 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests opened
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Arthas
GitHub API observation. Historical values render only when the source provides a real observation for that day.
179 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests closed
Weekly total
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Arthas
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
179 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Pull requests merged
Weekly total
Full metrics details
GitHub API observation. Historical values render only when the source provides a real observation for that day.
Arthas
GitHub API observation. Historical values render only when the source provides a real observation for that day.
179 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub API observation. Historical values render only when the source provides a real observation for that day.
38 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub API observation. Historical values render only when the source provides a real observation for that day.
178 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed pull request ratio
Weekly average
Full metrics details
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
Arthas
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
82 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub Search pull-request totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Open/closed issues ratio
Weekly average
Full metrics details
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
Arthas
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
82 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub Search issue totals queried for exact UTC days; rolling values are sums of proven daily counts.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Releases
Weekly total
Full metrics details
GitHub release published_at events bucketed by UTC day; drafts are excluded.
Arthas
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Java Mission Control
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
VisualVM
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
async-profiler
GitHub release published_at events bucketed by UTC day; drafts are excluded.
82 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
BTrace
GitHub release published_at events bucketed by UTC day; drafts are excluded.
180 observed daily rows. Missing days are not fabricated.
| Date | Value |
|---|
Hotness score
Weekly average
Full metrics details
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
Arthas
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Java Mission Control
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
VisualVM
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
async-profiler
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
82 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
BTrace
Derived only from GitHub GraphQL starredAt events after daily star totals are reconciled.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.40 × Hot today + 0.40 × Hot week + 0.20 × Breakout.
- Same-day multiplier = stars 1d ÷ max(1, stars 7d ÷ 7)
- Weekly multiplier = stars 7d ÷ max(1, stars 30d ÷ 30 × 7)
- Fortnight multiplier = stars 14d ÷ max(1, stars 90d ÷ 90 × 14)
- Hot today = clamp(70 × log-scale(stars 1d, 1000) + 30 × breakout-scale(same-day, 4))
- Hot week = clamp(75 × log-scale(stars 7d, 5000) + 25 × breakout-scale(weekly, 3))
- Breakout = clamp(35 × breakout-scale(same-day, 4) + 40 × breakout-scale(weekly, 3) + 25 × breakout-scale(fortnight, 2.5))
| Date | Stars | Stars 1d | Stars 7d | Stars 14d | Stars 30d | Stars 90d | Same-day multiplier | Weekly multiplier | Fortnight multiplier | Hot today | Hot week | Breakout | Stored score |
|---|
Reliability score
Weekly average
Full metrics details
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
Arthas
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
Java Mission Control
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
VisualVM
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
async-profiler
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
82 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
BTrace
Derived from the displayed continuity, closure, shipping, liveness, and support-burden components.
180 observed daily rows. Missing days are not fabricated.
Per-day formula: 0.30 × Continuity + 0.30 × Closure + 0.20 × Shipping + 0.10 × Liveness + 0.10 × Support burden.
- Continuity = 35% active ratio 90d + 20% active ratio 30d + 15% PR efficiency 90d + 10% PR efficiency 30d + 10% liveness + 10% observed-history coverage
- Closure = 55% PR merge efficiency 90d + 45% issue close efficiency 90d
- Shipping = 100 × (20% × release ratio 30d + 30% × release ratio 90d + 50% × release ratio 180d); ratios are releases ÷ 2, 6, and 12, capped at 1
- Support burden = 100 − 2 × open issues per 1,000 stars
- Liveness = 100 × exp(−pushed days ago ÷ 120)
Stars, issues, pull requests, and releases are daily observations. Pushed-days and license are repository snapshot-derived inputs and are not independent historical GitHub events.
| Date | Issues opened | Issues closed | PRs opened | PRs merged | Releases | Stars | Open issues | Pushed days ago | Continuity | Closure | Shipping | Liveness | Support burden | License | Observed days | Missing days | Needs healing | Stored score |
|---|
You can evaluate Arthas against several mature and focused options.
-
Java Mission Control: strong JVM telemetry and profiling workflows with a mature ecosystem around JVM performance analysis.
-
VisualVM: GUI-first profiling and monitoring that is easy to start with for local and remote JVM inspection.
-
async-profiler: low-overhead sampling profiler focused on CPU and allocation profiling depth.
-
BTrace: tracing via dynamic instrumentation scripts for targeted runtime probes.
| Project | Repo | Adoption confidence (~6mo) | PRs merged (~6mo) | Star growth (~6mo) |
|---|---|---|---|---|
| Arthas | https://github.com/alibaba/arthas | 44.06 | 50 | 1369 |
| Java Mission Control | https://github.com/openjdk/jmc | 5.47 | 0 | 94 |
| VisualVM | https://github.com/oracle/visualvm | 25.78 | 0 | 275 |
| async-profiler | https://github.com/async-profiler/async-profiler | 63.50 | 220 | 1000 |
| BTrace | https://github.com/btraceio/btrace | 43.18 | 54 | 154 |
Java Mission Control is the best overall alternative from this set. You get strong documentation depth, long-running JVM performance workflows, and mature operational patterns for repeatable analysis.
Conclusion
Arthas is best when you need precise, live JVM diagnostics during real incidents and you cannot wait for redeploy-based instrumentation. You gain fast root-cause depth, but your team needs disciplined runtime usage, scoped commands, and practiced runbooks to control overhead. You can start from the official repository, use the documentation, and track maintenance and issue workflows through the community discussions on GitHub.
