JVM工具使用(jstat + jmap)

编程入门 行业动态 更新时间:2024-10-19 14:29:32

JVM<a href=https://www.elefans.com/category/jswz/34/1770073.html style=工具使用(jstat + jmap)"/>

JVM工具使用(jstat + jmap)

命令格式

jstat -gcutil pid interval(ms)

举例:

jstat -gcutil  16361 1000

线上服务器的GC情况如下:

参数说明如下:

  • S0: 新生代中Survivor space 0区已使用空间的百分比
  • S1: 新生代中Survivor space 1区已使用空间的百分比
  • E: 新生代已使用空间的百分比
  • O: 老年代已使用空间的百分比
  • P: 永久带已使用空间的百分比

  • YGC: 从应用程序启动到当前,发生Yang GC 的次数
  • YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
  • FGC: 从应用程序启动到当前,发生Full GC的次数
  • FGCT: 从应用程序启动到当前,Full GC所用的时间
  • GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

参考:


jmap

jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

命令格式

jamp -heap pid:查看java堆使用情况

jmap -histo pid:查看堆内存中的对象数量,大小

jmap -finalizerinfo pid:打印正在等候回收的对象信息

jmap -heap 15结果
Attaching to process ID 15, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.262-b10using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式
using thread-local object allocation.
Concurrent Mark-Sweep GC  ##同步并行垃圾回收Heap Configuration:  ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]MinHeapFreeRatio         = 40  ##最小堆使用比例MaxHeapFreeRatio         = 70  ##最大堆可用比例MaxHeapSize              = 536870912 (512.0MB)  ##最大堆空间大小NewSize                  = 268435456 (256.0MB)  ##新生代分配大小MaxNewSize               = 268435456 (256.0MB)  ##最大可新生代分配大小OldSize                  = 268435456 (256.0MB)  ##老年代大小NewRatio                 = 2  ##新生代比例SurvivorRatio            = 8  ##新生代与suvivor的比例MetaspaceSize            = 21807104 (20.796875MB)  ##元空间大小 元空间本质跟永久代类似,元空间与永久代最大的区别在于:元空间并不在虚拟机中,而是使用本机内存,因此,元空间大小仅受本地内存限制CompressedClassSpaceSize = 1073741824 (1024.0MB)  MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)Heap Usage:  ##堆使用情况【堆内存实际的使用情况】
New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)capacity = 241631232 (230.4375MB)  ##伊甸区容量used     = 191127136 (182.27304077148438MB)  ##已经使用大小free     = 50504096 (48.164459228515625MB)  ##剩余容量79.09868869931516% used  ##使用比例
Eden Space:  ##伊甸区capacity = 214827008 (204.875MB)used     = 170204912 (162.32005310058594MB)free     = 44622096 (42.55494689941406MB)79.22882396611882% used
From Space:  ##survior1区capacity = 26804224 (25.5625MB)used     = 20922224 (19.952987670898438MB)free     = 5882000 (5.6095123291015625MB)78.05569749006723% used
To Space:  ##survior2 区capacity = 26804224 (25.5625MB)used     = 0 (0.0MB)free     = 26804224 (25.5625MB)0.0% used
concurrent mark-sweep generation:  ##老年代使用情况capacity = 268435456 (256.0MB)used     = 146936152 (140.12923431396484MB)free     = 121499304 (115.87076568603516MB)54.73798215389252% used36399 interned Strings occupying 4146712 bytes.

histo的参数说明:instances(实例数)、bytes(大小)、classs name(类名)。它基本是按照使用使用大小逆序排列的

jmap -histo:live 15num     #instances         #bytes  class name
----------------------------------------------1:         11717       55996520  [Ljava.util.HashMap$Node;2:        142072       17500168  [C3:         20197       16779088  [B4:        141493        3395832  java.lang.String5:        104965        3358880  java.util.concurrent.ConcurrentHashMap$Node6:         50269        2495760  [Ljava.lang.Object;7:         51898        2491104  java.util.HashMap8:         20599        2270160  java.lang.Class9:         24224        2131712  java.lang.reflect.Method10:         12309        1717872  [I11:         52769        1266456  java.util.ArrayList12:         29598        1183920  java.util.LinkedHashMap$Entry13:           434         987264  [Ljava.util.concurrent.ConcurrentHashMap$Node;14:         51193         819088  java.lang.Object
...
Total       1189759      129611872
#instance 是对象的实例个数 
#bytes 是总占用的字节数 
#class name 对应的就是 Class 文件里的 class 的标识 
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示

注意:

(1)jmap -histo命令 只知道某个class name占用了那么大的内存,但不知道由什么对象创建的。下一步需要将其他dump出来,使用内存分析工具进一步明确它是由谁引用的、由什么对象。

(2)jmap -histo:live 这个命令执行,JVM会先触发gc,然后再统计信息

  • -F 强迫.在pid没有响应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
  • -h | -help 打印辅助信息
  • -J 传递参数给jmap启动的jvm.

参考:

【JVM】jmap命令详解_jvm jmap_多么温暖的阳光啊的博客-CSDN博客

更多推荐

JVM工具使用(jstat + jmap)

本文发布于:2023-12-03 23:37:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1659023.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工具   JVM   jmap   jstat

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!