Hibernate + Ehcache更新打破了测试套件

时间:2010-12-17 10:47:02

标签: java hibernate ehcache

我们正在从hibernate 3.2.1迁移到3.5.6并引入Ehcache 2.3。似乎更新打破了我们的完整测试套件(大约10k测试),因为在某些时候我们遇到了

Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
at java.util.Timer.<init>(Timer.java:154)
at net.sf.ehcache.util.FailSafeTimer.<init>(FailSafeTimer.java:52)
at net.sf.ehcache.CacheManager.init(CacheManager.java:334)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:281)
at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:131)
at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.start(RegionFactoryCacheProviderBridge.java:72)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:250)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)

我有什么明显的遗失吗?我以为hiberante会处理任何所需的ehcache关闭以摆脱旧线程吗?

1 个答案:

答案 0 :(得分:-1)

此错误表示JVM在GC过程中花费的时间太长而无法释放内存。可以从串行,并行或并发收集器抛出此错误。这通常意味着Xmx值太高 - 您可以考虑降低它。

对于与GC相关的更严重和持久性能问题,建议更改为并行收集器,并确保Confluence可以访问其用户所需的内存。

如果在垃圾收集中花费了太多时间,则并行收集器将抛出OutOfMemoryError:如果超过98%的总时间花在垃圾收集上并且不到2%的堆被恢复,则OutOfMemoryError将是抛出。此功能旨在防止应用程序长时间运行,同时由于堆太小而很少或没有进度。如有必要,可以通过在命令行中添加选项-XX:-UseGCOverheadLimit来禁用此功能。

检查:http://confluence.atlassian.com/display/DOC/Garbage+Collector+Performance+Issues