在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,也可以是一项耗时很长的任务。 因此,堆大小应因服务器应用程序而异。 此外,如果堆大小不足,则完整 GC 将多次发生,并最终导致严重问题。
- 如何确定适当的初始堆大小?
- 何时应增加堆大小?
- 是否有监测异常迹象的方法和工具?
我会
- 创建要优化的工作负载的基准
- 针对此工作负载的分配对应用程序进行性能调整。这可以改变您所做的其他一切,因此请先这样做。例如,使用飞行记录器。
- 尝试使用不同堆大小的应用程序,看看在什么时候添加更多内存似乎没有区别。
- 如果有时间,请尝试更多工作负载。
如何确定适当的初始堆大小?
应用程序几乎立即增长到什么大小?如果您使用更大的尺寸进行基准测试,它似乎有帮助吗?
何时应增加堆大小?
在确定应用程序没有内存泄漏并且经过合理调整后,服务器需要更多内存,或者如果它有更多的内存,它会运行得更快。
是否有监测异常迹象的方法和工具?
对于可以连续运行的工具,可以从jstat