JDK性能分析工具使用命令记录

艺帆风顺 发布于 2025-04-03 24 次阅读


jstat

jstat可以查看堆内各个部分的使用量,以及加载类的数量

jstat -options可以列出当前JVM版本支持的选项,常见的有:

  • class(类加载器)
  • compiler
  • gc(GC堆状态)
  • gccapacity(各区大小)
  • gccause(最近一次GC统计和原因)
  • gcmetacapacity(方法去大小)
  • gcnew(新区统计)
  • gcnewcapacity(新区大小)
  • gcold(老区统计)
  • gcoldcapacity(老区大小)
  • gcutil(GC统计汇总)
  • printcompilation(HotSpot编译统计)

jstat -class

显示加载class的数量,以及所占空间等信息。

  1. 显示列名    具体描述
  2. Loaded        装载的类的数量
  3. Bytes        装载类所占用的字节数
  4. Unloaded    卸载的类的数量
  5. Bytes        卸载类的字节数
  6. Time        装载和卸载类所花费的时间
  7. jstat -class 17484
  1. Loaded  Bytes  Unloaded  Bytes     Time
  2.    949  1799.7        0     0.0       0.75

jstat -gc

显示gc的信息,查看gc的次数及时间

  1. 显示列名    具体描述
  2. S0C            年轻代中第一个survivor(幸存区)的容量 (字节)
  3. S1C            年轻代中第二个survivor(幸存区)的容量 (字节)
  4. S0U            年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  5. S1U            年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  6. EC            年轻代中Eden(伊甸园)的容量 (字节)
  7. EU            年轻代中Eden(伊甸园)目前已使用空间 (字节)
  8. OC            Old代的容量 (字节)
  9. OU            Old代目前已使用空间 (字节)
  10. MC            MetaSpace(持久代)的容量 (字节)
  11. MU            MetaSpace(持久代)目前已使用空间 (字节)
  12. YGC            从应用程序启动到采样时年轻代中gc次数
  13. YGCT        从应用程序启动到采样时年轻代中gc所用时间(s)
  14. FGC            从应用程序启动到采样时old代(全gc)gc次数
  15. FGCT        从应用程序启动到采样时old代(全gc)gc所用时间(s)
  16. GCT            从应用程序启动到采样时gc用的总时间(s)
  1.  S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
  2. 5120.0 5120.0  0.0    0.0   32768.0  13136.0   86016.0      0.0     4480.0 775.8  384.0   76.4       0    0.000   0      0.000    0.000

jstat -gccapacity

显示VM内存中三代(young,old,metaspace)对象的使用和占用大小

  1. 显示列名    具体描述
  2. NGCMN        年轻代(young)中初始化(最小)的大小(字节)
  3. NGCMX         年轻代(young)的最大容量 (字节)
  4. NGC         年轻代(young)中当前的容量 (字节)
  5. S0C           年轻代中第一个survivor(幸存区)的容量 (字节)
  6. S1C           年轻代中第二个survivor(幸存区)的容量 (字节)
  7. EC          年轻代中Eden(伊甸园)的容量 (字节)
  8. OGCMN          old代中初始化(最小)的大小 (字节)
  9. OGCMX       old代的最大容量(字节)
  10. OGC            old代当前新生成的容量 (字节)
  11. OC          Old代的容量 (字节)
  12. PGCMN        perm代中初始化(最小)的大小 (字节)
  13. PGCMX         perm代的最大容量 (字节)  
  14. PGC           perm代当前新生成的容量 (字节)
  15. PC             Perm(持久代)的容量 (字节)
  16. YGC            从应用程序启动到采样时年轻代中gc次数
  17. FGC            从应用程序启动到采样时old代(全gc)gc次数

jstat -gcutil

统计gc信息

  1. S0         年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
  2. S1         年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
  3. E          年轻代中Eden(伊甸园)已使用的占当前容量百分比
  4. O          old代已使用的占当前容量百分比
  5. M         方法区已使用的占当前容量百分比
  6. YGC     从应用程序启动到采样时年轻代中gc次数
  7. YGCT    从应用程序启动到采样时年轻代中gc所用时间(s)
  8. FGC        从应用程序启动到采样时old代(全gc)gc次数
  9. FGCT    从应用程序启动到采样时old代(全gc)gc所用时间(s)
  10. GCT        从应用程序启动到采样时gc用的总时间(s)
  1. jstat -gcutil 17484
  2.   S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  3.   0.00   0.00  40.09   0.00  17.32  19.90      0    0.000     0    0.000    0.000

jstat -gcnew

年轻代对象的信息

  1. S0C        年轻代中第一个survivor(幸存区)的容量 (字节)
  2. S1C        年轻代中第二个survivor(幸存区)的容量 (字节)
  3. S0U        年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  4. S1U       年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  5. TT        持有次数限制
  6. MTT      最大持有次数限制
  7. EC      年轻代中Eden(伊甸园)的容量 (字节)
  8. EU         年轻代中Eden(伊甸园)目前已使用空间 (字节)
  9. YGC        从应用程序启动到采样时年轻代中gc次数
  10. YGCT    从应用程序启动到采样时年轻代中gc所用时间(s)
  1. jstat -gcnew 17484
  2.  S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
  3. 5120.0 5120.0    0.0    0.0 15  15    0.0  32768.0  13136.0      0    0.000

jstat -gcold

老年代对象的信息

  1. MC           方法区(持久代)的容量 (字节)
  2. MU            方法区(持久代)目前已使用空间 (字节)
  3. OC          Old代的容量 (字节)
  4. OU           Old代目前已使用空间 (字节)
  5. YGC            从应用程序启动到采样时年轻代中gc次数
  6. FGC            从应用程序启动到采样时old代(全gc)gc次数
  7. FGCT         从应用程序启动到采样时old代(全gc)gc所用时间(s)
  8. GCT            从应用程序启动到采样时gc用的总时间(s)
  1. jstat -gcold 17484
  2.    MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
  3.   4480.0    775.8    384.0     76.4     86016.0         0.0      0     0    0.000    0.000

jmap

jmap可以输出所有内存中的对象基本参数

  1. -dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件中,假如指定live选项,那么只输出活的对象到文件。
  2. -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。
  1. jmap -heap 17484
  2. Attaching to process ID 17484, please wait...
  3. Debugger attached successfully.
  4. Server compiler detected.
  5. JVM version is 25.201-b09
  6. using thread-local object allocation.
  7. Parallel GC with 8 thread(s)  #GC名称
  8. Heap Configuration: #堆配置情况
  9.    MinHeapFreeRatio         = 0                         #最小堆使用比例
  10.    MaxHeapFreeRatio         = 100                       #最大堆可用比例
  11.    MaxHeapSize              = 2111832064 (2014.0MB)     #最大堆空间大小
  12.    NewSize                  = 44040192 (42.0MB)         #新生代分配大小
  13.    MaxNewSize               = 703594496 (671.0MB)       #新生代最大分配大小
  14.    OldSize                  = 88080384 (84.0MB)         #老年代大小
  15.    NewRatio                 = 2                         #新生代比例
  16.    SurvivorRatio            = 8                         #新生代与survivor比例
  17.    MetaspaceSize            = 21807104 (20.796875MB)    #方法区大小
  18.    CompressedClassSpaceSize = 1073741824 (1024.0MB)     
  19.    MaxMetaspaceSize         = 17592186044415 MB
  20.    G1HeapRegionSize         = 0 (0.0MB)
  21. Heap Usage: #堆使用情况
  22. PS Young Generation #新生代
  23. Eden Space: #Eden区
  24.    capacity = 33554432 (32.0MB) #容量
  25.    used     = 13451272 (12.828132629394531MB) #使用大小
  26.    free     = 20103160 (19.17186737060547MB) #剩余
  27.    40.08791446685791% used #使用比例
  28. From Space:
  29.    capacity = 5242880 (5.0MB)
  30.    used     = 0 (0.0MB)
  31.    free     = 5242880 (5.0MB)
  32.    0.0% used
  33. To Space:
  34.    capacity = 5242880 (5.0MB)
  35.    used     = 0 (0.0MB)
  36.    free     = 5242880 (5.0MB)
  37.    0.0% used
  38. PS Old Generation
  39.    capacity = 88080384 (84.0MB)
  40.    used     = 0 (0.0MB)
  41.    free     = 88080384 (84.0MB)
  42.    0.0% used
  43. 3876 interned Strings occupying 318128 bytes.

-histio[:live] 打印每个class的实例数目,内存占用,类全名信息。VM内部类名字开头会加上*