jmap -histo[:live]导出Java 堆内存到文件# 打印当前进程中类实例信息
jmap -dump:live,format=b,file=heap.binJava 堆内存分析工具jhat# live 是否只打印存活对象,如果不指定,则会打印全部对象 # file 指定导出的文件路径,包含文件名称 # 指定 java 进程id jmap -dump:live,format=b,file=heap.hprof 2848
通过 jhat 命令我们可以建立一个服务器用于分析指定的堆内存文件
jhat [-port] -J # jhat 指定要分析的堆内存文件 jhat -port 7000 -JXmx=1g heap.hprof # -port 用于指定端口号,默认 7000 # -JXmx=1g 用于指定启动的Java服务,注意这里要大于dump的堆内存文件 # heap.hprof dump 出的堆内存文件
我们可以通过 OQL对象分析语言来对内存进行分析操作.
OQL 语言的标准格式是这样的:
select[ from [instanceof] [ where ] ]
-- 获取堆内存中全部字符串 -- 注意 select,from 等关键字要用小写 select x.value.toString() from java.lang.String x
-- 正则表达式查起来会很慢,最好不要用 select x.value.toString() from java.lang.String x where /[d.]+/.test(x.value.toString())使用 & 进行多条件查询
-- 查询字符串长度大于20且包含 Excepton 的字符串 -- select 展示多个值要用数组的方式拼接 select [s.value.toString(),s] from java.lang.String s where s.value.length>20 & /Exception/.test(s.value.toString())参考资料
分析大文件Java堆内存快照
分析大文件Java堆内存快照
白灰——软件测试
JVM 对象查询语言(OQL)
Object Query Language (OQL)



