我试图找出生产中JVM 8上两个垃圾收集之间的持续时间。
我可以调整JVM上可用的内存,作为副作用,它会增加两个垃圾收集之间的持续时间,但是如何区分正常情况或我们没有为机器分配足够内存的情况。
此问题尤其适用于Jira和Confluence等系统,您可以查看截图。目前垃圾收集大约每3小时一次。
/ usr / lib / jvm / java-8-oracle / bin / java -Djava.util.logging.manager = org.apache.juli。 ClassLoaderLogManager -Xms15000m -Xmx15000m -XX:+ PrintGCDateStamps -XX:-OmitStackTraceInFastThrow ... org.apache.catalina.startup.Bootstrap start
答案 0 :(得分:0)
自身运行的GC并不是一个好的指标。对于某些工作负载,次要GC可以每秒运行几次,而这并不意味着任何坏事。甚至每分钟运行一次的并发(CMS)/混合(G1)GC阶段在某些工作负载上也是正常的。
以下两个更好的措施:
GC overhead limit exceeded
OOME,JVM跟踪的原因它在GCing中花费了多少时间,并在超过默认限制时抛出该异常。第二点有例外,例如单线程应用程序使用并发收集器为另一个核心上的GCing刻录CPU周期以实现更高的吞吐量。
对于Web应用程序,您无法根据GC间隔来判断事物,因为这些因素随用户需求而变化,并且随着用户每天开始使用系统,内存缓存/数据存储/数据库会变热。它还取决于这些缓存如何被释放/清除过时的条目。
你基本上必须阅读你的应用程序的文档,它使用哪种内存存储以及如何调整/限制它们。
运行模拟多个用户的实际负载测试并抓取应用程序的许多页面,也可以为您提供一个良好的基线,它需要多少内存。