Exception in thread "Lucene Merge Thread #10718" java.lang.OutOfMemoryError: class allocation, 64669416888 loaded, 4235051008 footprint JVM@check_alloc (src/jvm/model/classload/classalloc.c:118). 340 byte
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:971)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:965)
at java.lang.Thread.dispatchUncaughtException(Thread.java:1821)
Exception in thread "Index Commit Thread" java.lang.NoClassDefFoundError: java/lang/ThreadDeath
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:971)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:965)
at java.lang.Thread.dispatchUncaughtException(Thread.java:1821)
页面上:
http://docs.oracle.com/cd/E15289_01/doc.40/e15066/knownissues.htm#CJADHDEA
4.18 Out of Memory Error Occurs When Classblock Memory Runs Low
也许是因为这个原因,但是jrrt-4.0.1-1.6.0 这个版本并不支持上述的参数设置。也就只能静观其变了
内存溢出就是内存放不下了啊,如果是自己的算法的话,就换个思路,分而治之;如果不是自己的算法,就调大一点堆内存吧,不知道你堆内存设置的值是多少,32位和64位上限也不一样[/quote]是lucene4.3.1这个版本,回写机制是架包里面固定的,现在估计问题很有可能是因为 “Expert: IndexWriter allows you to separately change the MergePolicy and the MergeScheduler. The MergePolicy is invoked whenever there are changes to the segments in the index. Its role is to select which merges to do, if any, and return a MergePolicy.MergeSpecification describing the merges. The default is LogByteSizeMergePolicy. Then, the MergeScheduler is invoked with the requested merges and it decides when and how to run the merges. The default is ConcurrentMergeScheduler.”这是lucene的说明文档,说默认的模式是:LogByteSizeMergePolicy,但是jar包里面的代码确不是这个,现在修改方法是在代码中添加如下代码:
LogByteSizeMergePolicy mergePolicy = new LogByteSizeMergePolicy();
mergePolicy.setMergeFactor(Config.getMergeFactor());
indexWriterConfig.setMergePolicy(mergePolicy);
目前只有出问题的机器修改成这种模式,需要运行几天看下是否还会出现这个情况。