Details
-
Test
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
None
-
New
Description
Allow async-profiler in addition to the JFR profiler.
async profiler description:
This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. It features HotSpot-specific APIs to collect stack traces and to track memory allocations. The profiler works with OpenJDK, Oracle JDK and other Java runtimes based on the HotSpot JVM. async-profiler can trace the following kinds of events: * CPU cycles * Hardware and Software performance counters like cache misses, branch misses, page faults, context switches etc. * Allocations in Java Heap * Contented lock attempts, including both Java object monitors and ReentrantLocks
The "tests.asyncprofile" mode switch turns on the async-profiler (https://github.com/jvm-profiling-tools/async-profiler) during test execution,
and prints a simple summary at the end.
For example, top-10 histogram of methods (cpu samples):
gradlew -p lucene/core test -Ptests.asyncprofile=true
Alternatively, you can profile heap allocations instead: TBD
Requirements
- You need to download async-profiler 2.x (https://github.com/jvm-profiling-tools/async-profiler)
- You need the .so lib in a standard shared folder or one of the directories from LD_LIBRARY_PATH (Linux, though not Arch by
default), DYLD_LIBRARY_PATH (Mac OS), or -Djava.library.path. I think ${HOME}/libs also works
on Linux. We could also allow specifying the location directly as an option. - Debug version of Java is important for best results and is required for heap allocation profiling. Available as package on Ubuntu, can be built with a small modification on Arch.
The following permissions need to be set to allow for the proper permissions for profiling:
# sysctl kernel.perf_event_paranoid=1 # sysctl kernel.kptr_restrict=0
Attachments
Issue Links
- relates to
-
LUCENE-10117 Add a tool to make it easy to put together perfasm output with lucene-util benchmarks.
- Open
- links to