我们有一个运行Java6、Tomcat6、Spring Framework3、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发布于 2012-06-25 01:41:49
要减少GC时间,您可以做的最好的事情就是使用堆内存。如果您可以移动尽可能多的大型数据,那么即使使用100s的非堆内存,也可以将完整的GC时间减少到10毫秒。我相信Ehcache支持堆数据存储,但是如果它不支持,或者你不能使用它,我建议你看看可以使用它的替代方案。
假设您只有700MB的最大内存大小,看起来您是在内存非常有限的服务器上运行的。否则,我建议您从最大8 GB或16 GB开始,如果您认为自己并不真正需要内存大小,请减小内存大小。
发布于 2012-06-25 06:54:50
FourSquare的朋友们提供了一个很好的工具。请查看此链接和他们的快速示例。Foursquare Heap tool. 。根据您在上面提到的任何工具中找到的诊断信息,解决该问题的最合理的解决方案是增加RAM或增加CPU处理器的电源。如果您对某些基础设施更改持开放态度,请检查 Zing from Azul Systems。但我认为第二种选择可能有些牵强。
https://stackoverflow.com/questions/11178676
复制相似问题