如何配置GC以阻止世界?

时间:2015-04-11 12:43:40

标签: java performance garbage-collection jvm

假设我有一个JVM 1.7,它正常运行,最大1G。堆大小。并且只使用~0.5G的堆。

在某些时刻,堆使用率在几分钟内急剧增加(我怀疑负载增加而不是内存泄漏)并且GC(PS MarkSweep)启动。 GC运行大约 30分钟。并且服务器没有响应所有时间。

堆统计信息显示,当时Old Gen堆使用量增加,Eden减少, max Survivor也增加。

JVM使用默认选项-XX:+UseParallelGC

我会尝试增加堆,限制输入数据大小等。但是我想知道如何将GC调整为而不是"停止世界"半个小时。我不介意服务器速度慢但我不想让它停止响应。

如何将GC配置为停止世界

1 个答案:

答案 0 :(得分:1)

虽然您无法获得保证(除非您像Zing一样使用VM),但您可以向GC尝试实现软目标。在这里查看更多。 Oracle Technetwork. pt. Ergonomics

  

XX:MaxGCPauseMillis = 。这被解释为需要暂停时间毫秒或更短的提示; ...请注意,这些调整可能会导致垃圾收集器降低应用程序的总吞吐量,并且在某些情况下无法满足所需的暂停时间目标。

     

-XX:GCTimeRatio = 。吞吐量目标是根据垃圾收集所花费的时间与垃圾收集之外的时间(称为应用程序时间)来衡量的。目标由命令行选项-XX:GCTimeRatio =指定,它将垃圾收集时间与应用程序时间的比率设置为1 /(1 +)。例如,-XX:GCTimeRatio = 19设置垃圾收集总时间的1/20或5%的目标。默认值为99,导致垃圾收集时间为1%的目标。

PS。但是,我有一种观点认为,如果一个拥有0.5Gb堆的应用程序在GC中花费30分钟,则应用程序出现问题的可能性更大,而不是使用GC本身,除非您尝试在某些传统上运行该应用程序平台。

相关问题