【JVM内存管理专题】——JVM运维工具

JVM运维——基本场景

java.lang.OutOfMemoryError: Java heap space
------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。
java.lang.OutOfMemoryError: PermGen space
------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。
java.lang.StackOverflowError ------> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

JVM 运维——基础指令

JPS(JVM线程信息工具)
jps主要用来输出JVM中运行的进程状态信息。语法格式如下:
jps 查看全部jvm进程的全部信息
jps -q 查看全部jvm进程的pid
jps -m 查看全部jvm进程的传入main方法的参数
jps -l 查看全部jvm进程的main类或jar的全限名
jps -v 查看全部jvm进程的jvm参数 jps [hostid]
在这里插入图片描述

Linux查看进程内的线程
top -H -p 14338
ps -T -p 14338
在这里插入图片描述

JVM 运维——jstack线程定位工具

jstack(JVM线程定位工具)
(1)利用jps 找出进程id
(2)利用top找出线程id(top -H -p 14338),并用printf “%x\n” 14341,输出线程id的十六进制(23123是线程id的例子)
(3)jstack 14341 | grep 3805(左边是进程,右边是线程)
-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

JVM 运维——jmap堆详情工具

Jmap(JVM堆详情工具)
jmap用来查看堆内存使用状况,一般结合jhat使用。
(1)查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况
jmap -heap 14338
在这里插入图片描述
(2)查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -histo:live 14338
jmap -histo:live 14338 | grep sum (根据类名找大小)
在这里插入图片描述
(3) dump文件下来 dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看
jmap -dump:format=b,file=dump01.hprof 14338
(4) 其他
jmap 14338(查看内存映射信息)
jmap -clstats 14338(查看类加载器信息)
在这里插入图片描述
jmap -finalizerinfo 14338(查看即将要被回收的对象)

JVM 运维——jstat统计检测工具

jstat(JVM统计监测工具)
jstat [选项 pid 采样间隔 采样数量]
jstat [ Option vmid [interval[s|ms] [count]] ]
jstat -gc 21711 250 4
类加载统计 jstat -class 14338
------------------------Loaded:加载class的数量
------------------------Bytes:所占用空间大小
------------------------Unloaded:未加载数量
------------------------Bytes:未加载占用空间
------------------------Time:时间
编译统计 jstat -compiler 19570
------------------------Compiled:编译数量。
------------------------Failed:失败数量
------------------------Invalid:不可用数量
------------------------Time:时间
------------------------FailedType:失败类型
------------------------FailedMethod:失败的方法
垃圾回收统计 jstat -gc 19570
------------------------S0C:第一个幸存区的大小
------------------------S1C:第二个幸存区的大小
------------------------S0U:第一个幸存区的使用大小
------------------------S1U:第二个幸存区的使用大小
------------------------EC:伊甸园区的大小
------------------------EU:伊甸园区的使用大小
------------------------OC:老年代大小
------------------------OU:老年代使用大小
------------------------MC:方法区大小
------------------------MU:方法区使用大小
------------------------CCSC:压缩类空间大小
------------------------CCSU:压缩类空间使用大小
------------------------YGC:年轻代垃圾回收次数
------------------------YGCT:年轻代垃圾回收消耗时间
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
堆内存统计 jstat -gccapacity 19570
------------------------NGCMN:新生代最小容量
------------------------NGCMX:新生代最大容量
------------------------NGC:当前新生代容量
------------------------S0C:第一个幸存区大小
------------------------S1C:第二个幸存区的大小
------------------------EC:伊甸园区的大小
------------------------OGCMN:老年代最小容量
------------------------OGCMX:老年代最大容量
------------------------OGC:当前老年代大小
------------------------OC:当前老年代大小
------------------------MCMN:最小元数据容量
------------------------MCMX:最大元数据容量
------------------------MC:当前元数据空间大小
------------------------CCSMN:最小压缩类空间大小
------------------------CCSMX:最大压缩类空间大小
------------------------CCSC:当前压缩类空间大小
------------------------YGC:年轻代gc次数
------------------------FGC:老年代GC次数
新生代垃圾回收统计 jstat -gcnew 19570
------------------------S0C:第一个幸存区大小
------------------------S1C:第二个幸存区的大小
------------------------S0U:第一个幸存区的使用大小
------------------------S1U:第二个幸存区的使用大小
------------------------TT:对象在新生代存活的次数
------------------------MTT:对象在新生代存活的最大次数
------------------------DSS:期望的幸存区大小
------------------------EC:伊甸园区的大小
------------------------EU:伊甸园区的使用大小
------------------------YGC:年轻代垃圾回收次数
------------------------YGCT:年轻代垃圾回收消耗时间
新生代内存统计 jstat -gcnewcapacity 19570
------------------------NGCMN:新生代最小容量
------------------------NGCMX:新生代最大容量
------------------------NGC:当前新生代容量
------------------------S0CMX:最大幸存1区大小
------------------------S0C:当前幸存1区大小
------------------------S1CMX:最大幸存2区大小
------------------------S1C:当前幸存2区大小
------------------------ECMX:最大伊甸园区大小
------------------------EC:当前伊甸园区大小
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代回收次数
------------------------老年代垃圾回收统计 jstat -gcold 19570
------------------------MC:方法区大小
------------------------MU:方法区使用大小
------------------------CCSC:压缩类空间大小
------------------------CCSU:压缩类空间使用大小
------------------------OC:老年代大小
------------------------OU:老年代使用大小
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
老年代内存统计 jstat -gcoldcapacity 19570
------------------------OGCMN:老年代最小容量
------------------------OGCMX:老年代最大容量
------------------------OGC:当前老年代大小
------------------------OC:老年代大小
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
永久代空间统计(JDK7) jstat -gcpermcapacity 19570
------------------------PGCMN:最小永久代容量
------------------------PGCMX:最大永久代容量
------------------------PGC:当前新生成的永久代空间大小
------------------------PC :永久代空间大小
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
元数据空间统计(JDK8) jstat -gcmetacapacity 7172
------------------------MCMN:最小元数据容量
------------------------MCMX:最大元数据容量
------------------------MC:当前元数据空间大小
------------------------CCSMN:最小压缩类空间大小
------------------------CCSMX:最大压缩类空间大小
------------------------CCSC:当前压缩类空间大小
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
总结垃圾回收统计 jstat -gcutil 19570
------------------------S0:幸存1区当前使用比例
------------------------S1:幸存2区当前使用比例
------------------------E:伊甸园区使用比例
------------------------O:老年代使用比例
------------------------M:元数据区使用比例
------------------------CCS:压缩使用比例
------------------------YGC:年轻代垃圾回收次数
------------------------FGC:老年代垃圾回收次数
------------------------FGCT:老年代垃圾回收消耗时间
------------------------GCT:垃圾回收消耗总时间
JVM编译方法统计 jstat -printcompilation 19570
------------------------Compiled:最近编译方法的数量
------------------------Size:最近编译方法的字节码数量
------------------------Type:最近编译方法的编译类型。
------------------------Method:方法名标识。

GodSchool
致力于简洁的知识工程,输出高质量的知识产出,我们一起努力
博主私人微信:supperlzf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值