居然是你

elasticsearch 之 LockObtainFailedException

rochy 回复了问题 • 2 人关注 • 1 个回复 • 1895 次浏览 • 2018-08-14 08:47 • 来自相关话题

elastic 6.3 源码 导入 eclipse 没有_core. 怎么运行?

God_lockin 回复了问题 • 2 人关注 • 1 个回复 • 5082 次浏览 • 2018-08-14 10:44 • 来自相关话题

Mmap fs可能让大索引访问变得缓慢

kennywu76 发表了文章 • 2 个评论 • 7480 次浏览 • 2018-08-13 17:52 • 来自相关话题

在一年多以前,我写过Elasticsearch 5 入坑指南一文,其中提到将生产的某个ES集群从2.4升级到5.0以后, 冷数据结点搜索性能变差,对大索引进行搜索的时候,io read会长时间飙高,导致系统load很重,甚至到无法响应的程度。
 
通过进一步分析,用Linux下的Sar -B命令,可以看到有大量的数据被pagein到内存。 虽然通过“试”的方法,定位到这个问题和5.0开始使用的mmap fs有关联,并且通过更改为nio fs以后得到解决,但问题的底层根源一直没找到。 
 
近期有空重新去看了一下这个问题, 在Github上发现一个对os底层更熟悉的人提交并分析了类似的问题 Avoid file cache trashing on Linux with mmapfs by using madvise 。  细读之后,感觉该文抓到了问题的本质,以下基于该文做个总结:
  1. mmap fs对比nio fs,省去了磁盘io上的系统调用,并且不需要在jvm内部做io缓存,也减轻了GC压力。 所以通常来说,mmapfs的性能应该更高。 这也是为什么lucene推荐使用mmap fs,并且ES从5.0开始做为默认的store配置的原因。
  2. 然而,mmap系统调用,在内核层面默认会有一个2MB的预读大小设置,也就是说,当映射了一个大文件以后,即使读取其中1k个字节,mmap也会预读取2MB的数据到缓存。 这种策略是基于文件的访问大多数是顺序的假设。
  3. 在ES这个特定的应用场景,如果某数据结点上索引不是很大,系统剩余缓存也足够,一般不会有问题。但是如果是大数据应用场景,典型的如海量的日志ELK应用,则可能对大索引的搜索聚合,产生较多的随机磁盘访问。 从而mmap的预读策略,可能会导致大量的无用数据从磁盘读取到系统缓存。 在系统可用的缓存不是非常宽裕的情况下,某些极端场景下,会导致热数据被过于频繁的踢出内存,再反复读入,让磁盘IO不堪重负。
  4. Lucene有一个NativePosixUtil.madvise(buffer,NativePosixUtil.RANDOM)的native调用,可以用于指导内核对mmap过的文件做读取的时候,禁用预读。 上文作者将该调用hack进lucene代码,做搜索对比测试。 结论是对于磁盘io和cache的消耗,niofs都要好于mmapfs,而patch过的mmapfs则比niofs更好。
  5. 作者的测试仅限于搜索,对于其他类型的io操作,如写入,merge没有做过详尽测试,因此不清楚利弊。
  6. ES官方开发人员认为这是一个有趣的发现,值得深入去探究。对于用户报告的mmap fs性能比nio fs更差的问题,猜测可能是在大索引读取的场景下,预读带来的额外开销,抵消了相对niofs节省的系统调用等开销。 
  7. ES官方提到Lucene已经有一种类似功能的store,叫做NativeUnixDirectory(显然ES目前还没有对这种store的支持),用户动手能力强的话,应该可以利用这个store自己写一个ES plugin。 另外提到JAVA 10提供了O_DIRECT to streams / channels ,似乎官方打算等这个出来以后再看怎么处理这个问题。
  8. 要注意,这个预读是mmap层面的,和块设备的预读是两回事。 我们曾经尝试过使用 blockdev --setra 这个linux命令取消块设备预读,证实无法解决这个问题。

 
结论: 如果ES结点上会存放海量的索引数据,经常会有大索引(如1TB+)的搜索聚合操作,使用NIOFS会更安全,可以避免很多怪异的性能问题。
 

es集群删除某个索引,会导致relocate吗

laoyang360 回复了问题 • 4 人关注 • 1 个回复 • 1235 次浏览 • 2018-08-13 23:19 • 来自相关话题

怎么删除包含中文字符的索引,如图:

rochy 回复了问题 • 3 人关注 • 2 个回复 • 3293 次浏览 • 2018-08-13 17:13 • 来自相关话题

es自动按天创建索引,越来越多,如何删除

cc1079154808 回复了问题 • 5 人关注 • 6 个回复 • 9095 次浏览 • 2020-08-18 21:20 • 来自相关话题

【已处理】

rochy 回复了问题 • 2 人关注 • 1 个回复 • 1155 次浏览 • 2018-08-13 09:06 • 来自相关话题

Caused by: java.lang.NoClassDefFoundError: org/apache/lucene/search/join/ToParentBlockJoinQuery

laoyang360 回复了问题 • 2 人关注 • 1 个回复 • 3063 次浏览 • 2018-08-11 21:38 • 来自相关话题

es慢查询log问题

JackGe 回复了问题 • 4 人关注 • 4 个回复 • 3155 次浏览 • 2018-09-07 21:05 • 来自相关话题

index.cache.field.type在ES5.5.0中如何设置

回复

LXJ 发起了问题 • 1 人关注 • 0 个回复 • 2396 次浏览 • 2018-08-10 18:19 • 来自相关话题

新建索引时的日志问题

laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 2877 次浏览 • 2018-08-11 21:34 • 来自相关话题

es 6.3能在配置文件里设置 副本数为0吗?

zqc0512 回复了问题 • 4 人关注 • 3 个回复 • 6227 次浏览 • 2018-08-13 09:12 • 来自相关话题

elasticsearch运行2个多小时候服务停止

wanghao20 回复了问题 • 3 人关注 • 3 个回复 • 14808 次浏览 • 2018-08-14 21:59 • 来自相关话题

请教各位,ES地理空间功能使用的是哪种坐标系

rochy 回复了问题 • 2 人关注 • 1 个回复 • 3314 次浏览 • 2018-08-13 09:43 • 来自相关话题

_nodes/stats thread_pool 中的bulk 在版本6.3.0中没有了,是哪个版本中取消了吗?

es-learn 发表了文章 • 0 个评论 • 2636 次浏览 • 2018-08-10 10:59 • 来自相关话题

_nodes/stats thread_pool   中的bulk 在版本6.3.0中没有了,是哪个版本中取消了吗?
_nodes/stats thread_pool   中的bulk 在版本6.3.0中没有了,是哪个版本中取消了吗?