Quickstart
Use this path when you already have java-profiler deployed and want to profile one Java service.
1. Enable profiling
Add profiling metadata to the target workload pod template:
metadata:
annotations:
java-profiler.io/profile-mode: temporary
java-profiler.io/profile-duration: 15mUse temporary for incident work. Use continuous only for services approved for ongoing collection.
2. Open the service
In the Web UI, set:
Namespace: the Kubernetes namespace.Service: the service or workload name.Range: the time window that includes the profiling run.
Start with Target status if the UI looks empty. It explains whether the JVM was accepted, disabled, unsupported, expired, or failed attach.
3. Analyze the profile
Open CPU profile analysis first when investigating high CPU.
Use:
- Top Table to find the most expensive Java methods.
- Flame Graph to see full sampled stack context.
- Selected frame details to compare Self CPU and Total CPU.
- Search and Focus to isolate the stack path that matters.
For latency that is not explained by CPU, switch to Wall Clock. For socket or file blocking, switch to I/O wait. For pause-time or allocation-pressure incidents, switch to GC pauses and allocation correlation. For contention, switch to lock diagnosis.
4. Check ingestion health
Before trusting a missing profile, check Ingestion health. A useful diagnosis needs accepted profile batches for the selected service and time range.
5. Turn profiling off
Temporary profiling expires automatically. For continuous profiling, remove or disable the metadata when the service no longer needs ongoing collection.