平时我们在开发Java应用的时候,会涉及到分析对象内存、内存监控,那么就涉及到jmap这个工具,学习后来介绍一下
jmap 一般可用于:
- jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息
- 内存监控
- 分析对象内存
示例:
jmap 相关命令:
可通过 jmap --help 查看
- jmap [option] :连接运行的进程 ,分析内存情况
- jmap [option] <executable :分析 core dump文件
- jmap [option] [server_id@] :连接到远程的服务器进行分析
- jmap -help / java -h : 查看帮助信息
1、jmap [option]
jmap [option]
- : 可通过 jps 或者 ps 获得
示例如上面 示例图 一样,用ps 查询到java 的进程号 25488 ,然后 jmap 25488 查看到当前进程的相关信息
2、jmap [option] <executable
jmap [option] <executable
- : 生成核心转储的Java可执行文件。
- : 要打印配置信息的核心文件
3、jmap [option] [server_id@]
- : 当很多debug服务在远程跑的时候,这个服务的唯一 ID
- : 远程服务的IP或者hostname
4、[option]
- -dump: :生成Java堆快储快照,如下
- live:仅将存活得对象dump出
- format:编码格式
- file :生成得文件名称
- -finalizerinfo :显示出等待执行 finalize方法得对象
- -heap : 显示Java堆详细信息
- -histo[:live] :显示堆中对象的详细信息,如果加了live,只显示 存活 得对象信息
- -clstats :显示出加载器静态对象
常用命令:
示例:(这里有一个Java 应用,pid为 25488)
1、jmap -heap [pid] : 显示堆的详细信息
执行:
执行情况,显示二个主要的信息
- 堆的配置(Heap Configuration)
- 堆使用(Heap Usage)(新生代、老年代)
2、jmap -finalizerinfo [pid] : 查看 等待执行finalize 方法的数量
执行:
执行情况,显示待执行 finalize 方法的对象数量
3、jmap -dump:live,format=b,file=xxx.xxx [pid] #将当前Java进程的内存占用情况导出来
执行:
执行情况,在指定路径下生成指定快照文件 a.txt,生成的文件可以用 jhat 工具来进行分析
生成的文件用jhat来分析, 默认开启端口7000
可以根据 ip:7000 来查看:
4、jmap -histo:live [pid] >a.log #将当前Java进程的内存占用情况导出来
执行:
执行情况,在指定路径下生成指定导出文件a.log
查看该文件内容:
常用JVM参数:
1、若使用报错,请查看 另外一篇博客
Error attaching to process sun.jvm.hotspot.debugger.DebuggerException cannot open binary file
2、官方文档
Jmap官方文档
3、jinfo
Java分析工具——jinfo
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7067.html