Solr 千万级大数据索引查询导致服务器崩溃的原因和解决

最近对老旧系统改造需要提高大数据量的查询速度,引入了solr。建了个28803309条的索引:

但是查询时出现了后半部分数据无法全部查询出来:

第0-10条可以查出来,

 solrQuery.setStart(0);
 solrQuery.setRows(10);

第1千万到1千万零10条也可以查出来

 solrQuery.setStart(10000000);
solrQuery.setRows(10000010);

但是当setStart()大到一定程度比如
solrQuery.setStart(18000000);
solrQuery.setRows(10)
时,solr服务器就崩溃掉了。必须重启solr服务。

原因分析:
solr的查询涉及到排序,文件里没法直接分页了,所以它是在内存中分页的。在内存中分页,查询速度也非常快,但是需要的内存大,空间换时间。

因此,解决方法:加大内存,查看/solr/bin/下的启动本solr

echo "  -z    Zookeeper connection string; only used when running in SolrCloud mode using -c"
    echo "                   To launch an embedded Zookeeper instance, don't pass this parameter."
    echo ""
    echo "  -m    Sets the min (-Xms) and max (-Xmx) heap size for the JVM, such as: -m 4g"
    echo "                  results in: -Xms4g -Xmx4g; by default, this script sets the heap size to 512m"
    echo ""
    echo "  -s   

可知,solr的启动脚本里默认情况下最大启动内存为512M ,通过启动参数 -m 重启内存为2G

[root@kaifa-19 bin]# ./solr start -m 2g

此时重新访问solr服务 查询任何区域不再崩溃。

可以根据自己的机器配置设置java的合理的jvm内存值

你可能感兴趣的:(solr,服务器,索引)