gpt4 book ai didi

java - Full GC变得非常频繁

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:27 26 4
gpt4 key购买 nike

我有一个在一个 tomcat 实例上运行的 Java webapp。在高峰时段,Web 应用程序每秒提供大约 30 个页面,通常约为 15 个页面。

我的环境是:

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"

正常运行几天后,Full GC 开始更频繁地发生,这成为应用程序可用性的严重问题。在 tomcat 重新启动后,问题消失了,但当然会在 5 到 10 天或 30 天后返回(不一致)。

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

它显示了在 6.6 天正常运行时间重新启动之前的日志,其中应用程序受到影响,因为 Full GC 需要 2.5 秒并且每 ~6 秒发生一次。

然后它会在重启后显示一个日志,其中 Full GC 仅每 5-10 分钟发生一次。

当 Full GC 发生时,我使用 jmap -dump:format=b,file=dump.hprof PID 得到了两个转储(我不确定我是否完全正确地得到了它们Full GC 正在发生或在 2 个 Full GC 之间)并在 http://www.eclipse.org/mat/ 中打开它们但在 Leak Suspects 中没有得到任何有用的信息:

  • 60MB:“org.hibernate.impl.SessionFactoryImpl”的 1 个实例(我将 hibernate 与 ehcache 结合使用)
  • 80MB:“org.apache.tomcat.util.threads.ThreadWithAttributes”的 1,024 个实例(这些可能是 tomcat 的 1024 个 worker )
  • 45MB:“net.sf.ehcache.store.compound.impl.MemoryOnlyStore”的 37 个实例(这些应该是我在 ehcache 中的 ~37 个缓存区域)

请注意,我从未收到 OutOfMemoryError。

关于我下一步应该看哪里有什么想法吗?

最佳答案

当我们遇到这个问题时,我们最终将其追溯到年轻一代太小。尽管我们给了很多 ram,但年轻一代并没有得到应有的份额。

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

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

可以找到更多信息 here .

关于java - Full GC变得非常频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com