如何配置 GC 不停止世界?
How to configure GC to not stop the world?
假设我有一个JVM
1.7,最大1G正常运行。堆大小。并且仅使用 ~0.5G 的堆。
在某些时刻,堆使用量在几分钟内急剧增加(我怀疑增加的负载不是内存泄漏)并且 GC (PS MarkSweep
) 开始了。 GC 运行 持续了大约 30 分钟。 并且服务器一直没有响应。
堆统计数据显示在那一刻 Old Gen
堆使用率增加,Eden
减少,max Survivor
也增加。
JVM 使用默认选项-XX:+UseParallelGC
我会尝试增加堆,限制输入数据大小等。但是我想知道如何将 GC 调整为 not "stop the world" 半年小时。我不介意服务器是否变慢,但我根本不希望它停止响应。
如何配置 GC 不停止世界?
虽然您无法保证(除非您像 Zing 一样在 VM 上),但您可以为 GC 提供软目标,GC 将尝试实现这些目标。在这里查看更多。
Oracle Technetwork. pt. Ergonomics
XX:MaxGCPauseMillis=.This is interpreted as a hint that pause times of milliseconds or less are desired; ... Note that these adjustments may cause the garbage collector to reduce the overall throughput of the application and in some cases the desired pause time goal cannot be met.
-XX:GCTimeRatio=.The throughput goal is measured in terms of the time spent doing garbage collection vs. the time spent outside of garbage collection (referred to as application time). The goal is specified by the command line option -XX:GCTimeRatio=, which sets the ratio of garbage collection time to application time to 1 / (1 + ). For example, -XX:GCTimeRatio=19 sets a goal of 1/20 or 5% of the total time in garbage collection. The default value is 99, resulting in a goal of 1% of the time in garbage collection.
PS。但是,我认为如果具有 0.5Gb 堆的应用程序在 GC 中花费 30 分钟,则应用程序出现问题的可能性更大,而不是 GC 本身,除非您尝试 运行 某些遗留应用程序平台。
假设我有一个JVM
1.7,最大1G正常运行。堆大小。并且仅使用 ~0.5G 的堆。
在某些时刻,堆使用量在几分钟内急剧增加(我怀疑增加的负载不是内存泄漏)并且 GC (PS MarkSweep
) 开始了。 GC 运行 持续了大约 30 分钟。 并且服务器一直没有响应。
堆统计数据显示在那一刻 Old Gen
堆使用率增加,Eden
减少,max Survivor
也增加。
JVM 使用默认选项-XX:+UseParallelGC
我会尝试增加堆,限制输入数据大小等。但是我想知道如何将 GC 调整为 not "stop the world" 半年小时。我不介意服务器是否变慢,但我根本不希望它停止响应。
如何配置 GC 不停止世界?
虽然您无法保证(除非您像 Zing 一样在 VM 上),但您可以为 GC 提供软目标,GC 将尝试实现这些目标。在这里查看更多。 Oracle Technetwork. pt. Ergonomics
XX:MaxGCPauseMillis=.This is interpreted as a hint that pause times of milliseconds or less are desired; ... Note that these adjustments may cause the garbage collector to reduce the overall throughput of the application and in some cases the desired pause time goal cannot be met.
-XX:GCTimeRatio=.The throughput goal is measured in terms of the time spent doing garbage collection vs. the time spent outside of garbage collection (referred to as application time). The goal is specified by the command line option -XX:GCTimeRatio=, which sets the ratio of garbage collection time to application time to 1 / (1 + ). For example, -XX:GCTimeRatio=19 sets a goal of 1/20 or 5% of the total time in garbage collection. The default value is 99, resulting in a goal of 1% of the time in garbage collection.
PS。但是,我认为如果具有 0.5Gb 堆的应用程序在 GC 中花费 30 分钟,则应用程序出现问题的可能性更大,而不是 GC 本身,除非您尝试 运行 某些遗留应用程序平台。