Lucene 出现内在溢出的错误
public class CreateIndexImpl implements CreateIndexService
private File areaDir = new File("E:\\index\\areaIndex");
private File objDir= new File("E:\\index\\objIndex");
private File entDir = new File("E:\\index\\entIndex");
private Analyzer analyzer;
private IndexWriter indexWriter = null;
private GetObjectDao objDao;
public GetObjectDao getObjDao() {
return objDao;
}
public void setObjDao(GetObjectDao objDao) {
this.objDao = objDao;
}
public CreateIndexImpl() {
analyzer = new MMAnalyzer();
}
public void createIndex(boolean flag) {
createAreaIndex(flag);
createObjIndex(flag);
createHomeIndex(flag);
analyzer = null;
}
public void createAreaIndex(boolean flag) {
long startTime = new Date().getTime(); // 创建索引开始时间
long endTime = 0; // 创建索引结束时间
try {
indexWriter = new IndexWriter(areaDir, analyzer, flag);
List<Area> areaList = objDao.getArea();
int i = 0;
for (Area area : areaList) {
Document document = new Document();
Field areaid = new Field("AreaId", area.getId().toString(),
Field.Store.YES, Field.Index.UN_TOKENIZED);
Field areaName = new Field("AreaName", area.getName(), Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
area = null;
String str = "isValue";
Field ID = new Field("ID", str, Field.Store.YES,
Field.Index.UN_TOKENIZED);
document.add(areaid);areaid = null;
document.add(areaName);areaName = null;
document.add(ID);ID = null;
indexWriter.addDocument(document);
document = null;
}
areaList = null;
try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void createObjIndex(boolean flag) {
try {
indexWriter = new IndexWriter(objDir, analyzer, flag);
List<ObjStatus> objList = objDao.getObjInfo();
for (ObjStatus obj: userList) {
Document document = new Document();
Field fieldObjId = new Field("UID", obj.getId().toString(),
Field.Store.YES, Field.Index.UN_TOKENIZED);
Field fieldObjName = new Field("ObjName", obj.getSur()
+ obj.getName(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fieldObjStat = new Field("ObjStat", obj.getStat(),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fieldObjPhotoPath = new Field("ObjPhotoPath", obj
.getPhotoPath(), Field.Store.YES, Field.Index.UN_TOKENIZED);
obj= null;
document.add(fieldObjId);fieldObjId = null;
document.add(fieldObjName);fieldObjName = null;
document.add(fieldObjStat);fieldObjStat = null;
document.add(fieldObjPhotoPath);fieldObjPhotoPath = null;
indexWriter.addDocument(document);
document = null;
}
userList = null;
try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void createEntIndex(boolean flag) {
try {
indexWriter = new IndexWriter(entDir, analyzer, flag);
List<Ent> entList = objDao.getEntInfo();
int i = 0;
for (Ent ent: entList) {
Document document = new Document();
Field fieldEntId = new Field("HID", ent.getId().toString(),
Field.Store.YES, Field.Index.TOKENIZED);
Field fieldEntStat = new Field("EntStat", ent.getStat(),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fieldEntExceplain = new Field("EntExceplain",
ent.getExplain(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
ent = null;
document.add(fieldEntId);fieldEntId = null;
document.add(fieldEntStat);fieldEntStat = null;
document.add(fieldEntExceplain);fieldEntExceplain = null;
indexWriter.addDocument(document);
System.out.println("i -------------------------------> " + i);
i += 1;
document = null;
}
entList = null;
try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
硬件配置:
Inter(R) Pentium (R) Dual E2160 @ 1.80GHz 的 CPU
2G 的 DDR2 内存
TomCat5.5启动时设置的 Initial memory pool: 512MB; Maximum memory pool: 1024MB(之前是1G的内存,TomCat启动初始化128MB,最大256MB,内存溢出后又加了一根内存条),CPU占用率为55% - 60%之间,内存占用率在1G左右(开了MQSQL,MyEclipse,FrieFox).
如果单单对 areaList 中的数据建立索引,没什么问题。
areaList 中有 40447 条数据, objList 中有大约 60 条数据, entList 中有大约 30 条数据,
系统启动时先对 areaList 中的数据创建 索引,再对 objList 中的数据创建,后对 entList 中的数据创建索引。
但是对 objList , entList 中的数据创建索引完成之后,到 createAreaIndex(boolean flag) 中 处理72条后 就停下抛出异常:
2008-11-13 19:55:24,562 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project]]-[ERROR] StandardWrapper.Throwable
java.lang.OutOfMemoryError: Java heap space
2008-11-13 19:55:24,578 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project]]-[ERROR] Servlet /project threw load() exception
java.lang.OutOfMemoryError: Java heap space
2008-11-13 19:55:26,875 [org.apache.struts.validator.ValidatorPlugIn]-[INFO] Loading validation rules file from '/WEB-INF/validator-rules.xml'
2008-11-13 19:55:27 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2008-11-13 19:55:27 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2008-11-13 19:55:27 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/47 config=null
2008-11-13 19:55:27 org.apache.catalina.storeconfig.StoreLoader load
信息: Find registry server-registry.xml at classpath resource
2008-11-13 19:55:27 org.apache.catalina.startup.Catalina start
信息: Server startup in 49641 ms
已经两天了,我实在是没办法了,还请各位朋友帮帮忙!
[解决办法]
贴到lucene apache的maillist比这好吧