Solr 千万级大数据索引查询导致服务器崩溃的原因和解决
2016-11-10 17:48
696 查看
最近对老旧系统改造需要提高大数据量的查询速度,引入了solr。建了个28803309条的索引:
但是查询时出现了后半部分数据无法全部查询出来:
第0-10条可以查出来,
第1千万到1千万零10条也可以查出来
但是当setStart()大到一定程度比如
solrQuery.setStart(18000000);
solrQuery.setRows(10)
时,solr服务器就崩溃掉了。必须重启solr服务。
原因分析:
solr的查询涉及到排序,文件里没法直接分页了,所以它是在内存中分页的。在内存中分页,查询速度也非常快,但是需要的内存大,空间换时间。
因此,解决方法:加大内存,查看/solr/bin/下的启动本solr
可知,solr的启动脚本里默认情况下最大启动内存为512M ,通过启动参数 -m 重启内存为2G
此时重新访问solr服务 查询任何区域不再崩溃。
可以根据自己的机器配置设置java的合理的jvm内存值
但是查询时出现了后半部分数据无法全部查询出来:
第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内存值
相关文章推荐
- 全量导入数据 导致solr内存溢出 崩溃问题解决
- 解决服务器返回错误数据格式导致Json解析出错造成app崩溃
- 解决HP服务器因为内存原因导致ESX/ESXi安装失败案例
- mysql服务器查询慢原因分析与解决方法
- mysql慢查询原因分析与解决(三)——索引及查询优化
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 《对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们》的问题的解决方法
- 解决HBase在数据大量写入时导致RegionServer崩溃问题
- mysql服务器查询慢原因分析与解决方法小结
- mysql服务器查询慢原因分析与解决方法小结
- 解决mysqldb查询大量数据导致内存使用过高的问题
- 解决:登录角色更改导致数据查询报错
- 解决mysqldb查询大量数据导致内存使用过高的问题
- 使千万级数据表在多人进行双向LIKE查询快速,并且不再消耗服务器资源
- mysql 复制slave服务器数据延迟的原因与解决方法
- 添加索引后新数据查询速度慢,老数据速度快什么原因? ...
- 数据值为NULL,导致条件查询不到正确结果,ISNULL函数的使用解决问题
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法