本文介绍的调优命令及结果都是针对的: jdk8版本
为了方便示例,本文中 2272 指的是我java项目的进程id,也就是pid
这里要讲的是 java自带一些查看jvm运行状况的命令。 市面上的调优工具,底层都是用的这些命令,把这些命令输出的信息变成可视化效果更好的UI界面。
比如:我这里有个运行的java项目,通过jps命令查看到它的进程Id为2272, 以下我就用pid为2272来举例了。
解释:查看项目的内存、实例数量信息 ,写入到这个 log.txt文件。
我们打开log.txt文件查看内容如下:
当项目运行内存异常的时候, 我们可以通过此命令,查看代码中是哪个类它占用空间异常,从而定位修改。
解释:查看jvm的堆信息 (图中,我在每个结果后 都标记上了中文解释)。
使用该命令,可以知道堆空间的分配、使用情况。 当我们要减少gc优化的时候,查看这些信息是非常关键且必要的。
解释:可以把内存信息 保存成文件xxxx.hprof 。 然后用jvisualvm工具打开.hprof文件,离线查看内存情况了。 就相当于是某一刻的 内存信息的快照一样。
用jvisualvm命令工具 (jvisualvm工具的使用,下面会讲到) 导入.hprof文件后,可以查看实例数、类名、和大小,效果就相当于上面讲到的命令 jmap -histo pid 。
在工作中,如果程序发生OOM,我们希望看到它OOM前的内存信息,就可以分析是什么原因造成的OOM异常。
于是这就用到了内存信息快照的方式,在程序OOM前保存它的快照文件,然后等我们后续再打开文件分析。
我们需要添加两个配置信息,就可以 设置内存溢出自动导出dump文件:
‐XX:+HeapDumpOnOutOfMemoryError ‐XX:HeapDumpPath=D:\jvm.dump
(注意 D:\jvm.dump 是我设置的文件路径。)
解释:查看项目的线程情况 (可以通过该命令查找项目中线程死锁的情况)
解释:查看正在运行的Java应用程序jvm的参数。(我们在调优的时候,查看设置的jvm参数有没有生效,就可以用这个命令)
这个命令最常用,我们可以通过它看gc的执行次数、内存使用,等整体情况。
参数对应的解释:
S0C:第一个幸存区的大小,单位KB
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小(元空间)
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位s
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位s
GCT:垃圾回收消耗总时间,单位s
堆内存统计
参数对应的解释:
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
参数对应的解释:
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
参数对应的解释:
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
参数对应的解释:
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
这是java自带的调优工具
打开cmd => 输入 jvisualvm 命令 就可以打开工具。
在左边栏中 选择自己的java项目,查看内存信息、线程信息、gc信息
visual GC这一栏默认是没有的,需要安装插件。 安装参考:https://blog.csdn.net/shuai825644975/article/details/78970371
Arthas 是Alibaba开源的Java诊断工具,官网地址:https://arthas.aliyun.com/doc/
输入命令下载 arthas-boot.jar
curl -O https://arthas.aliyun.com/arthas-boot.jar
Java -jar arthas-boot.jar
输入dashboard可以查看整个进程的运行情况,线程、内存、GC、运行环境信息
还有很多命令,这里就不再列举,可以查看官方API有详细介绍。https://arthas.aliyun.com/doc/commands.html