vmtool
利用JVMTI
接口,实现查询内存对象,强制GC等功能。
获取对象
[arthas@25435]$ vmtool --action getInstances --className com.demo.entity.StudentInfo --limit 10
@StudentInfo[][
@StudentInfo[com.demo.entity.StudentInfo@68082dfb],
@StudentInfo[com.demo.entity.StudentInfo@1fb1c17d],
@StudentInfo[com.demo.entity.StudentInfo@335c916b],
]
通过上述命令,可以看出,内存中存在3个StudentInfo对象实例。
指定返回结果展开层数
getInstances
action返回结果绑定到instances
变量上,它是数组。
通过
-x
/--expand
参数可以指定结果的展开层次,默认值是1。
[arthas@25435]$ vmtool --action getInstances --className com.demo.entity.StudentInfo --limit 10 -x 2
@StudentInfo[][
@StudentInfo[
userId=@Long[100],
userName=@String[XXX],
userNo=@String[14242919900721123X],
schoolNo=@String[10000114],
accountBalance=null,
currSelect=@Boolean[false],
orgNo=@String[70],
loginName=null,
],
@StudentInfo[
userId=@Long[558],
userName=@String[YYY],
userNo=@String[152827197801154222],
schoolNo=@String[10000114],
accountBalance=null,
currSelect=@Boolean[false],
orgNo=@String[70],
loginName=null,
],
@StudentInfo[
userId=@Long[100],
userName=@String[ZZZ],
userNo=@String[14242919900721123X],
schoolNo=@String[10000114],
accountBalance=null,
currSelect=@Boolean[false],
orgNo=@String[70],
loginName=null,
],
]
通过指定对象的展开层次,可以看到对象的基本数据类型值。这对于调试程序有很大的帮助,尤其是在测试环境或生产环境出现异常情况时。