项目使用Lucene搭建搜索引擎,在全量建立索引时,把40w数据
一并load到内存,然后建立索引,当建到39w时,程序卡住很久没有动静,
此时,发现cpu使用100%,内存4g。
所使用的机器内存8g,但jvm启动时设定了最大堆为4g,也就是说此时内存已经不够了。
在索引建立中,会定时进行索引merge,而merge需要把之前的索引load到内存进行,既耗时
又耗内存。
此时想出了两个解决方案:
1. 40w数据分页load内存,每页1w。
2. 修改jvm启动参数 Xms=8G,即最大的堆大小为8G。
于是先采用方案一试验,结果不到4min就把40w数据的索引建立完毕,而整个过程内存使用在2g稍多。
所以方案二暂时不用。