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参数,即对垃圾收集器和内存分配的调优,以达到更高的吞吐和性能