精华内容
下载资源
问答
  • mmapfs — index映射到内存,niofs — 并发多线程以NIO的方式读取index文件。 效果:在600G左右的索引,5天索引,确实没有了OOM。但一旦增大到7个索引,就不行了。用jstat命令,即:stat -gcutil 6811 (ES的PID)...

     

    首选,说明笔者的机器环境(不结合环境谈解决方案都是耍流氓): cpu 32核,内存128G,非固态硬盘: RAID0 (4T * 6),单节点,数据量在700G到1800G,索引15亿~21亿。敖丙大人,在蘑菇街,可多集群分片,固态硬盘,比不起啊。

    转载请注明出处:https://www.cnblogs.com/NaughtyCat/p/elasticsearch-OOM-optimize-story.html  

    业务场景:

    保存7天索引,每天有400G。发现ES时不时的OOM,和重启。当索引超过500G的时候,ES重启到加载所有分片,时间约30分钟到1小时。

    题外话,ES OOM 会生成  .hprof 文件,如下图(作者【CoderBaby】):

     用jhat来分析OOM堆转储文件,具体命令如:  jhat -port 7401 -J-Xmx4G java_pid19546.hprof

     

    解决办法:

    • 改文件存储类型,减少内存占用

    设置存储类型为:“nifos” ,即: "index.store.type": "niofs" (原来为“mmapfs”,详见附2)。mmapfs — index映射到内存,niofs — 并发多线程以NIO的方式读取index文件。

    效果:在600G左右的索引,5天索引,确实没有了OOM。但一旦增大到7个索引,就不行了。用jstat命令,即:stat -gcutil 6811 (ES的PID)查看ES的jvm,如下图:

    O: Old space utilization as a percentage of the space's current capacity (老年代空间占用率)。O最高达到79,就往下降,原来为存储类型为“mmapfs”,O很容易就飙到100.

    • 关闭暂时不用的索引,减少打开索引的数量

    关闭索引(文件仍然存在于磁盘,只是释放掉内存,需要的时候可重新打开)。设置打开索引参数: "__es.maxPermanentlyOpenIndices":4 (最大打开索引:7改为4)。

    •  扩大堆内存

    设置堆大小,从15G提高到30G,即: -Xms30g -Xmx30g (注意:最大不要超过物理内存的 %50

    • forcemerge

    设置merge时最大的线程数:index.merge.scheduler.max_thread_count。固态硬盘——默认最大值  Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2)) ,普通旋转磁盘——设置为1

    笔者机器上,单merge 线程,300G的索引耗时:7个小时

    优化效果: term 单条件查询,查询时间从10秒多提高到3秒多,索引减少约%2.85,减少4000多万,具体如下表:

    indextotal_segments_berfore_mergetotal_segments_after_mergequery_IP_after(seconds)  query_IP_after(seconds) decrease(count/percentage)
    pcap_flow-2019-12-09 1412695374137249867103.640196703/ %2.845

     

    可通过命令查看各个分片的情况,如下(可查看总的segments数量):

    curl -s "http://localhost:9200/_cat/segments/pcap_flow-2019-12-10?v&h=shard,segment,size,size.memory" | awk '{sum += $NF} END {print sum}' 

     

    force merge的restful API:

    curl -X POST "localhost:9200/pcap_flow-2019-12-11/_forcemerge?max_num_segments=2"

    说明:

    1)max_num_segments, 设置最大segement数量,数量越小,查询速度提高越明显,但merge耗时越长

    2)全部merge,不加索引ID,则如下:

    curl -X POST "localhost:9200/_forcemerge"

    3)merge过程是串行的,如果同时merge多个,后面的会被阻塞,直到第一个merge完成为止

    4)restful api 查看_segments,如下:

    curl -X GET "localhost:9200/_cat/segments?v&pretty"

    效果如下图:

     

    题外话,如果贵司银子多,可以集群分片,搞SSD,否则只有结构优化,这一招。

     

     附:

    1)官网  index force merge说明: https://www.elastic.co/guide/en/elasticsearch/reference/7.4/indices-forcemerge.html

    2) ES 存储类型: https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html

    3)merge 线程数: https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html

    4)磁盘阵列RAID: https://zh.wikipedia.org/wiki/RAID

    5)关于索引合并的统计分析: http://openskill.cn/article/375

    *****************************************************************************************************

    精力有限,想法太多,专注做好一件事就行

    • 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
    • 写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;如果恰好又对别人有点帮助,那真是一件令人开心的事

    *****************************************************************************************************

    展开全文
  • 默认跟随操作系统 (1) Simple FS(简单文件系统) ...niofs类型是通过NIO将分片索引文件写到文件系统上(映射到Lucene NIOFSDirectory)。它允许多线程同时读取文件。不建议在Windows系统上使用,由于SUN JAVA实现.

     

    默认跟随操作系统

     

    (1) Simple FS(简单文件系统)
    Simplefs类型是一个简单的实现随机访问文件的文件存储系统(映射到Lucene SimpleFsDirectory的)。该实现的并发性能较差(多线程是个瓶颈)。当你需要将索引持久化,最好使用niofs。

    (2) NIO FS(NIO文件系统)
    niofs类型是通过NIO将分片索引文件写到文件系统上(映射到Lucene NIOFSDirectory)。它允许多线程同时读取文件。不建议在Windows系统上使用,由于SUN JAVA实现上的一个错误。

    (3) MMap FS(内存映射文件系统)
    mmapfs类型存储分片索引到文件系统上(映射到Lucene MMapDirectory)通过映射文件到内存中(MMAP)。
    内存映射的过程中将划分出与被映射文件大小一样的虚拟内存空间。使用这个类之前,请确保您有足够的虚拟地址空间。

    Linux下虚拟内存设置:

     # sysctl -w vm.max_map_count=262144
    1
    永久生效:

     update the vm.max_map_count setting in /etc/sysctl.conf.
      # echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
    1
    2
    (4)Hybrid MMap / NIO FS(缺省值, default_fs)
    default_fs默认的类型是NIO FS和MMapFS,它将为每个类型的文件选择最好的文件系统。 目前,只有Lucene的term 路径和DOC值的文件被存储器映射,以降低运行系统的影响。所有其他文件都使用Lucene NIOFSDirectory打开。如果你的term字典很大,地址空间设置(部分叫做“虚拟内存编辑“)也可能适用,。
     

    (5)  memory:对应Lucene中的RamIndexStore。将索引存放在Jvm堆空间之外内存中。
     

     

    展开全文
  • 文章目录File system storage typespre-loading data into the file system cacheIndex Sorting File system storage types ...niofs mmapfs hybridfs pre-loading data into the file system cach...

    File system storage types

    • fs (default)
    • simplefs
    • niofs
    • mmapfs
    • hybridfs

    pre-loading data into the file system cache

    • 专家级设置,详情未来可能会改变
    • 这个设置在 内存 小于 索引 的时候,设置不当会导致 缓存被回收,再使用,导致索引和搜索变慢
    # in config/elasticsearch.yml
    # ["*"]
    # ["nvd", "dvd", "tim", "doc", "dim"]
    index.store.preload: ["nvd", "dvd"]
    
    PUT /my_index
    {
      "settings": {
        "index.store.preload": ["nvd", "dvd"]
      }
    }
    

    Index Sorting

    • nested 字段不能进行索引排序,他们被后续 doc ids 依赖。
    • track_total_hits: early termination of search request
    PUT twitter
    {
        "settings" : {
            "index" : {
                "sort.field" : "date", 
                "sort.order" : "desc" 
            }
        },
        "mappings": {
            "properties": {
                "date": {
                    "type": "date"
                }
            }
        }
    }
    
    PUT twitter
    {
        "settings" : {
            "index" : {
                "sort.field" : ["username", "date"], 
                "sort.order" : ["asc", "desc"] 
            }
        },
        "mappings": {
            "properties": {
                "username": {
                    "type": "keyword",
                    "doc_values": true
                },
                "date": {
                    "type": "date"
                }
            }
        }
    }
    
    # The index sort will be used to rank the top documents and each segment will early terminate the collection after the first 10 matches.
    GET /events/_search
    {
        "size": 10,
        "sort": [ 
            { "timestamp": "desc" }
        ],
        "track_total_hits": false
    }
    
    展开全文
  • vm.max_map_count

    千次阅读 2016-12-26 20:14:00
    Elasticsearch uses a hybrid mmapfs / niofs directory by default to store its indices. The default operating system limits on mmap counts is likely to be too low, which may result in...

    Virtual memoryedit
    Elasticsearch uses a hybrid mmapfs / niofs directory by default to store its indices. The default operating system limits on mmap counts is likely to be too low, which may result in out of memory exceptions.

    On Linux, you can increase the limits by running the following command as root:

    sysctl -w vm.max_map_count=262144
    To set this value permanently, update the vm.max_map_count setting in /etc/sysctl.conf. To verify after rebooting, run sysctl vm.max_map_count.

    The RPM and Debian packages will configure this setting automatically. No further configuration is required.

    转载于:https://www.cnblogs.com/mayidudu/p/6223829.html

    展开全文
  • cluster.name: estest 集群名称node.name: “testanya” 节点名称 node.master: false 是否主节点node....index.store.type: niofs 读写文件方式index.cache.field.type: soft 缓存类型 bootstrap.mlockall: tr...
  • cluster.name: estest 集群名称 ...index.store.type: niofs 读写文件方式 index.cache.field.type: soft 缓存类型 bootstrap.mlockall: true 禁用swap gateway.type: local 本地存储 gateway.recover_after_...
  • Logstash ELK Stack Install & Configuration

    千次阅读 2015-01-05 11:50:31
    Part 1 - Tweak OS Run the following vi /etc/sysctl.conf ...Add the following to the end of the file and save (:wq!...# Elasticsearch uses a hybrid mmapfs / niofs directory by default
  • cluster.name: testindex node.master: false ... index.store.type: niofs index.cache.field.type: soft indices.recovery.max_bytes_per_sec: 250mb node.max_local_storage_nodes: 1 i
  • 1.jdk 1.8 2.配置jvm参数  注:如果出现vm内存错误,可以参考下面的做法:  ...Elasticsearch uses a hybrid mmapfs / niofs directory
  • ElasticSearch 优化配置

    2018-12-12 06:06:53
    索引建立优化 { "settings": { // 副本数 "number_of_replicas": 0, // 分片数 ...number_of_shards"...niofs", // 默认查询字段 "index.query.default_field": &
  • es 索引的存储 .md

    2019-04-24 13:17:45
    2.niofs: 使用 NIO 方式读写索引;NIO 是 java New IO 的简称,NIO 与传统 IO 相比是面向数据块的、非阻塞的; 3.mmapfs: 存储分片信息到文件系统然后通过映射文件到虚拟地址空间中; 详情看这里 ...
  • elasticsearch相关配置

    2015-11-21 22:09:50
    在linux系统上,elasticsearch默认使用hybrid mmapfs / niofs来存储索引文件,因此操作系统主要会通过mmap来限制存储的空间,因此如果存储空间满了,那么会抛出异常,我们可以使用如下命令来更改设置 ...
  • 调整虚拟内存和最大并发连接数 虚拟内存(Virtual memory)->vm.max_map_count Elasticsearch默认使用 hybrid mmapfs / niofs 目录来存储索引。默认操作系统对mmap计数的限制太低,可能引发内存不足的异常 [1]临时...
  • 缘起 常规文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页缓存中,由于页缓存处在内核空间,不能被用户进程直接寻址,所以还需要将页缓存中数据页再次拷贝到...
  • Elasticsearch的Index和meta,目前支持存储在本地文件系统中,同时支持niofs,mmap,simplefs,smb等不同加载方式,性能最好的是直接将索引LOCK进内存的MMap方式。默认,Elasticsearch会自动选择加载方式,另外可以...
  • niofs:该store类型是基于java.nio包中的FileChannel类的实现,该类型允许多线程操作同一个文件,在多线程访问的时候,性能也不会下降。该类型不推荐在windows上使用(主要是因为java实现的bug) mmapfs:该类型...
  • elasticsearch调优技巧

    千次阅读 2017-10-28 09:39:45
    位操作系统,为UNIX系统选择niofs,为Windows系统选择simplefs。如果你可以容忍一个易失的存储,但希望它非常快,可以看看 memory 存储,它会给你最好的索引访问性能,但需要足够的内存来处理所有索引文件、索引和...
  • 上线必备 | 高性能ES5.X部署配置清单

    千次阅读 2017-09-14 21:50:46
    Elasticsearch 对各种文件混合使用了 NioFs( 非阻塞文件系统)和 MMapFs ( 内存映射文件系统)。 请确保你配置的最大映射数量,以便有足够的虚拟内存可用于 mmapped 文件。这可以暂时设置: sysctl -w vm....
  • elasticsearch 索引存储深入详解

    万次阅读 2016-08-09 20:57:57
    最好的一个操作系统的自动选择是:mmapfs使用在Windows的64bit系统上,simplefs使用在windows的32bit系统上,除此之外默认是用(hybrid niofs 和 mmapfs)。 可以通过修改配置文件elasticsearch.yml来指定存储类型...
  • ELK弹性堆栈的心脏--Elasticsearch

    千次阅读 2017-01-08 02:55:18
    Elasticsearch是一个分布式,RESTful的搜索和分析引擎,能够解决越来越多的用例。作为弹性堆栈的核心,它集中存储您的数据,所以你可以发现预期和揭示意外。 Elasticsearch 特性 1、弹性,高度可用 硬件反叛,网络...
  • mmaps / niofs 混合的目录存储类型存储索引。默认的操作系统限制 mmaps (内存映射模式)中的虚拟地址空间限制太小了,可能会导致内存溢出,在Linux上,你可以使用 root 用户通过如下命令扩大限制: sysctl -w ...
  • Elasticsearch 的 Index 和 meta,目前支持存储在本地文件系统中,同时支持 niofs,mmap,simplefs,smb 等不同加载方式,性能最好的是直接将索引 LOCK 进内存的 MMap 方式。默认,Elasticsearch 会自动选择加载方式...
  • index.store.type: niofs

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 230
精华内容 92
热门标签
关键字:

niofs