微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

JVM调优其实就是通过调节JVM参数,即对垃圾收集器和内存分配的调优,以达到更高的吞吐和性能

java aide_941 4℃ 0评论

JVM调优其实就是通过调节JVM参数,即对垃圾收集器和内存分配的调优,以达到更高的吞吐和性能

jvm调优其实就是对Young和Old代的次数与时间调优

最近在做埋点监控,做到jvm这一块。刚好可以理一下思路:

看过很多jvm理论的文章,总觉得讲得太复杂了,但用来也就那么几个参数。so ,化繁为简,只记我要用的。

1.为什么会OOM溢出,是持久代满了。

2.堆与栈(非堆no-heap)区别,堆主要用于存储new 信息,栈用于线程开销,通过jstat pid 100s 查看栈的一般都是水平的趋势。

3.堆又分eden ,survivor区,由eden向survivor copy.常常说的调优,主要是对针gc 次数,时间,而这一块主要集中在Yong代,而设置的-xmx(最大),-xms(最小)的大小又与gc 的频率与次数有关。

4.gc回收机制常用的有五种,可以组合使用

5.jvm 不复杂,设置内存最大小值,线程数据,持久代数据,真正考验功力的是根据不同的使用场景选用合适的gc回收机机制,合理设置内存,线程,持久代数据

 

1、JVM参数
标准参数:java -version就是标准参数
-X参数:java -Xint -version将显示变为解释执行
-XX参数:-XX:[+/-],意思是开启或关闭,如-XX+UseG1GC。-XX:<name>=<value> ,如-XX:InitialHeapSize=100M
其他参数:-Xms100M就等同于:XX:InitialHeapSize=100M
2、JVM命令
jps:当前的java进程,输入jps可查看所有java进程,jps -l可查看详情
jinfo:查看某个java进程目前的参数设置情况,jinfo -flags 进程ID查看全部参数情况,jinfo -flag 参数名 进程ID查看指定参数情况
jstat:对java进程统计性能,如jstat -gc 进程ID 1000 10 打印某进程的GC情况,1000毫秒打印一次,一共打印10次。

单位是KB.

jstat -gc 1000 10

jstat -gccapacity PID

jstat -gcnewcapacity pid  新生代内存同级

jstack:查看java进程的堆栈信息,jstack 进程ID
jmap:打印出堆转存储快照 jmap -heap 进程ID,进行内存溢出排查
dump出堆内存相关信息:jmap -dump:format=b,file=heap.hprof 进程ID
3、常用工具
jconsole:在cmd中输入jconsole可以开启这个工具,非常实用。
jvisualvm:在cmd中输入jvisualvm可以开启这个工具,非常实用。
arthas:阿里的工具
mat/perfma:查看内存相关信息的工具
gceasy.io/gcviewer:垃圾回收监控工具
————————————————
版权声明:本文为CSDN博主「烟锁迷城」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiayibingdong/article/details/119222470

 

 

一,介绍

日常JAVA开发过程中,jvm内存是每个程序员避免不了打交道。

本地debug或者winds都可以用jconsole图形化查看。

 

 

 

二,docker容器中

随着docker越来越受欢迎,测试和生产环境使用越来愈多 ,进入容器发现jconsole就不太适用了,这个时候就可以通过jstat看GC情况

1,进入docker

进入方式很多,像楼主公司容器平台直接提供入口

2,查询jar包运行的pid

jps

3,比如楼主用的deployment.jar,线程是113

可以使用jstat -gc 113

三,参数

1,jstat -gc 113   垃圾回收统计

复制代码
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
复制代码

2,jstat -gccapacity 113  堆内存统计

复制代码
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
复制代码

3,jstat -gcnew 113     新生代垃圾回收统计

复制代码
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
复制代码

4,jstat -gcnewcapacity 113   新生代内存统计

复制代码
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
复制代码

5,jstat -gcold 113   老年代垃圾回收统计

复制代码
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
复制代码

6,jstat -gcoldcapacity 113  老年代内存统计

复制代码
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
复制代码

7,jstat -gcutil 113   总的垃圾回收统计

复制代码
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
复制代码

 

 

转载请注明:SuperIT » JVM调优其实就是通过调节JVM参数,即对垃圾收集器和内存分配的调优,以达到更高的吞吐和性能

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!