java - 使用 G1 GC 时如何知道何时调整堆大小?

标签 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. 是否有监测异常体征的方法和工具?

最佳答案

我愿意

  • 为您要优化的工作负载创建基准
  • 针对此工作负载的分配调整应用程序的性能。这可以改变你所做的一切,所以先做吧。例如使用飞行记录器。
  • 尝试使用不同堆大小的应用程序,看看在什么时候添加更多内存似乎没有什么不同。
  • 如果有时间,尝试更多的工作量。

How do you determine the appropriate initial heap size?

应用程序几乎立即增长到多大?如果您使用更大的尺寸进行基准测试,它似乎有帮助吗?

When should you increase the heap size?

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

Are there methods and tools to monitor abnormal signs?

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

关于java - 使用 G1 GC 时如何知道何时调整堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815249/

相关文章:

java - 批量保存 JPA 实体 - TransactionRequiredException

java - aws dynamodb java sdk : cannot resolve symbol 'standard' : AmazonDynamoDBClientBuilder. 标准()

java - GZIPOutputStream 是否已知会在压缩过程中丢失数据?

Java:处理从文件读取的流

java - 以编程方式创建 Java8 函数引用

java - gc.logs 应该检查什么

java - 如何向 JavaFX 2.2.6 中的 PopupControl 添加内容?

Java 8 将自定义元素添加到集合中的方法?

java - 我可以在方法入口处暂停 Java 运行时以便有时间通过​​调试器或分析器进行附加吗?

java - 由于同步顺序,以下Java程序是否必须打印 "num:1 m_i:2 "