关于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

网友评论