我们有一个运行 Java 6、Tomcat 6、Spring Framework 3、Hibernate 4、EhCache 的 Web 应用程序。我们遇到了一个垃圾收集时间过长的问题,可能需要 30 秒或更长时间,导致应用程序无响应。
我们目前正在测试中,但除了明显的:添加更多内存之外,我想知道是否可以调整某些方面来减少垃圾收集时间。
内存使用的主要贡献者是 EHCache,因为我们正在积极缓存。但是我总是发现很难调整 EHCache 存储的大小(新的 EhCache 字节大小存储会给我们带来各种问题,因为缓存的对象图可能非常大)。
这些是我对 JVM 的设置
JAVA_OPTS="$JAVA_OPTS -server -Xms256m -Xmx704m XX:OnOutOfMemoryError=/usr/share/scripts/on_server_crash.sh -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat6 -XX:MaxPermSize=192m -XX:+UseConcMarkSweepGC