Table of Contents

classloader-metaspace

TIP

Show metaspace / class metadata statistics by ClassLoader instance.

classloader-metaspace uses the JFR jdk.ClassLoaderStatistics event to collect metaspace statistics for each ClassLoaderData, then maps those rows back to Arthas ClassLoader hash, type and display name.

Note: this command reports metaspace / class metadata memory. It does not report the retained size of all Java heap objects reachable from a ClassLoader.

classloader-metaspace depends on JFR. If the current JDK does not support JFR, the command is not registered.

Options

NameSpecification
[c:]ClassLoader hashcode, same format as classloader -c
[classLoaderClass:]Filter by full ClassLoader class name
[duration:]JFR sampling duration, 2500ms by default; supports ms, s, m; a plain number means milliseconds
[period:]jdk.ClassLoaderStatistics period, 500ms by default; supports ms, s, m
[limit:]Show only the first N rows after sorting by chunkSize descending
[verbose:]Show full diagnostic columns, including classLoaderData, hiddenBlockSize and type; -v is also supported

Output

The default terminal table prioritizes core columns for daily troubleshooting. With --verbose, full diagnostic columns are shown. Long text columns, type and name, are shown on the right and may be truncated or hidden when the terminal is narrow.

FieldSpecification
hashArthas ClassLoader hash
classesJFR classCount, the number of loaded classes
chunkSizeTotal allocated metaspace chunk size for the ClassLoaderData
blockSizeTotal used metaspace block size
nameDisplay name. The command tries JFR name first, then falls back to toString()

--verbose also shows:

FieldSpecification
classLoaderDataHotSpot ClassLoaderData pointer
hiddenBlockSizeTotal metaspace block size used by hidden classes; on JDK 11 this is read from the JFR anonymousBlockSize field
typeClassLoader class name

Usage

Show all ClassLoader metaspace statistics

$ classloader-metaspace
 hash      classes  chunkSize  blockSize  name
 68b31f0a  2115     1048576    823296     com.taobao.arthas.agent.ArthasClassloader@68b31f0a
 null      1861     524288     410624     BootstrapClassLoader
Affect(row-cnt:2) cost in 2510 ms.

Filter by ClassLoader type

$ classloader-metaspace --classLoaderClass demo.TestApp$ModuleClassLoader
 hash      classes  chunkSize  blockSize  name
 6d06d69c  1        6144       1744       order-service's ModuleClassLoader
 7852e922  1        4096       1744       pay-service's ModuleClassLoader
 4e25154f  1        7168       1752       user-service's ModuleClassLoader

Show full diagnostic columns

$ classloader-metaspace --classLoaderClass demo.TestApp$ModuleClassLoader --verbose
 hash      classLoaderData     classes  chunkSize  blockSize  hiddenBlockSize  type                            name
 6d06d69c  0x000000014e135010  1        6144       1744       0                demo.TestApp$ModuleClassLoader  order-service's ModuleClassLoader
 7852e922  0x000000013c605640  1        4096       1744       0                demo.TestApp$ModuleClassLoader  pay-service's ModuleClassLoader
 4e25154f  0x000000014c717830  1        7168       1752       0                demo.TestApp$ModuleClassLoader  user-service's ModuleClassLoader

Limit output rows

$ classloader-metaspace --limit 20

Rows are sorted by chunkSize desc, blockSize desc, name asc, so --limit keeps ClassLoaders with larger metaspace chunk allocation.