再谈Solr core LRU–注册3W个SolrCore索引大数据

之前我们利用 Solr现成的LRU对Core进行动态加载 http://jacoxu.com/?p=595,但是有个问题是先注册的core都没有进入加载的LRU队列中,可以通过界面显示:http://localhost:8983/solr/admin/cores?action=STATUS 返回所有的状态,未加载的core的 isLoaded属性是false。不过4.6版本修复了个这个bug,可以进行尝试。对于大数据来说,这个bug的修复无疑是值得庆祝的!

下面我们来做一个测试,尝试在单个solr实例中创建万级规模的core,
1、测试单实例最大Core数和实例数,测试环境:Linux-Suse11.1 24processors, 2.0GHz, 64G RAM. ,申请内存16G
【试验】:每个core有545条短文本,测试在单实例中创建25000个core,从创建第一个core只用了0.3秒,到第3500个core用了1.1秒,创建新core速度都很快,并没有太大影响。目前所有的core都处于加载状态,打开文件数已经达到25469,使用内存达9G,下面重启tomcat使得目前加载的core进入LRU队列中。重启之后,只打开了1个core,其他所有的core进入未索引数据未加载状态。
然后重启入库程序,继续创建新core,此时创建速度很慢,Solr基本处于卡死状态。创建一个新core用了7分钟,最重要的是,这段时间内,基本无法完成其他基本查询功能。
停掉入库程序之后,Tomcat仍然处于卡死状态,重启tomcat

尝试更新Solr最新版本4.6,创建一个core只使用了0.2秒,创建到3500个core时也只使用0.3秒。而且,所有的core都在LRU-100队列中进行动态加载。文件打开数维持在800左右,内存使用峰值为7G。

接下来把LRU设为50,重启tomcat后继续插数据,测试单实例的CoreList上限
注意由于文件夹同级目录有上限32000,所以最好同时写入到多个目录中去。

持续创建新core,LRU-50,创建到6K左右时,内存占用率达8G左右,创建新core在0.5秒左右,commit 5000条数据在0.5秒左右,文件打开数维持在300左右。创建到1W7左右的时候,Tomcat内存使用到15G,文件打开数维持在300左右,创建一个新core 1秒左右,插入5000条数据使用0.6秒或26秒,重启tomcat,界面初始化时反应有些迟钝 有10分钟之久,入库程序可正常插入,创建到25000个core时,创建Core的速度仍然很快,不超过2秒,不过持续写入数据出现JVM GC问题,有时会稍慢一些到1分钟左右。值得注意的是重启tomcat居然用了45分钟之久,想必是刷了一遍每个core的STATUS,这个操作很会很慢,此时Tomcat只占用了一个processor的100%CPU进行处理。

我们尝试下一个试验,把25000个core分布到10个实例中去,减少每个实例所维护的CoreList,或许刷新Core STATUS的时候多个实例能够并发。在入库时,查看CPU的状态能够发现,单线程写入Solr多实例时,虽然Tomcat基本也占用100%左右的CPU,但是会分布到多个CPU上。由于时间问题这个试验没有做完,只索引了14000个core,此时重启tomcat用了不到3分钟,时间尚可接受,待进一步后续验证。

另一点值得注意的是,tomcat下的实例数并非可以无限制增加,在SuSE-11.1 64G环境下曾部署过10个实例没有问题,但是在SuSE-11.2 256G环境下部署6个实例就无法启动,报出如下错误:
OutOfMemoryError thrown from the uncaughtExceptionHandler in thread “main”
OutOfMemoryError thrown from the uncaughtExceptionHandler in thread “http-bio-6080-exec-1”

上述错误,和Xmx没有关系,因为在无数据索引情况下内存使用很少的,不足以OutOfMemory。目前对JVM内存管理不是很了解,触发GC多了,CPU压力会很大,GC少了,RAM吃不消。。。。很多人提到这个东西:-XX: MaxPermSize = 512m

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>