zoukankan      html  css  js  c++  java
  • Java内存分析工具jmap

    1.简述

      jmap是一个多功能的命令,它可以生成java程序的dump文件,也可以查看堆内对象示例的统计信息、查看ClassLoader的信息以及finalizer队列。

    2.jmap的用法

    (1)jmap参数说明

      参数说明:

    • option:选项参数。
    • pid:需要打印配置信息的进程ID。
    • executable:产生核心dump的Java可执行文件。
    • core:需要打印配置信息的核心文件。
    • server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
    • remote server IP or hostname:远程调试服务器的IP地址或主机名。

      option选项参数说明:

    • no option:查看进程的内存映像信息。
    • heap:显示Java堆详细信息。
    • histo[:live]:显示堆中对象的统计信息。
    • permstat:打印类加载器信息。
    • finalizerinfo:显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。
    • dump:<dump-options>:生成堆转储快照。
    • F:当-dump没有响应时,使用-dump或者-histo参数,在这个模式下,live子参数无效。
    • help:打印帮助信息。
    • J<flag>:指定传递给运行jmap的JVM的参数。

    (2)no option示例

      命令:jmap pid

      描述:使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。这与Solaris的pmap工具比较相似。

    (3)heap示例

      命令:jmap -heap pid

      描述:打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息。

    C:UsersAdministrator>jmap -heap 1760
    Attaching to process ID 1760, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 24.80-b11
    
    using thread-local object allocation.                #新生代采用的是并行线程处理方式
    Parallel GC with 4 thread(s)                        #同步并行垃圾回收
    
    Heap Configuration:                                    #堆配置情况,也就是JVM参数配置的结果【平常说的tomcat配置JVM参数,就是在配置这些】
       MinHeapFreeRatio = 0                                #最小堆使用比例
       MaxHeapFreeRatio = 100                            #最大堆可用比例
       MaxHeapSize      = 2147483648 (2048.0MB)            #最大堆空间大小
       NewSize          = 1310720 (1.25MB)                #新生代分配大小
       MaxNewSize       = 536870912 (512.0MB)            #最大可新生代分配大小
       OldSize          = 5439488 (5.1875MB)            #老年代大小
       NewRatio         = 2                                #新生代比例
       SurvivorRatio    = 8                                #新生代与suvivor的比例
       PermSize         = 21757952 (20.75MB)            #perm区 永久代大小
       MaxPermSize      = 2147483648 (2048.0MB)            #最大可分配perm区 也就是永久代大小
       G1HeapRegionSize = 0 (0.0MB)                        
    
    Heap Usage:                                            #堆使用情况【堆内存实际的使用情况】
    PS Young Generation
    Eden Space:                                            #伊甸区
       capacity = 413663232 (394.5MB)                    #伊甸区容量
       used     = 41933104 (39.99052429199219MB)        #伊甸区已经使用大小
       free     = 371730128 (354.5094757080078MB)        #剩余容量
       10.137015029655814% used                            #伊甸区使用情况
    From Space:                                            #survior1区
       capacity = 58195968 (55.5MB)                        #survior1区容量
       used     = 0 (0.0MB)                                #surviror1区已使用情况
       free     = 58195968 (55.5MB)                        #surviror1区剩余容量
       0.0% used                                        #survior1区使用比例
    To Space:                                            #survior2区
       capacity = 56623104 (54.0MB)                        #survior2区容量
       used     = 0 (0.0MB)                                #survior2区已使用情况
       free     = 56623104 (54.0MB)                        #survior2区剩余容量
       0.0% used                                        #survior2区使用比例
    PS Old Generation                                    #老年代使用情况
       capacity = 458227712 (437.0MB)                    #老年代容量
       used     = 243170504 (231.90546417236328MB)        #老年代已使用容量
       free     = 215057208 (205.09453582763672MB)        #老年代剩余容量
       53.0676119387559% used                            #老年代使用比例
    PS Perm Generation                                    #永久代使用情况
       capacity = 176685056 (168.5MB)                    #perm区容量
       used     = 92300856 (88.02495574951172MB)        #perm区已使用容量
       free     = 84384200 (80.47504425048828MB)        #perm区剩余容量
       52.240329821668674% used                            #perm区使用比例
    
    62625 interned Strings occupying 7287440 bytes.
    View Code

    (4)histo[:live]示例

      命令:jmap -histo:live pid

      描述:包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个'*'前缀。如果指定了live子选项,则只计算活动的对象。

    (5)permstat示例

      命令:jmap -permstat pid

      描述:打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

      注意:该命令会造成tomcat进程挂起。

    (6)finalizerinfo示例

      命令:jmap -finalizerinfo pid

      描述:打印等待终结的对象信息。

      Number of objects pending for finalization: 0,说明当前F-QUEUE队列中并没有等待Fializer线程执行final。

    (7)dump:<dump-options>示例

      dump-options主要有:

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

      命令:jmap -dump:live,format=b,file=文件名.txt Pid

    (8)F示例

      与-dump 和-histo一起使用,强制执行后者jmap -F -dump:live,format=b,file=文件名称.txt Pid

    (9)help示例

      打印辅助信息。

    (10)J<flag>示例

      传递参数给jmap启动的jvm。

  • 相关阅读:
    bzoj-2748 2748: [HAOI2012]音量调节(dp)
    bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
    bzoj-3444 3444: 最后的晚餐(组合数学)
    codeforces 709E E. Centroids(树形dp)
    codeforces 709D D. Recover the String(构造)
    codeforces 709C C. Letters Cyclic Shift(贪心)
    codeforces 709B B. Checkpoints(水题)
    codeforces 709A A. Juicer(水题)
    Repeat Number
    hdu 1003 Max Sum (动态规划)
  • 原文地址:https://www.cnblogs.com/bl123/p/14693663.html
Copyright © 2011-2022 走看看