我对Hibernate Search非常陌生,并试图将其与我的应用程序集成。 面对内存泄漏问题(线程进入等待/停泊状态)。Hibernate搜索配置问题
Hibernate Search配置(非常小)是注释驱动的。使用:
@Indexed(index = "<index_name>")
@IndexedEmbedded
和
@Field(name = "title", store = Store.YES, analyzer = @Analyzer(definition = "standardAnalyzer")
Hibernate Search的性质:
<property name="hibernate.search.default.indexBase" value="../lucene/indexes" />
<property name="hibernate.search.default.directory_provider" value="filesystem" />
<property name="hibernate.search.default.exclusive_index_use"
value="false" />
使用Tomcat 8部署应用程序。
我的主要问题是,
的VisualVM清楚地表明,Hibernate Search的创建各项指标同步消费者线程。它为我对服务器进行的每一个调用都这样做(在我的情况下,每次调用都会产生2个新线程并处于停放状态)。最终,线程的数量会增加,直到我的服务器无响应。
在服务器关闭时,我得到的错误:
09-Aug-2017 17:15:28.151 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [procurewise] appears to have started a thread named [Hibernate Search sync consumer thread for index Category] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338) org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.parkCurrentThread(SyncWorkProcessor.java:175) org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.access$300(SyncWorkProcessor.java:35) org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:147) java.lang.Thread.run(Thread.java:745)
我使用Spring,Hibernate的,JPA,AOP和JAX-RS,新泽西州。
环境细节:
Hibernate version 5.2.10.Final
Hibernate Search version 5.7.0.Final
Spring version 4.3.6.RELEASE
JPA 2.1
JAVA 8
Jersey 1.8
这是不相关的,但你不应该使用'hibernate.search.default.exclusive_index_use',除非你真的知道你为什么需要它。真。另外,你使用的是什么版本的Hibernate Search? –
@YoannRodière。我已经添加了我正在使用的Hibernate搜索版本。此外,exclusive_index_use属性试图停止使用锁假设MassIndexer衍生多个线程,我认为这是问题在这里。但要指出的一点。 –