我正在试图找出在生产中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启动
发布于 2015-08-05 18:59:39
GCs的运行本身并不是一个很好的指标。小型GCs可以在某些工作负载上每秒运行几次,而不表示有什么不好的地方。即使并发(CMS)/mixed (G1) GC阶段每分钟运行一次,在某些工作负载上也是正常的。
两项较好的措施如下:
这就是触发GC overhead limit exceeded
OOME的第一步,JVM跟踪它在GCing上花费的时间,并在超过默认限制时抛出该异常。
第二点也有例外,例如,单线程应用程序使用并发收集器将GCing的CPU周期刻录在另一个核心上,以获得更高的吞吐量。
对于web应用程序,您不能真正根据GC间隔来判断事物,因为随着用户每天开始使用系统,用户的需求和内存中的缓存/数据存储/数据库将有所不同。这还取决于这些缓存是如何释放/清除陈旧条目的。
基本上,您必须阅读应用程序的文档、它使用的内存存储类型以及如何对它们进行调优/限制。
运行一个真实的负载测试来模拟多个用户并爬行应用程序的许多页面,这也为您提供了一个很好的基线,它需要多少内存。
https://stackoverflow.com/questions/31829286
复制相似问题