RFR: 8254723: add diagnostic command to write Linux perf map file
Nick Gasson
ngasson at openjdk.java.net
Tue Oct 20 09:34:29 UTC 2020
When using the Linux "perf" tool to do system profiling, symbol names of
running Java methods cannot be decoded, resulting in unhelpful output
such as:
10.52% [JIT] tid 236748 [.] 0x00007f6fdb75d223
Perf can read a simple text file format describing the mapping between
address ranges and symbol names for a particular process [1].
It's possible to generate this already for Java processes using a JVMTI
plugin such as perf-map-agent [2]. However this requires compiling
third-party code and then loading the agent into your Java process. It
would be more convenient if Hotspot could write this file directly using
a diagnostic command. The information required is almost identical to
that of the existing Compiler.codelist command.
This patch adds a Compiler.perfmap diagnostic command on Linux only. To
use, first run "jcmd <pid> Compiler.perfmap" and then "perf top" or
"perf record" and the report should show decoded Java symbol names for
that process.
As this just writes a snapshot of the code cache when the command is
run, it will become stale if methods are compiled later or unloaded.
However this shouldn't be a big problem in practice if the map file is
generated after the application has warmed up.
[1] https://github.com/torvalds/linux/blob/master/tools/perf/Documentation/jit-interface.txt
[2] https://github.com/jvm-profiling-tools/perf-map-agent
-------------
Commit messages:
- 8254723: add diagnostic command to write Linux perf map file
Changes: https://git.openjdk.java.net/jdk/pull/760/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=760&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8254723
Stats: 149 lines in 5 files changed: 148 ins; 1 del; 0 mod
Patch: https://git.openjdk.java.net/jdk/pull/760.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/760/head:pull/760
PR: https://git.openjdk.java.net/jdk/pull/760
More information about the serviceability-dev
mailing list