我目前正在使用elasticsearch 0.9.19。我使用的机器有大约300GB的磁盘空间,其上的RAM大约是23GB。我已经为弹性搜索分配了大约10GB的ram。我的操作是密集的。他们在1000docs/s
左右。我只在机器上运行弹性搜索而没有其他进程。文档大小不大。它们很小,只有不超过10个字段。弹性搜索仅在具有1个分片和0个副本的一台机器上运行。
当我发送1000 docs/s
时,使用的内存会迅速增加。虽然我只为弹性搜索分配了10GB内存,但仍然消耗了大约21 GB内存,最终弹性搜索过程导致堆空间不足。后来我需要清除操作系统缓存以释放所有内存。即使我停止发送弹性搜索,1000docs/s
,内存也不会自动清除。
因此,例如,如果我使用1000doc/s
编写操作运行弹性搜索,那么我发现它很快就达到了18 GB Ram的使用时间,之后当我将写操作减少到只有10个docs / s时使用的内存仍然显示大约18 GB。我认为应该减少写入操作的数量。我使用批量API来执行每个查询大小为100个文档的写操作。当写入操作大约为1000docs / sec时,数据来自4台机器
这些是我在做顶级之后得到的数字
内存:24731664k总计,18252700k使用,6478964k免费,322492k缓冲
交换:总计4194296k,使用0k,免费4194296k,缓存8749780k
PID用户公关NI VIRT RES SHR S%CPU%MEM TIME + COMMAND
1004弹性20 0 10.7g 8.3g 10m S 1 35.3 806:28.69 java
请告诉我们是否有任何想法,这可能是什么原因。由于这个问题,我必须停止我的申请。我想我缺少任何配置。我已经在这里阅读了弹性搜索的所有缓存相关文档 http://www.elasticsearch.org/guide/reference/index-modules/cache.html
我还尝试使用clear cache API清除缓存,并尝试使用flush api。但没有任何进步。
提前致谢。
答案 0 :(得分:2)
总结邮件列表线程的答案:问题是Ruby客户端无法限制其插入,并且随着大量文档的添加,Lucene内存使用量会增加。我认为提交频率也可能存在问题:为了将新添加的文档刷新到磁盘,不时提交是很重要的。 OP还有问题吗?如果没有,你可以发布解决方案吗?
答案 1 :(得分:1)
我认为您的摄取对于集群容量来说是沉重的。 然后,数据将堆积在内存中。 您应该监视磁盘I / O,这应该是瓶颈。
然后您应该:
作为小的优化,您可以通过以下方式稍微提高性能: