RFC: regarding metaspace(metadata?) dump
Ioi Lam
ioi.lam at oracle.com
Thu Jan 12 00:15:25 UTC 2023
CC-ing serviceability.
Hi Yi,
In general, I think it's good to have tools for understanding the
internal layout of the class metadata layouts.
I think there are overlaps between your proposal and existing tools. For
example, there are jcmd options such as VM.class_hierarchy and
VM.classes, etc.
The Serviceability Agent can also be used to analyze the contents of the
class metadata.
Dd you look at the existing tools and see how they match up with your
requirements?
I'd be interested in seeing your implementation and compare it with the
existing tools.
On 1/11/2023 4:56 AM, Yi Yang wrote:
> Hi,
>
> Internally, we often receive feedback from users and ask for help on
> metaspace-related issues, for example
> 1. Users are eager to know which GroovyClassLoader loads which
> classes, why they are not unloaded,
> and why they are leading to Metaspace OOME.
> 2. They want to know the class structure of dynamically generated
> classes in some scenarios such as
> deserialization
> 3. Finding memory leaking about duplicated classes
> ...
> Internally we implemented a metaspace dump that generates
> human-readable text, it looks something like this:
>
> [Basic Information]
> Dump Reason : JCMD
> MaxMetaspaceSize : 18446744073709547520 B
> CompressedClassSpaceSize : 1073741824 B
> Class Space Used : 309992 B
> Class Space Capacity : 395264 B
> ...
> [Class Loader Data]
> ClassLoaderData : loader = 0x000000008024f928, loader_klass =
> 0x0000000800010098, loader_klass_name =
> sun/misc/Launcher$AppClassLoader, label = N/A
> Class Used Chunks :
> * Chunk : [0x0000000800060000, 0x0000000800060230, 0x0000000800060800)
> NonClass Used Chunks :
> * Chunk : [0x00007fd8379c1000, 0x00007fd8379c1350, 0x00007fd8379c2000)
> Klasses :
> Klass : 0x0000000800060028, name = Test, size = 520 B
> ConstantPool : 0x00007fd8379c1050, size = 296 B
> ...
>
> It has been working effectively for several years and has helped many
> users solve metaspace-related problems.
> But a more user-friendly way is that JDK can inherently support this
> capability. We hope that format of the metaspace
> dump file can take both flexibility and compatibility into account,
> and the content of dump file should be detailed
> enough to meet the needs of both application developers and
> lower-level developers.
>
> Based on above considerations, I think using JSON as its file format
> is an appropriate solution(But XML or binary
> format are still not excluded as candidates). Specifically, in earlier
> thoughts, I thought the format of the metaspace
> file could be as follows(pretty printed)
>
> https://gist.github.com/y1yang0/ab3034b6381b8a9d215602c89af4e9c3
>
> Using the JSON format, we can flexibly add new fields without breaking
> compatibility. It is debatable as to which data
> to write. We can reach a consensus that third-party parsers(Metaspace
> Analyzer Tool) can at least reconstruct Java
> source code from the dump file.
This may be quite difficult, because the metadata contains rewritten
Java bytecodes. The rewriting format may be dependent on the JDK
version. Also, the class linkage (the resolution of constant pool
information) will be vastly from one JDK version to another. So using
writing a third party tool that can work with multiple JDK versions will
be quite hard. Also, defining a "portable" format for the dump will be
difficult, since we don't know how the internal data structure will
evolve in the future.
Thanks
- Ioi
> Based on this, we can write more useful information for low-level
> troubleshooting
> or debugging. (e.g. the init_state of InstanceKlass).
> In addition, we can even output the native code and associated
> information with regard to Method, third-party parser
> can reconstruct the human-readable assembly representation of the
> compiled method based on dump file. To some extent,
> we have implemented code cache dump by the way. For this reason, I'm
> not sure if the title of the RFC proposal should
> be called metaspace dump, maybe metadata dump? It looks more like a
> metadata-dump framework.
>
> Do you have any thoughts about metaspace/metadata dump? Looking
> forward to hearing your feedback, any comments are invaluable!
>
> Best regards,
> Yi Yang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/serviceability-dev/attachments/20230111/0372bc58/attachment-0001.htm>
More information about the serviceability-dev
mailing list