我怎样才能帮助CMS GC“死得快”(How can i help CMS GC “die fast

2019-09-29 13:46发布

我使用“-XX:+ UseConcMarkSweepGC”。在我的应用程序,而当内存不足的错误是接近我的应用程序变换在弱形式的本身(在这个时候,它记录“并发模式失败”)在这种形式,它可以生存很长一段时间期间,这对我来说是个大麻烦。 我需要找到办法如何帮助我的应用程序,以“死的快和容易的”。

我GOOGLE了这一点:“-XX:GCHeapFreeLimit = nnn其中nnn是0和100之间的数字给堆必须是GC后自由的最小百分比默认为2”,但我有麻烦了。 我用我的配置JVM“-XX:GCHeapFreeLimit = 50”,我认为这不会改变任何东西

日志2013-08-14T17:31:49.776 + 0400:[全GC [CMS:917504K-> 908590K(917504K),2.8014727秒] 1032192K-> 908590K(1032192K),[CMS彼尔姆:2071K-> 2071K(65536K)] ,2.8015412秒] [时间:用户= 2.79 SYS = 0.00,真= 2.80秒]

1032192K-> 908590K(1032192K) - 这不是50个persents

Answer 1:

我想你是说,你的应用程序花费太多时间在垃圾收集时的堆接近满载。

如果是这样,有一个简单的事情,你可以做,可以帮助:添加-XX:+UseGCOverheadLimit命令行选项。 这将导致JVM跟踪有多少时间是花在“GC开销”。 如果时间比例超过给定(可配置)比,JVM将引发OutOfMemoryError异常。

显然,这将导致应用程序死得越快。 但听起来好像是你想要的东西:一个快速的死亡,而不是一个缓慢挥之不去的一个。


根据此页 ,缺省比值为98%的应用,2%GC。 我可能不正确有关比率可调谐。 如果没有,我怀疑这可能是这一个: -X:GCTimeLimit=nn



文章来源: How can i help CMS GC “die fast”