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 <zkHost>   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 <memory>   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 <dir>  

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值