You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arthas/site/docs/en/doc/vmtool.md

3.2 KiB

vmtool

::: tip @since 3.5.1 :::

vmtool online tutorial

vmtool uses the JVMTI to support getInstances in jvm and forceGc.

getInstances

$ vmtool --action getInstances --className java.lang.String --limit 10
@String[][
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com.taobao.arthas.core.shell.session.Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/taobao/arthas/core/shell/session/Session.class],
    @String[com/],
    @String[java/util/concurrent/ConcurrentHashMap$ValueIterator],
    @String[java/util/concurrent/locks/LockSupport],
]

::: tip Through the --limit parameter, you can limit the number of return values to avoid pressure on the JVM when obtaining large data. The default value of limit is 10. :::

Specify classloader name

vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext

Specify classloader hash

The classloader that loads the class can be found through the sc command.

$ sc -d org.springframework.context.ApplicationContext
 class-info org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext
 code-source file:/private/tmp/demo-arthas-spring-boot.jar!/BOOT-INF/lib/spring-boot-1.5.13.RELEASE.jar!/
 name org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext
...
 class-loader +-org.springframework.boot.loader.LaunchedURLClassLoader@19469ea2
                     +-sun.misc.Launcher$AppClassLoader@75b84c92
                       +-sun.misc.Launcher$ExtClassLoader@4f023edb
 classLoaderHash 19469ea2

Then use the -c/--classloader parameter to specify:

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext

Specify the number of expanded layers of returned results

::: tip The return result of the getInstances action is bound to the instances variable, which is an array.

The expansion level of the result can be specified by the -x/--expand parameter, the default value is 1. :::

vmtool --action getInstances -c 19469ea2 --className org.springframework.context.ApplicationContext -x 2

Execute expression

::: tip The return result of the getInstances action is bound to the instances variable, which is an array. The specified expression can be executed through the --express parameter. :::

vmtool --action getInstances --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader --className org.springframework.context.ApplicationContext --express'instances[0].getBeanDefinitionNames()'

Force GC

vmtool --action forceGc
  • Use the vmoption command to dynamically turn on the PrintGC option.