jmap 的用途是为了展示java进程的内存映射信息,或者堆内存详情
常用的参数如下:
histo
jmap -histo pid 展示class的内存情况
展示的信息为编号,实例数,字节,类名
例如:
jmap -histo:live 2540 num #instances #bytes class name ---------------------------------------------- 1: 20981 908120 [C 2: 21015 504360 java.lang.String 4: 9999 159984 org.learn.util.User 5: 312 59216 [Ljava.lang.Object;
heap
jmap -heap pid 展示pid的整体堆信息
如:
$ jmap -heap 29030 JVM version is 16.3-b01 using thread-local object allocation. Parallel GC with 13 thread(s) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 8436842496 (8046.0MB) NewSize = 5439488 (5.1875MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 88080384 (84.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 87883776 (83.8125MB) used = 31053080 (29.614524841308594MB) free = 56830696 (54.197975158691406MB) 35.33425782706469% used From Space: capacity = 13828096 (13.1875MB) used = 196608 (0.1875MB) free = 13631488 (13.0MB) 1.4218009478672986% used To Space: capacity = 16384000 (15.625MB) used = 0 (0.0MB) free = 16384000 (15.625MB) 0.0% used PS Old Generation capacity = 156172288 (148.9375MB) used = 27098208 (25.842864990234375MB) free = 129074080 (123.09463500976562MB) 17.35148299805917% used PS Perm Generation capacity = 88080384 (84.0MB) used = 50847592 (48.492042541503906MB) free = 37232792 (35.507957458496094MB) 57.728622073218936% used
对应的说明如下:
Parallel GC with 13 thread(s) #13个gc线程 Heap Configuration:#堆内存初始化配置 MinHeapFreeRatio = 40 #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率 MaxHeapFreeRatio = 70 #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率 MaxHeapSize = 8436842496 (8046.0MB)#-XX:MaxHeapSize=设置JVM堆的最大大小 NewSize = 5439488 (5.1875MB) #-XX:NewSize=设置JVM堆的‘新生代’的默认大小 MaxNewSize = 17592186044415 MB #-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小 OldSize = 5439488 (5.1875MB) #-XX:OldSize=设置JVM堆的‘老生代’的大小 NewRatio = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率 SurvivorRatio = 8 #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值 PermSize = 21757952 (20.75MB) #-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小 MaxPermSize = 88080384 (84.0MB) #-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小 Heap Usage: PS Young Generation Eden Space:#Eden区内存分布 capacity = 87883776 (83.8125MB) used = 31053080 (29.614524841308594MB) free = 56830696 (54.197975158691406MB) 35.33425782706469% used From Space:#其中一个Survivor区的内存分布 capacity = 13828096 (13.1875MB) used = 196608 (0.1875MB) free = 13631488 (13.0MB) 1.4218009478672986% used To Space:#另一个Survivor区的内存分布 capacity = 16384000 (15.625MB) used = 0 (0.0MB) free = 16384000 (15.625MB) 0.0% used PS Old Generation#当前的Old区内存分布 capacity = 156172288 (148.9375MB) used = 27098208 (25.842864990234375MB) free = 129074080 (123.09463500976562MB) 17.35148299805917% used PS Perm Generation#当前的 “永生代” 内存分布 capacity = 88080384 (84.0MB) used = 50847592 (48.492042541503906MB) free = 37232792 (35.507957458496094MB) 57.728622073218936% used
dump
jmap -dump:<dump-options> pid 把pid的整体堆信息输出
dump-options:
live
format=b
file=<file>
导出的文件可以供分析用,比如jhat或者mat,以便查找内存溢出原因
例如:
jmap -dump:live,format=b,file=tomcat.bin 29030
相关推荐
### JVM工具、参数调优与调试技巧 #### 一、JVM工具 ##### 1. jps:虚拟机进程状况工具 - **简介**:`jps` 是一个用于显示当前运行的所有Java虚拟机进程(JVMs)的简单工具。它会列出每个JVM的PID(进程ID)以及...
- 对于远程JVM,可以通过`jmap [option] [server_id@]<remote server IP or hostname>`来连接远程调试服务器。 - 在某些情况下,如安全限制或JVM不支持时,jmap可能无法正常工作。 ### 结论 jmap作为JVM监控和诊断...
最后,`jstat`是一个统计JVM性能的命令行工具,它可以提供类加载、垃圾收集、JVM编译器等统计信息。通过`jstat -gc <pid> <interval> <count>`,我们可以定期获取JVM的垃圾回收状况,这对于优化内存配置和识别潜在的...
JVM监控工具是Java开发者和运维人员不可或缺的工具,通过这些工具可以监控和诊断Java应用程序的性能和资源使用情况。本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack jstack是一款命令行...
《实战JAVA虚拟机 (JVM故障诊断与性能优化)》是一本深度剖析JVM的实践指南,旨在帮助读者掌握JVM的内部工作机制,提升故障排查和性能调优的能力。本书可与周志明的《深入理解JAVA虚拟机》相媲美,提供了丰富的源码...
### 2024年Java面试题:JVM性能调优面试题第二部分 #### 内存模型及分区 在Java虚拟机(JVM)中,内存主要被划分为以下几个区域: 1. **堆区(Heap)**:堆区是用于存储初始化的对象、成员变量等数据的地方。所有对象...
这份指南深入解析了如何诊断和解决与JVM性能、内存管理、线程状态等相关问题,帮助开发者优化应用程序的运行效率和稳定性。以下是该指南可能涵盖的一些关键知识点: 1. **JVM概述**:介绍Java虚拟机的原理和作用,...
为了解决这类问题,Java提供了多种工具来辅助开发者进行诊断和调试,其中jmap就是一种非常实用且强大的命令行工具。 #### jmap简介 jmap是Java Development Kit (JDK) 的一部分,用于收集有关Java虚拟机(JVM)运行...
Jmap命令是JVM调优工具之一,用于查看内存信息。Jmap命令可以生成堆dump文件,用于分析Java应用程序的内存使用情况。例如,使用Jmap命令可以查看实例个数、占用内存大小、类名称等信息。 Jvisualvm是另一个JVM调优...
在Java开发领域,JVM(Java虚拟机)...通过深入理解这些JVM与性能优化的知识点,开发者可以更好地调试和优化Java应用,确保其高效稳定运行。在实际项目中,应结合具体业务场景灵活运用,持续优化,提升系统的整体性能。
这些JVM监控工具提供了全面的洞察力,帮助开发者调试问题、优化性能和理解应用程序的行为。熟悉并掌握它们的使用,是Java开发和运维工作中的重要技能。在实际操作中,应根据具体情况选择合适的工具,以实现高效的...
本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...
2. **jstat(Java Virtual Machine Statistics Monitoring tool)**:提供对JVM各种运行时统计数据的实时监控,包括垃圾收集器状态、类装载情况、JVM内存使用等,帮助开发者评估JVM性能。 3. **jinfo...
同时,掌握JVM的调试工具,如jstack、jmap、jhat等,可以帮助我们在开发过程中进行问题排查。 总的来说,《JVM笔记(阳哥)》是一份全面、实用的参考资料,无论是初级开发者还是经验丰富的工程师,都能从中获益。...
这在调试过程中非常有用,特别是当你需要调整 JVM 的运行时配置而无需重启应用时。例如,可以使用 jinfo 来动态更改 JVM 的 GC 日志输出或调整堆内存大小。 #### jstack:线程堆栈跟踪 jstack 用于获取 Java 进程...
7. 调试与诊断:了解JVM内部工作原理,有助于进行问题定位和性能调优。例如,使用JStack查看线程堆栈信息,JMap分析内存分配,Jhat进行堆转储分析等。 8. 其他高级特性:JVM还涉及模块系统、反射、动态类型语言支持...
5. 性能优化:JVM性能优化是保证Java应用高效运行的关键。书中将探讨如何通过JVM参数调整、监控和分析工具使用来优化内存使用、减少垃圾回收开销等。 6. 故障诊断:在Java应用出现问题时,JVM提供了丰富的工具和...
3. **性能监控**:`jstat`用于监控JVM的运行时统计信息,`jmap`获取堆内存详细信息或生成堆转储文件,`jhat`分析堆转储文件,`jconsole`和`jvisualvm`提供图形界面进行性能监控和诊断。 4. **JVM诊断**:`jinfo`...