原理:vmtool
利用JVMTI
接口,实现查询内存对象,强制 GC 等功能。
方式一
命令结构:
vmtool --action getInstances -c [类加载器的hash] --className [目标类全路径]
--limit 10 -x 2
通过 --limit
参数,可以限制返回值数量,避免获取超大数据时对 JVM 造成压力。默认值是 10。
通过 -x
/--expand
参数可以指定结果的展开层次,默认值是 1。
例如:
查看对象的内容
vmtool --action getInstances --className com.caucho.network.listen.TcpPort
--limit 3 --expand 4
强制GC
vmtool --action forceGc
方式二
命令格式:
vmtool --action getInstances -c 7637f22 --className 【容器全路径】
--express 'instances[0].getBean("实例对象名").【属性名】'
获取当前类是那个类加载器加载的
sc -d 【目标类】
例如:
查询spring容器中的某个对象
vmtool --action getInstances -c [ 7637f22] --className [org.springframework.web.context.WebApplicationContext]
--express 'instances[0].getBean("mytest")'
查询spring容器中的某个对象的某个属性值
vmtool --action getInstances -c 7637f22 --className org.springframework.web.context.WebApplicationContext --express
'instances[0].getBean("mytest").testName'