我有一个
Java webapp在一个tomcat实例上运行.在高峰时段,webapp每秒服务约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"
经过几天的正常运行时间,全面的GC开始更频繁地出现,这对于应用程序的可用性来说是一个严重的问题. tomcat重启后,问题消失了,当然在5到10或30天后返回(不一致).
它在重新启动之前显示一个日志,在6.6天的正常运行时间,应用程序遭受痛苦,因为Full GC需要2.5秒,每6秒钟发生一次.
然后,它显示刚刚重启之后的日志,其中Full GC仅在5-10分钟内发生.
我有两个转储使用jmap -dump:format = b,file = dump.hprof PID,当完整的GC发生时(我不知道我是否完全正确的时候完全GC发生或2个全GC之间),并在http://www.eclipse.org/mat/开张,但没有任何有用的泄漏嫌疑犯:
> 60MB:1“org.hibernate.impl.SessionFactoryImpl”的实例(我用ehcache使用hibernate)
> 80MB:1,024个“org.apache.tomcat.util.threads.ThreadWithAttributes”实例(这些可能是tomcat的1024个工作)
> 45MB:“net.sf.ehcache.store.compound.impl.MemoryOnlyStore”的37个实例(这些应该是ehcache中的〜37个缓存区域)
注意我从来没有得到一个OutOfMemoryError.
关于我应该在哪里看的任何想法?