jvisualvm分析内存堆栈信息

版权声明:转载请注明出处 https://blog.csdn.net/qiaojialin/article/details/79581859

连接方式

需要java进程启动JMX服务

  • 命令行输入 jvisualvm -J-Xmx8096M (可配置最大内存大小)
    • 左边栏可选择本地或远程连接
    • 添加主机(输入IP),添加JMX连接(添加端口号)。

实时动态分析

  • 抽样器->内存。 可观察各种类实例数及内存占用。底栏有类名过滤器,可以过滤包含某些字段的类的状态。

    这里写图片描述

静态 Dump 分析

  • Dump内存信息:右侧点击 “堆Dump”。

本地进程会直接打开dump文件。
远程 dump 会选择 dump 文件地址,过一段时间提示 dump 完成。
可以将 dump 文件 scp 至本机,通过 文件->装入 打开 dump 文件。

打开dump文件后会有类和实例信息,点开实例后有引用信息,还可以通过OQL分析。

jmap dump工具

jmap -dump:file=heap.dump pid (pid为进程号)

OQL

这个工具太慢了,dump文件比较小还可以,大了没法忍

对字符串常用的分析例子:

```
select count(heap.objects('java.lang.String'))  查询String实例的个数

select s from java.lang.String s where /^_.*_.*/.test(s.toString())   查询满足一定模式的字符串

select count(heap.classes(), "/java.io./.test(it.name)")  查询满足一定模式的类的个数

select count(heap.objects("java.lang.String"), "/^_.*_.*_.*/.test(it)")  查询满足一定模式的字符串个数
```

猜你喜欢

转载自blog.csdn.net/qiaojialin/article/details/79581859