jmap使用方法及原理

jmap使用方法及原理

 在这篇文章中:

  • 1. jmap常用命令
    • 1. jmap -heap
    • 2. jmap -histo[:live]
    • 3. jmap -clstas
    • 4. jmap -finalizerinfo
    • 5. jmap -dump:<dump-options>
    • 6. jmap -F
  • 2. 与jvm通信方式attach机制
  • 3. jmap操作所使用的attach机制

1. jmap常用命令

在cmd或者shell窗口输入jmap -h,输出如下结果:

Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

1. jmap -heap

查看java堆的信息以及垃圾回收算法等

可以看到堆的分代情况以及各区域的使用情况,垃圾收集器使用的是Parallel GC与java -XX:+PrintCommandLineFlags -version得到的结果一致:

2. jmap -histo[:live]

打印当前java堆中所有对象的实例数和大小等,加了live选项则只打印存活的对象

3. jmap -clstas

打印class loader的统计信息

4. jmap -finalizerinfo

打印在等待执行finalize方法的对象

5. jmap -dump:<dump-options>

dump-options主要有:

  • live 只dump存活的对象,如果不加则会dump所有对象
  • format=b 表示以二进制格式
  • file=filepath 输出到某个文件中

把java堆中的对象dump到本地文件,然后使用第三方工具进行分析,如MAT,JProfile,IBM的分析工具等

6. jmap -F

与-dump 和-histo一起使用,强制执行后者 jmap -F -dump:live,format=b,file=heap.bin

2. 与jvm通信方式attach机制

attach 就是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给另外一个进程,并让它执行内部的一些操作:

3. jmap操作所使用的attach机制

  • -dump和-histo[:live] 默认使用的是VirtualMachine.attach
  • -pmap 、-heap、-heap:format=b、-clstats、-finalizerinfo、-J默认使用的是SA
  • -F可以把默认使用VirtualMachine.attach的方式改成SA attach方式
10-14
<think>我们被要求解释jmap命令,并按照固定格式输出。 jmap是JDK自带的命令行工具,用于生成Java堆内存快照(heapdump)或查看堆内存中的对象统计信息。 常见用法包括: - 生成堆转储文件(用于分析内存泄漏) - 查看堆内存使用概况 - 查看类的实例数量和占用内存 我们将介绍jmap的基本用法、常用选项以及注意事项,然后按照要求提出3-5个相关问题。 注意:jmap在某些系统(如Windows)和某些JDK版本中可能受到限制,尤其是在使用-dump选项时可能需要开启JMX(添加-XX:+StartAttachListener)或使用相同用户运行。 回答结构: 1. 简要介绍jmap 2. 常用命令选项和示例 3. 注意事项 4. 提出相关问题(3-5个) 最后必须输出“§§相关问题§§”并列出问题。 </think>`jmap` 是 JDK 自带的命令行工具,用于分析 Java 应用程序的堆内存使用情况。以下是核心功能和使用方法--- ### **核心功能** 1. **堆转储生成** ```bash jmap -dump:format=b,file=heapdump.hprof <pid> # 生成二进制堆转储文件 ``` - 用于内存泄漏分析(配合 MAT、VisualVM 等工具) 2. **堆内存摘要** ```bash jmap -heap <pid> # 显示堆配置和使用情况(JDK8及以下) jmap -heap -J-d64 <pid> # JDK9+ 需添加-J-d64参数 ``` 3. **类加载统计** ```bash jmap -histo <pid> # 显示堆中对象数量及大小(按类排序) jmap -histo:live <pid> # 只统计存活对象(触发Full GC) ``` 4. **永久代/元空间监控**(JDK8 vs JDK11+) ```bash jmap -permstat <pid> # JDK8监控永久代(PermGen) jmap -clstats <pid> # JDK11+监控元空间(Metaspace) ``` --- ### **使用示例** ```bash # 1. 查找Java进程ID jps -l # 2. 生成堆转储文件(输出到当前目录) jmap -dump:live,format=b,file=myapp_heap.bin 12345 # 3. 统计对象内存分布(前20行) jmap -histo 12345 | head -n 20 ``` --- ### **注意事项** 1. **生产环境慎用 `-histo:live`** 会触发 Full GC,可能导致服务暂停(停机维护期使用) 2. **权限要求** - Linux 需与 Java 进程相同用户执行 - Windows 需管理员权限 3. **替代工具推荐** - `jcmd <pid> GC.heap_dump`(更安全的堆转储方式) - `jhsdb jmap`(JDK9+ 替代方案) 4. **内存分析工具链** ```mermaid graph LR A[jmap生成堆转储] --> B[MAT/Eclipse Memory Analyzer] A --> C[VisualVM] A --> D[jhat] ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值