Mar*_*arc 13 java garbage-collection jvm
我们有一个运行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
Run Code Online (Sandbox Code Playgroud)
为了减少 GC 时间,最好的办法就是使用堆外内存。如果您可以移动尽可能多的大数据,即使使用 100 MB 的堆外内存,也可以将完整 GC 时间减少到 10 毫秒。我相信 Ehcache 支持堆外数据存储,但如果不支持或者您无法使用它,我建议您查看支持的替代方案。
鉴于您的最大内存大小只有 700 MB,看来您正在内存非常有限的服务器上运行。否则,我建议您从最大 8 或 16 GB 开始,如果您认为确实不需要它,则减少内存大小。
| 归档时间: |
|
| 查看次数: |
4677 次 |
| 最近记录: |