- System requirements
- Profiler architecture
- Running the profiler
- Profiler activation
- Start profiling
- Solving performance problems
- CPU profiling
- Threads
- Deadlock detector
- Memory profiling
- Garbage collection
- Monitor profiling
- Exception profiling
- Probes: monitor events of various kinds
- Performance Charts
- Inspections: automatic recognition of typical problems
- Automatically trigger actions on event
- Summary, snapshot annotation, automatic deobfuscation
- Time measurement (CPU time, wall time)
- Filters
- Snapshot directory customization
- Export of profiling results to HTML, CSV, XML, plain text
- Profiler Java API
- Profiler HTTP API
- Command line tool to control profiling
- Settings
- FAQ: How to profile in my scenario?
Deadlock detector
If a Java-level deadlock happens in the profiled application, it will be automatically detected.
When you are connected to the profiled application, switch to the "Deadlocks" tab.

If the deadlock is found, a notification will be shown. Find the deadlock detail in the "Deadlocks" tab.

Potential deadlocks
The profile can detect deadlocks which are not otherwise reported by standard Java mechanism which detects only Java-level deadlocks, but does not detect deadlocks of Java threads caused by JVM internal locks (e.g. class loader) or native methods which explicitly use low-level synchronization primitives.
An heuristics detects threads whose stack does not changed for some period of time, which is a sign of potential deadlock or hung thread.

Well-known cases when thread can legally stay in same state for a long time are excluded. In particular, it can be threads which are waiting for incoming connection in ServerSocket.accept(), some JVM internal threads etc.
Important: the potential deadlock detection depends on thread stack telemetry. If thread state telemetry is stopped, the detection is not possible.
Potential deadlocks are not necessarily actual deadlocks. It is possible that the reported threads are performing the same operation for a long time, and will eventually finish. Use Refresh button to check if detected threads are still considered frozen.
For each potentially deadlocked or hanged thread there is a link to ignore it. Once ignored, the stack will no longer be reported as a potential deadlock.

Ignored false positive deadlocks are stored in the file<user home>/.yjp/deadlock_ignore_list.json
.
This file can also be edited manually or deleted to reset to defaults.
Manual changes to the file are applied on the profiler UI restart.