Quick start
Zero to a running Eliya with observability defaults in five steps. About five minutes end-to-end.
1. Install via SDKMAN! (once registered) or direct download (today)
SDKMAN! is the recommended path on Linux developer machines, but registration is in progress (PR sdkman/sdkman-db-migrations#783). For installation today, use the GitHub Release tar.gz, the .deb / .rpm packages on the same Release page, or follow the Linux install guide. Once SDKMAN! registration completes:
2. Verify the install
Confirm Eliya is the active JVM and the diagnostic path root is writable:
The first command should report Eliya in the version banner. The second should print OK when the diagnostic path root exists and is writable. For downloaded-artefact integrity (GPG signature and SHA256 checksums), see Verify your download.
3. Run your application with operational-readiness defaults
Add a single flag to your existing JVM command:
This activates six operational-readiness ergonomics today (25.0.3): heap-dump-on-OOM with structured path, exit-on-OOM, Native Memory Tracking summary, predictable crash log path, container support reinforced, and diagnostic VM options unlocked. Steady-state CPU overhead is near zero: each either triggers only on the actual event (heap-dump-on-OOM, crash log, exit-on-OOM) or carries low steady-state cost (NMT summary mode). No GC tuning, no TLS overlay.
Continuous JFR and unified GC logging under the same flag, plus bundled Eclipse MAT and async-profiler, are not yet available (planned, see the roadmap). The flags reference details exactly what the flag sets today.
4. Inspect what the profile activated
The output shows the six ergonomics with their values and origin. Flags with {ergonomic} in the origin column were set by EliyaProfile=Production; flags with {default} were already at the activated value upstream (this is the case for UseContainerSupport on JDK 25).
5. Find your diagnostic artifacts
Eliya writes artifacts to a three-level filesystem layout (${ELIYA_DIAGNOSTIC_PATH}/${service}/${replica}/${category}/), with replica suppression when replica resolves to the same value as service:
JFR recordings, heap dumps (on OOM), crash logs, and GC logs live in sibling jfr/, heap/, crash/, gc/ directories under each replica's path. For Kubernetes, the replica name is the pod name; for bare-metal systemd, the replica name is suppressed and artifacts land directly under the service directory.
Where to go next
- Install on Linux: tar.gz, DEB/RPM, systemd integration for production servers.
- Install with Docker: multi-arch OCI images, sidecar diagnostics, ephemeral debug containers.
- Flags reference: what
EliyaProfile=Productionactivates, performance impact, override semantics. - Migration guide: switching from Corretto, Temurin, Zulu, or another OpenJDK distribution.
- Integrations: Maven/Gradle toolchains, Kubernetes, service mesh, logging stacks, APM coexistence.
- Roadmap: what's planned beyond today's release: FIPS variant, bundled diagnostic tooling, Asymm Forensics, compliance profiles.
- Troubleshooting: common issues with concrete diagnostic commands.