<small id='XD9BK3N'></small> <noframes id='nDRAziwQuJ'>

  • <tfoot id='MBwDf'></tfoot>

      <legend id='SQL6NKC3'><style id='nZuj'><dir id='6D7Gb'><q id='5IN8EPy'></q></dir></style></legend>
      <i id='G3jyz2Yet5'><tr id='c3CYIm'><dt id='Nq0yG6gW1'><q id='D8um'><span id='wVFDH2194'><b id='DnP8'><form id='f56a7'><ins id='sTm9UyKOhN'></ins><ul id='QTB08HOl'></ul><sub id='nqtWS9N'></sub></form><legend id='jONngrA'></legend><bdo id='tWhgvzV'><pre id='HMENkUcr'><center id='9ziehXskBC'></center></pre></bdo></b><th id='zt7n8'></th></span></q></dt></tr></i><div id='ZIK6'><tfoot id='N1e5MlKa'></tfoot><dl id='4NYc'><fieldset id='p2kqyaFZd'></fieldset></dl></div>

          <bdo id='KBgjCR4'></bdo><ul id='QTDYItO'></ul>

          1. <li id='WXMyn'></li>
            登陆

            壹号平台-出产级搜索引擎ES功能调优实战

            admin 2019-09-07 163人围观 ,发现0个评论
            欢迎重视我的头条号:Wooola,10年Java软件开发及架构规划经历,专心于Java、Golang、微服务架构,致力于每天共享原创文章、高兴编码和开源技能。

            1、一切的修正都能够在elasticsearch.yml里边修正,也能够经过api来修正。引荐用api比较灵敏

            1.不同分片之间的数据同步是一个很大的花费,默许是1s同步,假如咱们不要求实时性,咱们能够履行如下:

            $ curl -XPUT 'http://localhost:9200/twitter/' -d '{
            "settings" 壹号平台-出产级搜索引擎ES功能调优实战: {
            "index" : {
            "refresh_interval":"60s"
            }
            }
            }'

            此处咱们是修正为60s 其实能够改为-1s 这样便是不改写,咱们需求在查询的时分进行一次索引改写然后再查询,这个嘛就得看你们用户能忍受多少时刻长度了。

            2、挑选正确的存储

            一般来说,假如运转的是64位操作体系,你应该挑选mmapfs。假如没有运转64位操作体系,为UNIX体系挑选niofs,为Windows体系挑选simplefs。假如你能够忍受一个易失的存储,但期望它非常快,能够看看memory存储,它会给你最好的索引拜访功能,但需求满足的内存来处理一切索引文件、索引和查询。

            3、优化es的线程池

            cache:这是无限制的线程池,为每个传入的恳求创立一个线程。

            fixed:这是一个有着固定巨细的线程池,巨细由size特点指定,答应你指定一个行列(运用queue_size特点指定)用来保存恳求,直到有一个闲暇的线程来履行恳求。假如Elasticsearch无法把恳求放到行列中(行列满了),该恳求将被回绝。有许多线程池(能够运用type特点指定要装备的线程类型),可是,关于功能来说,最重要的是下面几个。

            index:此线程池用于索引和删去操作。它的类型默许为fixed,size默许为可用处理器的壹号平台-出产级搜索引擎ES功能调优实战数量,行列的size默许为300。

            search:此线程池用于查找和计数恳求。它的类型默许为fixed,size默许为可用处理器的数量乘以3,行列的size默许为1000。

            suggest:此线程池用于主张器恳求。它的类型默许为fixed,size默许为可用处理器的数量,行列的size默许为1000。

            get:此线程池用于实时的GET恳求。它的类型默许为fixed,size默许为可用处理器的数量,行列的size默许为1000。

            bulk:你能够猜到,此线程池用于批量操作。它的类型默许为fixed,size默许为可用处理器的数量,行列的size默许为50。

            percolate:此线程池用于预匹配器操作。它的类型默许为fixed,size默许为可用处理器的数量,行列的size默许为1000。

            elasticsearch.yml中能够设置 :

            threadpool.index.type: fixed
            threadpool.index.size: 100
            threadpool.index.queue_size: 500

            当然能够restAPI设置

            curl -XPUT 'localhost:9200/_cluster/settings' -d '{
            "transient": {
            "threadpool.index.type": "fixed",
            "threadpool.index.size": 100,
            "threadpool.index.queue_size": 500
            }
            }'

            4、index过于巨韩国理论电影大导致es常常奔溃

            es最近老是挂掉,平白无故,体现症状为 关于巨细超越100g的index(5个分片 1e数据量左右)刺进超级慢,因为机器资源有限 ,只能想出 将每一天的数据树立一个index+“yyyy-MM-dd” 这样能够有用缓解咱们集群的压力,有人会说假如改成这种计划那么之前写的查询岂不是废了,其实很easy,es支撑index通配符 比方你之前是logment 现在是logment2015-05-01和logment2015-05-02 现在只需求将查询的代码中index改为 logment* 就ok了 ,而且此法便于删去过期的index 写一个守时使命就ok了

            咱们日志的架构是这样的 logstash(client1) 收集日志到 redis 然后经过 logstash(client2) 从redis转至 elasticsearch ,logstash写入elasticsearch的时分默许便是依照每天来树立索引的 在其装备文件无需指明 index和type 即可。

            此处会发生一个问题,便是logstash 主动树立索引的时分是依据格林尼治时刻来树立的 正正比咱们的时刻 迟了8小时,咱们需求在logstash的lib里边找到event.rb 然后找到 org.joda.time.DateTimeZone.UTC 格林尼治时刻 改成 org.joda.time.DateTimeZone.getDefault() (获取本地时刻类型 我这边运转便是我国/上海) 即可 话说logstash用的居然是大名鼎鼎的joda 果然是优异程序 。

            5、选用G1废物收回机制替代默许CMS

            这儿我不剖析cms和g1的细节差异,大内存(超越8g)下G1仍是很给力的,亲测有用,用了G1 一周内一次FULLGC 都没有,哈哈

            elasticsearch.in.sh内将:

            # Force the JVM to use IPv4 stack
            if [ "x$ES_USE_IPV4" != "x" ]; then
            JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
            fi

            JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC"
            JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC"

            JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=75"
            JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly"

            替换为

            JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
            JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"

            功德圆满

            趁便说句JVM调优,调优最主要方针:1.便是下降 GC 次数时刻;2.下降FULLGC 几率

            PS:优化代码比优化JVM真实多了

            6、整理掉没用的缓存

            回想之前的问题发现jvm调优关于老时代的收回并没有很明显的作用,跟着时刻的推移内存仍是不行~后来壹号平台-出产级搜索引擎ES功能调优实战才发现是es cache的问题

            其实集群树立时咱们是能够调整每隔节点的缓存份额、类型、者巨细的

            # 确定内存,不让JVM写入swapping,防止下降ES的功能
            bootstrap.mlockall: true
            # 缓存类型设置为Soft Reference,只有当内存不行时才会进行收回
            index.cache.field.max_size: 50000
            index.ca壹号平台-出产级搜索引擎ES功能调优实战che.field.expire: 10m
            index.cache.field.type: soft

            可是假如你不想重新装备节点而且重启,你能够做一个守时使命来守时铲除cache

            http://10.22.2.201:9200/*/_cache/clear //铲除一切索引的cache,假如对查询有实时性要求,慎用!

            到了晚上资源闲暇的时分咱们还能兼并优化一下索引

            http://10.22.2.201:9200/*/_optimize

            截止现在咱们es集群有38亿左右数据量,比较稳定~

            来历:cnblogs | NPH

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP