美文网首页
JVM优化实验过程

JVM优化实验过程

作者: TZX_0710 | 来源:发表于2021-05-27 13:57 被阅读0次

关于JVM默认的一些初始化分配空间的默认值

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4;默认空余堆内存小于40%;JVM就会增大堆知道-Xmx的最大限制;空余堆内存大于70%;JVM会减少直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免每次GC后调整堆大小。

1.windows 优化 Full GC (Metadata GC Threshold)
项目启动前日志查看 可以清晰看到FullGC的频率较高 日志提示metaSpace多次回收
在未配置metaspace的空间大小的时候 在jdk8中,MetaSpace有一个默认值 为21M。从下方日志可以看出 metaspace超出了默认值范围
采用解决方案 启动的时候 设置metaspace的默认空间大小-Xmx 1024M windows环境优化如下

Java HotSpot(TM) 64-Bit Server VM (25.211-b12) for windows-amd64 JRE (1.8.0_211-b12), built on Apr  1 2019 20:53:26 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16501888k(6190452k free), swap 20696192k(4734164k free)
CommandLine flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:InitialHeapSize=264030208 -XX:+ManagementServer -XX:MaxHeapSize=4224483328 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
1.294: [GC (Allocation Failure) [PSYoungGen: 64512K->7330K(75264K)] 64512K->7346K(247296K), 0.0185051 secs] [Times: user=0.11 sys=0.05, real=0.02 secs] 
1.462: [GC (Allocation Failure) [PSYoungGen: 71842K->7089K(75264K)] 71858K->7177K(247296K), 0.0041509 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.621: [GC (GCLocker Initiated GC) [PSYoungGen: 69375K->10733K(75264K)] 69463K->11352K(247296K), 0.0059051 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
1.638: [GC (Metadata GC Threshold) [PSYoungGen: 15589K->9155K(139776K)] 16208K->9781K(311808K), 0.0049832 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
1.644: [Full GC (Metadata GC Threshold) [PSYoungGen: 9155K->0K(139776K)] [ParOldGen: 626K->8942K(82944K)] 9781K->8942K(222720K), [Metaspace: 20876K->20876K(1069056K)], 0.0230171 secs] [Times: user=0.23 sys=0.02, real=0.02 secs] 
2.148: [GC (Allocation Failure) [PSYoungGen: 129024K->10725K(139776K)] 137966K->21066K(222720K), 0.0063581 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2.486: [GC (Allocation Failure) [PSYoungGen: 139749K->13311K(244224K)] 150090K->31965K(327168K), 0.0094468 secs] [Times: user=0.16 sys=0.00, real=0.01 secs] 
3.291: [GC (Metadata GC Threshold) [PSYoungGen: 234186K->19427K(250368K)] 252840K->42948K(333312K), 0.0105480 secs] [Times: user=0.00 sys=0.02, real=0.01 secs] 
3.302: [Full GC (Metadata GC Threshold) [PSYoungGen: 19427K->0K(250368K)] [ParOldGen: 23521K->37586K(141312K)] 42948K->37586K(391680K), [Metaspace: 34800K->34800K(1081344K)], 0.0528169 secs] [Times: user=0.31 sys=0.00, real=0.05 secs] 
4.491: [GC (Allocation Failure) [PSYoungGen: 230912K->10463K(385536K)] 268498K->48057K(526848K), 0.0063150 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
4.915: [GC (Allocation Failure) [PSYoungGen: 385247K->12101K(422400K)] 422841K->49704K(563712K), 0.0055320 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
5.283: [GC (Allocation Failure) [PSYoungGen: 410437K->11644K(529408K)] 448040K->55374K(670720K), 0.0069059 secs] [Times: user=0.11 sys=0.05, real=0.01 secs] 
7.121: [GC (Allocation Failure) [PSYoungGen: 518012K->12952K(528384K)] 561742K->67898K(669696K), 0.0142681 secs] [Times: user=0.13 sys=0.02, real=0.01 secs] 
9.274: [GC (Allocation Failure) [PSYoungGen: 519320K->14203K(657408K)] 574266K->80004K(798720K), 0.0115123 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
10.572: [GC (Metadata GC Threshold) [PSYoungGen: 370735K->14114K(674304K)] 436536K->79923K(815616K), 0.0067843 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
10.579: [Full GC (Metadata GC Threshold) [PSYoungGen: 14114K->0K(674304K)] [ParOldGen: 65809K->71708K(217088K)] 79923K->71708K(891392K), [Metaspace: 57953K->57953K(1101824K)], 0.1938080 secs] [Times: user=0.97 sys=0.00, real=0.19 secs] 
13.033: [GC (Allocation Failure) [PSYoungGen: 653312K->12640K(797696K)] 725020K->84356K(1014784K), 0.0064276 secs] [Times: user=0.14 sys=0.02, real=0.01 secs] 
15.787: [GC (Allocation Failure) [PSYoungGen: 797536K->19936K(811520K)] 869252K->105508K(1028608K), 0.0137464 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
18.567: [GC (Allocation Failure) [PSYoungGen: 811488K->27104K(944640K)] 897060K->127260K(1161728K), 0.0175469 secs] [Times: user=0.02 sys=0.02, real=0.02 secs] 
21.494: [GC (Allocation Failure) [PSYoungGen: 944608K->34881K(953344K)] 1044764K->151893K(1170432K), 0.0241418 secs] [Times: user=0.09 sys=0.05, real=0.02 secs] 

Linux环境下优化启动
正常启动日志查看
java -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:gc.log -jar demo-1.0.jar

2021-05-27T11:38:36.853+0800: 1.051: [Full GC (Metadata GC Threshold) [PSYoungGen: 4586K->0K(250368K)] [ParOldGen: 8913K->11435K(35328K)] 13499K->11435K(285696K), [Metaspace: 20455K->20455K(1067008K)], 0.0227893 secs] [Times: user=0.06 sys=0.01, real=0.03 secs]
2021-05-27T11:38:37.350+0800: 1.547: [GC (Allocation Failure) [PSYoungGen: 245760K->6624K(303104K)] 257195K->32945K(338432K), 0.0168248 secs] [Times: user=0.06 sys=0.01, real=0.02 secs]
2021-05-27T11:38:37.761+0800: 1.958: [GC (Allocation Failure) [PSYoungGen: 303072K->12779K(309248K)] 329393K->49229K(346112K), 0.0174971 secs] [Times: user=0.05 sys=0.01, real=0.02 secs]
2021-05-27T11:38:37.778+0800: 1.976: [Full GC (Ergonomics) [PSYoungGen: 12779K->0K(309248K)] [ParOldGen: 36450K->32537K(75776K)] 49229K->32537K(385024K), [Metaspace: 28028K->28028K(1075200K)], 0.0798805 secs] [Times: user=0.27 sys=0.01, real=0.08 secs]
2021-05-27T11:38:38.344+0800: 2.541: [GC (Allocation Failure) [PSYoungGen: 296448K->6788K(300032K)] 328985K->39333K(375808K), 0.0132737 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
2021-05-27T11:38:38.977+0800: 3.174: [GC (Allocation Failure) [PSYoungGen: 294020K->10624K(297984K)] 326565K->43177K(373760K), 0.0097760 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:39.586+0800: 3.783: [GC (Allocation Failure) [PSYoungGen: 297856K->13007K(302080K)] 330409K->45569K(377856K), 0.0109522 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:39.901+0800: 4.099: [GC (Allocation Failure) [PSYoungGen: 297167K->12978K(297472K)] 329729K->45547K(373248K), 0.0076462 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2021-05-27T11:38:39.922+0800: 4.119: [GC (Metadata GC Threshold) [PSYoungGen: 28828K->12525K(301568K)] 61397K->45102K(377344K), 0.0094761 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:39.932+0800: 4.129: [Full GC (Metadata GC Threshold) [PSYoungGen: 12525K->0K(301568K)] [ParOldGen: 32577K->37314K(85504K)] 45102K->37314K(387072K), [Metaspace: 47110K->47110K(1091584K)], 0.1347672 secs] [Times: user=0.42 sys=0.00, real=0.14 secs]
2021-05-27T11:38:40.328+0800: 4.525: [GC (Allocation Failure) [PSYoungGen: 282112K->4198K(302080K)] 319426K->41520K(387584K), 0.0037216 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
2021-05-27T11:38:40.525+0800: 4.722: [GC (Allocation Failure) [PSYoungGen: 286310K->6537K(301056K)] 323632K->43867K(386560K), 0.0109336 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:40.748+0800: 4.945: [GC (Allocation Failure) [PSYoungGen: 289161K->6960K(301568K)] 326491K->47709K(387072K), 0.0101969 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2021-05-27T11:38:40.941+0800: 5.138: [GC (Allocation Failure) [PSYoungGen: 289584K->4123K(302592K)] 330333K->50953K(388096K), 0.0088353 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2021-05-27T11:38:41.119+0800: 5.317: [GC (Allocation Failure) [PSYoungGen: 288795K->4183K(302592K)] 335625K->54454K(388096K), 0.0110935 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:41.491+0800: 5.688: [GC (Allocation Failure) [PSYoungGen: 288855K->5403K(303616K)] 339126K->59129K(389120K), 0.0055818 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2021-05-27T11:38:41.937+0800: 6.134: [GC (Allocation Failure) [PSYoungGen: 292123K->3476K(303616K)] 345849K->60604K(389120K), 0.0099470 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2021-05-27T11:38:42.360+0800: 6.557: [GC (Allocation Failure) [PSYoungGen: 290196K->5428K(304640K)] 347324K->62564K(390144K), 0.0050405 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2021-05-27T11:38:42.911+0800: 7.108: [GC (Allocation Failure) [PSYoungGen: 294196K->7032K(304640K)] 351332K->64177K(390144K), 0.0110280 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:43.444+0800: 7.641: [GC (Allocation Failure) [PSYoungGen: 295800K->10384K(304640K)] 352945K->67528K(390144K), 0.0078987 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:43.838+0800: 8.035: [GC (Allocation Failure) [PSYoungGen: 300176K->12851K(305152K)] 357320K->70003K(390656K), 0.0112448 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:44.303+0800: 8.501: [GC (Allocation Failure) [PSYoungGen: 302643K->16120K(301056K)] 359795K->73281K(386560K), 0.0107388 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2021-05-27T11:38:44.740+0800: 8.937: [GC (Allocation Failure) [PSYoungGen: 300280K->18912K(303104K)] 357441K->76232K(388608K), 0.0108920 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:45.228+0800: 9.426: [GC (Allocation Failure) [PSYoungGen: 303072K->18935K(292864K)] 360392K->79868K(378368K), 0.0162708 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2021-05-27T11:38:45.734+0800: 9.931: [GC (Allocation Failure) [PSYoungGen: 292855K->23165K(297472K)] 353788K->84105K(382976K), 0.0122362 secs] [Times: user=0.04 sys=0.00, real=0.02 secs]
2021-05-27T11:38:46.118+0800: 10.315: [GC (Allocation Failure) [PSYoungGen: 297085K->24544K(282112K)] 358025K->89382K(367616K), 0.0192253 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2021-05-27T11:38:46.545+0800: 10.742: [GC (Allocation Failure) [PSYoungGen: 282080K->22720K(280576K)] 346918K->93094K(366080K), 0.0205542 secs] [Times: user=0.08 sys=0.01, real=0.02 secs]
2021-05-27T11:38:46.906+0800: 11.103: [GC (Allocation Failure) [PSYoungGen: 280256K->25312K(284160K)] 350630K->95686K(369664K), 0.0136636 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
2021-05-27T11:38:47.260+0800: 11.457: [GC (Allocation Failure) [PSYoungGen: 275680K->29433K(280064K)] 346054K->99807K(365568K), 0.0148809 secs] [Times: user=0.04 sys=0.00, real=0.02 secs]
2021-05-27T11:38:47.283+0800: 11.480: [GC (Metadata GC Threshold) [PSYoungGen: 34427K->26768K(280064K)] 104802K->97150K(365568K), 0.0157586 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2021-05-27T11:38:47.299+0800: 11.496: [Full GC (Metadata GC Threshold) [PSYoungGen: 26768K->8150K(280064K)] [ParOldGen: 70382K->85431K(137728K)] 97150K->93582K(417792K), [Metaspace: 78357K->78357K(1122304K)], 0.3333693 secs] [Times: user=1.18 sys=0.02, real=0.33 secs]
2021-05-27T11:38:48.057+0800: 12.254: [GC (Allocation Failure) [PSYoungGen: 249302K->10579K(281600K)] 334734K->97402K(419328K), 0.0162966 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2021-05-27T11:38:48.486+0800: 12.683: [GC (Allocation Failure) [PSYoungGen: 251731K->12608K(278016K)] 338554K->101223K(415744K), 0.0102113 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:48.802+0800: 12.999: [GC (Allocation Failure) [PSYoungGen: 254784K->13316K(280064K)] 343399K->103972K(417792K), 0.0099516 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2021-05-27T11:38:49.208+0800: 13.405: [GC (Allocation Failure) [PSYoungGen: 255492K->14384K(280576K)] 346148K->107244K(418304K), 0.0139576 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
2021-05-27T11:38:49.460+0800: 13.658: [GC (Allocation Failure) [PSYoungGen: 262192K->14996K(282624K)] 355052K->108640K(420352K), 0.0146622 secs] [Times: user=0.04 sys=0.00, real=0.02 secs]
2021-05-27T11:38:49.727+0800: 13.924: [GC (Allocation Failure) [PSYoungGen: 262804K->9487K(285696K)] 356448K->110687K(423424K), 0.0131893 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2021-05-27T11:38:50.055+0800: 14.252: [GC (Allocation Failure) [PSYoungGen: 263439K->7479K(286720K)] 364639K->114060K(424448K), 0.0114630 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:50.335+0800: 14.533: [GC (Allocation Failure) [PSYoungGen: 261431K->5570K(288768K)] 368012K->115675K(426496K), 0.0125827 secs] [Times: user=0.04 sys=0.01, real=0.01 secs]
2021-05-27T11:38:51.088+0800: 15.285: [GC (Allocation Failure) [PSYoungGen: 262594K->9269K(289280K)] 372699K->122086K(427008K), 0.0097957 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
2021-05-27T11:38:51.804+0800: 16.001: [GC (Allocation Failure) [PSYoungGen: 266293K->14144K(287232K)] 379110K->126987K(424960K), 0.0144106 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
2021-05-27T11:38:52.264+0800: 16.462: [GC (Allocation Failure) [PSYoungGen: 272704K->17788K(288256K)] 385547K->130639K(425984K), 0.0146292 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
2021-05-27T11:39:00.538+0800: 24.735: [GC (Allocation Failure) [PSYoungGen: 276348K->23193K(288256K)] 389199K->136053K(425984K), 0.0139339 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]

查看出现了几次Full GC
对应的FullGc 为Metadata GC 说明是因为元空间存储空间不够,所以导致 Full GC 。元空间默认的大小为21M左右。使用 -XX:MetaspaceSize=128M设置元空间大小

优化后

在优化后的gc日志查看,Full GC的元空间存储不够的问题已经解决,但是又新出现了一个Ergonomics 的Full GC。这个Full GC的原因是开启了UseAdaptiveSizePolicy,jvm自己进行自适应调整引发的full gc。
我们通过日志还可以发现很多的Allocation Failure,Allocation Failure表示向young generation(eden)给新对象申请空间,但是young generation(eden)剩余的合适空间不够所需的大小导致的minor gc。

采用如下指令查看大小

在Windows里:
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
在Linux里:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

可以扩大运行时内存。减少Minor GC的频率。
当前的测试环境为1C1核4GB

#查看核心数
 cat /proc/cpuinfo |grep "cpu cores"|uniq|wc -l
#查看内存空间
free -m

最终优化参数为:

 -Xmx2688M -Xms2688M -Xmn960M -Xloggc:gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M
最终优化结果

相关文章

  • JVM优化实验过程

    关于JVM默认的一些初始化分配空间的默认值JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大...

  • jvm 相关阅读

    相关阅读 JVM性能优化1-JVM简介 JVM性能优化2-编译器 JVM性能优化3-垃圾回收 JVM性能优化4-C...

  • Java常见面试题汇总-----------JVM专题(JVM编

    32、JVM编译器优化 32.1、JVM编译的过程   1、解析与填充符号表过程  1)、词法、语法分析  词法分...

  • JVM调优

    JVM(Java虚拟机)优化大全和案例实战 JVM 优化经验总结 JVM 数据存储介绍及性能优化 JVM诊断...

  • Jvm优化技术

    Jvm优化技术有:逃逸分析、方法内联 一:Jvm优化技术之逃逸分析 1:概念 JVM的优化技术,可以有效减少Jav...

  • 调优进阶

    什么是调优? 根据需求进行JVM规划和预调优 优化运行JVM运行环境(慢,卡顿) 解决JVM运行过程中出现的各种问...

  • 被面试官问臭了的jvm性能优化你还不知道?建议收藏!

    一 、JVM性能优化专题 1、Java类加载过程 Java 类加载需要经历一下7 个过程: 1.1 . 加载 加载...

  • JVM 优化踩坑记

    本文记录了服务 JVM 优化的过程与思路,有对 JVM GC 原理以及对问题排查方向和工具的介绍,也有走弯路和踩坑...

  • 1.JVM内存模型

    本章要点 1.JVM内存区域划分2.类类编译加载执行过程3.编译优化技术4.双亲委派机制 1.JVM内存划分 JV...

  • 后端文章精选- 收藏集 - 掘金

    【玩转 JVM 性能优化】Java 的伸缩性 - 后端 - 掘金感谢朋友【吴杰】投递本文。 JVM性能优化系列文章...

网友评论

      本文标题:JVM优化实验过程

      本文链接:https://www.haomeiwen.com/subject/oijrsltx.html