2010-12-17 94 views
0

我們正在從休眠3.2.1升級到3.5.6並帶來Ehcache 2.3。這似乎是更新在某些時候,我們碰到Hibernate + Ehcache更新中斷測試套件

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) 

打破我們完整的測試套件(10k左右的測試),在那有什麼明顯的,我在這裏失蹤?我認爲hiberante會處理任何必需的ehcache關閉以擺脫舊線程?

+0

「?有什麼明顯我是缺少在這裏我想會的Hiberante處理任何需要的Ehcache停機擺脫舊的線程」 - 你可以測試一下:如果你運行一個失敗的測試,並且再次失敗,那麼它就是另一個問題。 – Ralph 2010-12-17 11:06:06

+0

hmm。在本地運行測試套件(我們的構建系統不是最好的),我看到越來越多的CacheManager實例(已經有大約45個)。全部處於狀態TIMED_WAITING。有趣。 – seminolas 2010-12-17 11:34:17

回答

-1

此錯誤表示JVM在其GC過程中釋放內存太長。這個錯誤可以從串行,並行或併發收集器中引發。它通常意味着Xmx值太高 - 您可能會考慮降低它。

對於與GC相關的更嚴重和持久的性能問題,建議更改爲並行採集器,並確保Confluence可以訪問其用戶所需的內存。

並行收集器將拋出一個OutOfMemoryError如果太多的時間垃圾收集在被花費:如果總時間超過98%用於垃圾收集在和堆的低於2%被回收,一個OutOfMemoryError將被拋出。此功能旨在防止應用程序長時間運行,而由於堆太小,因此很少或沒有進度。如有必要,可以通過在命令行中添加-XX:-UseGCOverheadLimit選項來禁用此功能。

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