Java GC:JVM增加了内存使用量而不是运行GC

时间:2015-11-07 14:53:42

标签: java memory garbage-collection jvm

我的GC日志如下所示:

  

2015-11-05T18:49:55.230 + 0100:4.337:[GC [PSYoungGen:   387072K-> 27583K(451584K)] 387072K-> 27655K( 1483264K ),0.2037220秒]   [时间:用户= 2.08 sys = 0.09,真实= 0.20秒]

     

2015-11-05T18:49:55.994 + 0100:5.101:[GC [PSYoungGen:   414655K-> 11758K(838656K)] 414727K-> 11838K( 1870336K ),0.1702880秒]   [时间:用户= 2.13 sys = 0.05,实际= 0.18秒]

     

2015-11-05T18:49:57.248 + 0100:6.355:[GC [PSYoungGen:   785902K-> 10671K(838656K)] 785982K-> 10759K( 1870336K ),0.1309270秒]   [时间:用户= 1.53 sys = 0.09,实际= 0.13秒]

     

2015-11-05T18:49:58.271 + 0100:7.378:[GC [PSYoungGen:   784815K-> 10763K(1612800K)] 784903K-> 10859K( 2644480K ),0.1273570秒]   [时间:用户= 1.52 sys = 0.08,实际= 0.13秒]

     

2015-11-05T18:50:00.296 + 0100:9.403:[GC [PSYoungGen:   1559051K-> 10783K(1612800K)] 1559147K-> 10887K( 2644480K ),0.1275350   secs] [时间:用户= 1.50 sys = 0.06,实际= 0.13秒]

     

2015-11-05T18:50:01.853 + 0100:10.960:[GC [PSYoungGen:   1559071K-> 10735K(3122176K)] 1559175K-> 10847K( 4153856K ),0.1431470   secs] [时间:用户= 1.72 sys = 0.06,真实= 0.14秒]

     

2015-11-05T18:50:05.398 + 0100:14.505:[GC [PSYoungGen:   3107311K-> 576K(3123200K)] 3107423K-> 11081K( 4154880K ),0.1928080秒]   [时间:用户= 2.31 sys = 0.05,实际= 0.20秒]

     

2015-11-05T18:50:08.266 + 0100:17.373:[GC [PSYoungGen:   3097152K-> 512K(6220288K)] 3107657K-> 11153K( 7251968K ),0.0060230秒]   [时间:用户= 0.03 sys = 0.01,实际= 0.01秒]

如您所见,随着时间的推移有两个正在进行的趋势:

  1. 堆分配从 1.4 gb 增长到 7.2 gb ,没有任何特殊原因
  2. 次要GC频率下降
  3. 这导致我的应用程序使用的内存不断增长,这就是我想要解决的问题。 Max HeapSpace非常大,所以看起来JVM会以这种方式继续下去,直到它达到极限堆但我希望它能在某种程度上停止。因为正如你所看到的那样--Heap的实际用法并没有增长,它是不变的,这正是我对我的应用所期望的。

    我看到了几个想法如何解决它:

    1. 使次要GC更频繁
    2. 降低YoungGen空间部分以强制次要GC更频繁
    3. 减少总HeapSpace以强制次要GC更频繁
    4. 问题在于我不知道如何针对 ParallelCollector 调整此选项,这是由JVM为我的环境选择的。

      据我所知 ParallelCollector 忽略了JVM的所有设置,这可能对我有帮助,只留给我们指定高级 MaxGCPauseMillis GCTimeRatio 参数。我在这里看到了一个类似的问题,并且只找到了串行收集器的参数,而不是我的情况:Encourage the JVM to GC rather than grow the heap?

      看起来我对 ParallelCollector 的唯一选择是使用Xmx参数降低HeapSpace,这就是全部!

      PS 正如我在我的问题中已经解释的那样,这个主题 - Encourage the JVM to GC rather than grow the heap? - 与JVM的串行收集器有关,并且不包含Parallel Collector的答案。这一点在该主题的初步描述中得到了明确的肯定。

0 个答案:

没有答案