首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全GC变得非常频繁

全GC变得非常频繁
EN

Stack Overflow用户
提问于 2011-10-27 13:40:50
回答 4查看 27.3K关注 0票数 13

我在一个tomcat实例上运行了一个Java got应用程序。在高峰时期,webapp每秒提供大约30页,通常在15页左右。

我的环境是:

代码语言:javascript
复制
O/S: SUSE Linux Enterprise Server 10 (x86_64)
RAM: 16GB

server: Tomcat 6.0.20
JVM: Java HotSpot(TM) 64-Bit Server VM 1.6.0_14
JVM options:
CATALINA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
               -XX:+UseParallelGC
               -Djava.awt.headless=true
               -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_OPTS="-server"

经过几天的正常运行,整个GC开始更频繁地出现,并成为应用程序可用性的一个严重问题。在tomcat重新启动之后,问题就消失了,但是,当然,在5到10或30天后返回(不一致)。

重新启动前后的完整GC日志位于http://pastebin.com/raw.php?i=4NtkNXmi

它显示了重新启动之前的日志,在6.6天的正常运行时间,应用程序正在遭受痛苦,因为完整的GC需要2.5秒,并且每6秒发生一次。

然后显示重新启动后的日志,其中完整的GC仅每5-10分钟发生一次。

在出现完整GC时,我使用了两个jmap -dump:format=b,file=dump.hprof PID转储(我不确定在一个完整GC发生时还是在两个GCs之间),并在http://www.eclipse.org/mat/中打开它们,但是在泄密嫌疑人中没有得到任何有用的信息:

"net.sf.ehcache.store.compound.impl.MemoryOnlyStore“的

  • 60 my :1实例(我在ehcache中使用hibernate )
  • 80 my:1 024个实例(可能是tomcat的1024个工作人员)
    • 45 my:37个”net.sf.ehcache.store.compound.impl.MemoryOnlyStore“实例(这些应该是ehcache中的~37个缓存区域)

注意,我从来没有得到一个OutOfMemoryError。

接下来我该去哪儿看看呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-26 10:53:18

我已经从-Xmx1024m转到了-Xmx2048m,问题就解决了。我现在有100天的正常工作时间。

票数 4
EN

Stack Overflow用户

发布于 2011-10-27 14:06:15

当我们有了这个问题,我们最终找到了它的年轻一代太小。虽然我们给了很多公羊,但年轻一代却没有得到公平的份额。

这意味着小型垃圾收集将更频繁地发生,并导致一些年轻对象被移动到终身代中,这意味着也会有更多的大型垃圾收集。

尝试使用值较低的-XX:NewRatio (例如2或3),看看这是否有帮助。

更多信息可以找到here

票数 8
EN

Stack Overflow用户

发布于 2011-10-27 14:15:11

除了优化JVM的各种选项之外,我还建议升级到VM的较新版本,因为以后的版本有更好的优化垃圾收集器(也没有尝试新的实验性版本)。

此外,如果(部分)向JVM分配更多ram可能会增加执行GC所需的时间,则在使用整个16 GB内存和增加内存占用之间存在一个折衷点,因此可以尝试加倍所有值,以启动

Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

问候

马西莫

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

https://stackoverflow.com/questions/7916723

复制
相关文章

相似问题

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