为何主动设置Xmx为3G了,老生代已经99%了,JVM内存还不会自动扩容,导致FullGC非常频繁,从top命令上看内存只用到1g
为何主动设置Xmx为3G了,老生代已经99%了,JVM内存还不会自动扩容,导致FullGC非常频繁,从top命令上看内存只用到1g如果改为-Xms3072m -Xmx3072m 一开始就直接分配3g的话,就没这个问题
但如果-Xms256m -Xmx3072m,问题就出现,FullGC非常频繁
查看了这2个参数也是默认的:
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
环境信息如下:
操作系统:
Linux linux-wgvb 2.6.16.60-0.54.5-smp #1 SMP Fri Sep 4 01:28:03 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux
JDK版本:
java version "1.6.0_32"
Java(TM) SE Runtime Environment (build 1.6.0_32-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode)
JVM内存参数:
-Xms256m -Xmx3072m -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=1000 -XX:ParallelGCThreads=5 -Xrs -XX:PermSize=64m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError
FullGC非常频繁:
@linux> ./jstat -gcutil 18261 1000 500
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 64.67 7.04 99.53 71.89 18293 510.574 1167 1616.594 2127.168
91.78 7.91 100.00 99.53 72.00 18299 510.821 1167 1616.594 2127.415
77.49 0.00 0.00 99.99 72.00 18300 510.947 1168 1616.594 2127.541
0.00 99.83 25.71 99.49 71.72 18305 511.178 1168 1617.915 2129.093
24.27 0.00 21.74 99.67 71.73 18310 511.342 1168 1617.915 2129.256
28.57 0.00 0.00 99.83 71.73 18314 511.427 1169 1617.915 2129.342
0.00 29.29 0.00 99.56 71.82 18317 511.465 1169 1618.919 2130.384
0.00 78.85 54.96 99.56 72.05 18326 511.777 1169 1618.919 2130.696
64.52 0.00 0.00 99.99 72.05 18328 511.920 1170 1618.919 2130.839
0.00 99.26 0.00 99.88 71.71 18333 512.079 1171 1620.014 2132.093
4.86 0.00 0.00 99.95 71.76 18338 512.255 1172 1620.957 2133.211
80.98 0.00 0.00 99.69 71.83 18350 512.453 1172 1621.906 2134.359
0.00 64.48 0.00 99.85 71.83 18355 512.677 1173 1621.906 2134.583
0.00 99.80 0.00 99.93 71.71 18359 512.876 1174 1623.264 2136.139
0.06 0.04 100.00 99.55 71.71 18360 512.876 1174 1624.193 2137.069
60.35 0.00 0.00 99.90 71.77 18376 513.429 1175 1624.193 2137.622
60.35 0.00 0.00 99.90 71.77 18376 513.429 1175 1624.193 2137.622
89.86 0.00 0.00 99.83 71.78 18384 513.839 1176 1625.476 2139.315
89.86 0.00 0.00 99.83 71.78 18384 513.839 1176 1625.476 2139.315
0.00 39.17 64.41 99.60 71.78 18394 514.202 1176 1626.880 2141.082
99.93 0.00 0.00 99.82 71.78 18396 514.326 1177 1626.880 2141.206
0.00 64.68 0.00 99.61 71.72 18401 514.409 1177 1627.945 2142.354
Top命令查看进程只用了1g内存,JVM没有自动扩容到Xmx:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18261 ouser 15 0 4353m 1.0g 52m S 325 3.2 271:25.52 java --------------------编程问答-------------------- 用jconsole看下改动生效了没 有些系统并不支持3G的Xmx
先用cmd测试下系统支持的最大堆内存 然后再分配 --------------------编程问答-------------------- 看起来很高深,帮顶一下。应该是某大牛马甲 --------------------编程问答-------------------- 这里有篇文章挺不错的,可以看看
补充:Java , Java SE