Hibernate+Ehcache обновляет тесты
Мы переходим из Hibernate 3.2.1 в 3.5.6 и переносим Ehcache 2.3. Кажется, что обновления ломают наш полный набор тестов (около 10 тыс. Тестов), и в какой-то момент мы сталкиваемся с
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 ответ
Эта ошибка указывает на то, что JVM потребовалось слишком много времени для освобождения памяти во время процесса GC. Эта ошибка может быть вызвана последовательным, параллельным или параллельным коллектором. Это часто означает, что значение Xmx слишком велико - вы можете подумать о его снижении.
Для более серьезных и постоянных проблем производительности, связанных с GC, рекомендуется перейти на параллельный коллектор и гарантировать, что Confluence имеет доступ к памяти, требуемой его пользователями.
Параллельный сборщик сгенерирует OutOfMemoryError, если на сборку мусора будет затрачено слишком много времени: если на сборку мусора затрачивается более 98% общего времени и восстанавливается менее 2% кучи, генерируется ошибка OutOfMemoryError. Эта функция предназначена для предотвращения запуска приложений в течение длительного периода времени при небольшом прогрессе или его отсутствии, поскольку куча слишком мала. При необходимости эту функцию можно отключить, добавив параметр -XX:-UseGCOverheadLimit в командную строку.
Проверьте: http://confluence.atlassian.com/display/DOC/Garbage+Collector+Performance+Issues