jmap是JDK自带的监控工具,在JDK的根目录中可以找到。主要用来查看Java进程对内存的使用情况
1、查看类列表,包含实例数、占用内存大小
# pid 是进程ID jmap -histo:live pid
按照占用空间的大小打印程序中类的列表,可以分析哪些类占用了比较多的内存,再结合代码找到问题的所在
2、查看动态链接库的列表
jmap pid
Java进程本身和动态链接库都会在其占用的虚拟地址空间上分配内存。Java的堆和栈等内存空间分配在Java进程中,Java的直接内存会分配在Java进程堆内存外或者依赖的动态链接库上。此命令可以帮助定位Java进程占用内存较大或者底层动态链接库占用内存较大的问题,在定位Java进程导致的内存泄露场景中有很重要的作用。
3、查看Java堆的概要信息
jmap -heap pid
Java堆内存结构复杂,包括新生代、老年代、持久代、直接内存等。
包含以下信息:
- 被指定的垃圾回收算法的信息,包括垃圾回收算法的名称和垃圾回收算法的详细信息。
- 堆的配置信息,可能是由命令行选项指定,或者由Java虚拟机根据服务器配置选择的。
- 堆的内存空间使用信息,包括分代情况,每个代的总容量、已使用内存、可使用内存。如果某一代被继续细分(例如,年轻代),则包含细分的空间的内存使用信息。
有些Java内存问题不是显而易见的,从类、动态链接库、堆的概要信息的角度无法定位具体产生的原因,我们需要对Java堆的内部结构进行剖析才能进一步分析产生问题的根本原因。
生成快照后,通过其它工具甚至可视化内存分析工具等进行详细分析(JHAT、JMAT、JProfiler、JConsole、JVisualVM)
jmap -dump:[live,]format=b,file=./heap.hprof pid
live
参数是可选的,如果指定,则只转储堆中的活动对象;如果没有指定,则转储堆中的所有对象。format=b
表示以hprof二进制格式转储Java堆的内存。file=<filename>
用于指定快照dump文件的文件名。
标签:Java,pid,转储,内存,动态链接库,jmap From: https://www.cnblogs.com/shog808/p/17035280.html