我如何知道在使用G1 GC时何时调整堆大小?

时间:2018-10-15 11:02:01

标签: java java-8 jvm heap-size g1gc

在Oracle的G1 GC文档中,G1 GC不建议调整JVM选项,因为吞吐量和延迟稳定。

https://docs.oracle.com/javase/10/gctuning/garbage-first-garbage-collector-tuning.htm#JSGCT-GUID-0BB3B742-A985-4D5E-A9C5-433A127FE0F6

但是,我在文档中找不到一个页面,指出服务器堆大小应该如何合适。 服务器的用途和通信量各不相同。 它可以是简单的Restful API,也可以是耗时的任务。 因此,堆大小应根据服务器应用程序而有所不同。 另外,如果堆大小不足,则Full GC将发生多次,并最终导致严重的问题。

  1. 如何确定合适的初始堆大小?
  2. 什么时候应该增加堆大小?
  3. 有没有监视异常迹象的方法和工具?

1 个答案:

答案 0 :(得分:1)

我会

  • 创建要优化的工作负载的基准
  • 对应用程序进行
  • 性能调整以为此工作负载分配资源。这可以改变您所做的所有其他事情,因此请首先执行此操作。例如使用飞行记录器。
  • 尝试使用不同堆大小的应用程序,看看在什么时候增加内存似乎没有什么作用。
  • 如果有时间,请尝试更多的工作量。
  

如何确定合适的初始堆大小?

应用程序几乎立即增长到什么大小?如果您以更大的尺寸进行基准测试,会有所帮助吗?

  

什么时候应该增加堆大小?

在确定您的应用程序没有内存泄漏并且经过合理调整后,服务器需要更多内存,或者如果有更多内存,则运行速度会更快。

  

是否有监视异常迹象的方法和工具?

对于可以连续运行的工具,可以从jstat开始