首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生产JVM上的两个垃圾回收之间的良好持续时间是多少?

生产JVM上的两个垃圾回收之间的良好持续时间是多少?
EN

Stack Overflow用户
提问于 2015-08-05 10:02:57
回答 1查看 54关注 0票数 0

我正在试图找出在生产中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启动

EN

回答 1

Stack Overflow用户

发布于 2015-08-05 18:59:39

GCs的运行本身并不是一个很好的指标。小型GCs可以在某些工作负载上每秒运行几次,而不表示有什么不好的地方。即使并发(CMS)/mixed (G1) GC阶段每分钟运行一次,在某些工作负载上也是正常的。

两项较好的措施如下:

  • 有多少堆是由旧的GC释放的。如果利用率几乎没有下降,那么这要么是一个非常谨慎的应用程序,要么是由于堆空间不足或应用程序中的内存泄漏而接近OOME。
  • 在应用程序时间中,GC和CPU周期中花费了多少CPU周期--这从第一点开始就开始了。如果GC能够收集很少的垃圾,那么当垃圾不断堆积时,它将不得不再次运行。

这就是触发GC overhead limit exceeded OOME的第一步,JVM跟踪它在GCing上花费的时间,并在超过默认限制时抛出该异常。

第二点也有例外,例如,单线程应用程序使用并发收集器将GCing的CPU周期刻录在另一个核心上,以获得更高的吞吐量。

对于web应用程序,您不能真正根据GC间隔来判断事物,因为随着用户每天开始使用系统,用户的需求和内存中的缓存/数据存储/数据库将有所不同。这还取决于这些缓存是如何释放/清除陈旧条目的。

基本上,您必须阅读应用程序的文档、它使用的内存存储类型以及如何对它们进行调优/限制。

运行一个真实的负载测试来模拟多个用户并爬行应用程序的许多页面,这也为您提供了一个很好的基线,它需要多少内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31829286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档