上下文
我有一个AWS EC2实例
使用
运行 Solr 5.1.0-Xms2048m -Xmx2048m
额外:(更新)
JdbcDataSource
)情况:
Solr上的索引有200,000个文档,每秒查询不超过一次。但是,在大约10天内,服务器的内存和磁盘空间达到90% - 可用空间的95%。
在调查磁盘使用情况sudo du -sh /
时,它只返回2.3G
的总计。不如df -k
告诉我的那样多(Use% -> 92%
)。
我可以通过重新启动Solr服务解决问题。
我缺少什么? Solr如何消耗所有内存和磁盘空间以及如何防止它?
@TTT的额外信息
很抱歉延迟,但过去几天我一直在监控Solr生产服务器。你可以在这里看到一个综述: https://www.dropbox.com/s/x5diyanwszrpbav/screencapture-app-datadoghq-com-dash-162482-1468997479755.jpg?dl=0 Solr的当前状态:https://www.dropbox.com/s/q16dc5t5ctl32od/Screenshot%202016-07-21%2010.29.13.png?dl=0 我在监控开始时重新启动了Solr,现在,2天后,我发现磁盘空间以每天1,5Gb的速度下降。 如果您需要更多细节,请告诉我。
ls -lh /var/solr/logs
- > total 72M
随着监控的到位,我测试了最常见的查询。它确实包含分面(字段,查询),排序,分组......但我并没有真正影响堆和gc计数的各种指标。
答案 0 :(得分:1)
首先,访问your.solr.instance:[port]/[coreName]/admin/system
并检查Solr实际使用的资源数量。 memory
和system
元素对您最有用。它可能是盒子上的其他东西,至少是一些资源使用的罪魁祸首。
对我来说,你可以通过重新启动Solr尖叫“查询和导入令人讨厌的”内存来“解决”这个问题。对于磁盘空间,如果它是后面的日志文件,我不会感到惊讶。我还想知道你是否最终会收到很多旧的,已删除的文件,因为你需要进行大量的delta导入,直到Solr自动删除它们。实际上,如果您转到http://your.solr.instance:[port]/solr/#/[coreName]
,您应该能够看到索引中有多少已删除的文档。如果数量非常非常大,您应该在低使用率期间安排时间来运行优化以消除它们。
另请注意,Solr似乎倾向于尽可能多地填充给定的堆空间。
由于日志是在服务器上生成的,因此请检查其中有多少日志存在。 4.10之后的Solr有一个生成大量日志文件的恶习,这可能会导致磁盘空间问题,尤其是导入频率。有关如何处理Solr对伐木的热爱的信息,我将在Solr 5.1: Solr is creating way too many log files参考我的自我回答。基本上,您需要导航到solr
启动脚本以禁用Solr的日志备份,然后将其替换为您自己的解决方案。
如果您有主从设置,请检查从属设备是否正在备份某些配置文件,例如schema.xml
或solrconfig.xml
。
根据每个delta导入的记录数量,您可能会有相互重叠的提交,这将影响您的盒子上的资源使用情况。如果您在日志中阅读了有关重叠ondecksearchers
的任何内容,那么这绝对是一个问题。
许多三角洲进口也意味着许多提交。提交是一项相当繁重的操作。您需要在多个文档之后将solrconfig.xml
调整为软提交,稍后再进行一次硬提交。如果您批量执行提交,那么频繁的增量应该会产生较小的影响。
如果要加入导入列,则可能需要为数据库中的已加入列编制索引。如果您的数据库与Solr不在同一台计算机上,则网络延迟可能是一个问题。这是我过去一直在努力的一个。如果数据库在同一台机器上并且您需要索引,那么不进行索引肯定会对您的机器资源产生负面影响。
在Solr上使用VisualVM之类的东西来查看堆使用情况和GC可能会有所帮助。你想确保没有快速增加使用量,你还要确保GC没有一堆可能导致你的盒子出现怪异的世界各地的收藏。
优化是一项非常密集的操作,在4.10之后,您根本不需要经常使用(如果有的话)。但是,有些人仍然会这样做,如果您有大量已删除的文档,那么对您来说可能会有所帮助。如果您决定采用优化策略,则应仅在使用率较低时进行,因为优化会使索引的大小暂时加倍。优化合并段并删除标记为通过增量删除的文件。
“大字段”是指其中包含大量数据的字段。您需要查找正在使用的每种字段类型的大小限制,但如果您针对特定字段运行最大大小,则可能需要尝试找到减小数据大小的方法。或者,您可以省略将这些大列导入Solr,而是在从Solr获取特定文档后从源DB中的列中检索数据。这取决于您的设置和您的需求。你可能会或可能不会做很多事情。如果你让其他一切运行得更有效率,你应该没问题。
您运行的查询类型也会导致问题。大量的排序,刻面等可能非常耗费内存。如果我是你,我会将VisualVM挂钩到Solr,这样我就可以查看堆使用情况和GC,然后使用典型查询加载测试Solr。
答案 1 :(得分:1)