lucene应用中出现异常:java.lang.OutOfMemoryError: Java heap space(急)

技术人宝哥 2011-06-16 04:55:37
我们得应用又前台系统和后台管理系统两部分(应用lucene创建索引和关键字搜索,前台和后台中创建索引和关键字搜索的代码完全一样),现象描述:
如果创建索引和关键字搜索搜索都在前台系统中运行或者创建索引和搜索功能都在后台系统中运行没有问题,一切正常,但是,(a)当点击后台的创建索引,运行正常,这时,在点击前台的关键词搜索则就报异常 (b)点击前台的搜索(之前已经创建好索引),运行正常,这时,在后台点击创建索引。在(a)(b)这两种情况下都出现异常:
“java.lang.OutOfMemoryError: Java heap space” ,异常信息如下 :
2011-6-1 14:34:00 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet springmvc threw exception
java.lang.OutOfMemoryError: Java heap space
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:167)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:180)
at org.wltea.analyzer.dic.DictSegment.fillSegment(DictSegment.java:156)
at org.wltea.analyzer.dic.Dictionary.loadMainDict(Dictionary.java:97)
at org.wltea.analyzer.dic.Dictionary.<init>(Dictionary.java:71)
at org.wltea.analyzer.dic.Dictionary.<clinit>(Dictionary.java:41)
at org.wltea.analyzer.cfg.Configuration.loadSegmenter(Configuration.java:110)
at org.wltea.analyzer.IKSegmentation.<init>(IKSegmentation.java:54)
at org.wltea.analyzer.lucene.IKTokenizer.<init>(IKTokenizer.java:44)
at org.wltea.analyzer.lucene.IKAnalyzer.tokenStream(IKAnalyzer.java:45)
at org.apache.lucene.analysis.Analyzer.reusableTokenStream(Analyzer.java:52)
at org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:126)
at org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:246)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:773)
at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:751)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1928)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1902)
at com.fasdq.fangdake.index.IndexNews.buildDocument(IndexNews.java:210)
at com.fasdq.fangdake.index.IndexNews.createIndexIKAnalyzer(IndexNews.java:55)
at com.fasdq.fangdake.controller.LuceneController.createIndexNews(LuceneController.java:126)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
这个问题烦了我好几天了,弄不出来了,跪求牛人们帮忙一下!十分感谢了!
...全文
523 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈牛人 2011-06-20
  • 打赏
  • 举报
回复
关于lucene的内存溢出。。经常遇到。。
最好的办法就是,提升你的硬件支撑。。。

因为在大量的写入索引的时候。。IO会很频繁。。,相信你已经在索引的时候的对索引内存做了优化处理。。

而且你查询的时候,尽量用reader吧。。。

问楼主:你们的数据量大吗?查询效率高吗?在多目录索引下是如何进行查询的效率提升的。。希望能一起讨论学习
draling 2011-06-16
  • 打赏
  • 举报
回复
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m

具体的可以参考一下
http://hi.baidu.com/mouhainy/blog/item/a3b2bf3377fa02fd1b4cfffc.html
Spring89 2011-06-16
  • 打赏
  • 举报
回复
window->preferences->MyEclipse....->Servers->Tomcat->Tomcat 6.X->JDK->Optional Java VM arguments下面的文本框里加上"-Xms128m -Xmx256m-Dcom.sun.management.jmxremote=true"然后Apply
这种方式,可以解决!我之前有遇到过,但不是做lucene

还有,以这种方式解决内存溢出,并非最终解决办法,因为这样非常占用内存,你不信看CPU
看下代码,什么地方应该改进的改下。
Looking_Glass 2011-06-16
  • 打赏
  • 举报
回复
这个要做 TreadDump .要在tomcat启动时加上几个参数.ibm与sun jdk都不一样. 然后用内存分析工具看虚拟机中那个东西占用内存较多.估计说了等于不说.=.=.毕竟现在的人知道ThreadDump的人不多.唉.

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧