文档章节

Elasticsearch调优——segment memory

perofu
 perofu
发布于 2017/09/21 15:09
字数 1326
阅读 3292
收藏 26

1、索引之segment memory:

 

       一个segment是一个完备的lucene倒排索引,而倒排索引是通过词典(Term Dictionary)到文档列表(Postings List)的映射关系,快速做查询的。所以每个segment都有会一些索引数据驻留在heap里

       因此segment越多,瓜分掉的heap也越多,并且这部分heap是无法被GC掉的

       怎么知道segment memory占用情况呢? CAT API可以给出答案。

       1)、查看一个索引所有segment的memory占用情况:

 

curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/segments?v'

index                             shard prirep ip         segment   generation   docs.count     docs.deleted     size       size.memory      committed searchable version compound

www-nginx-tp-2017-08-20        0     p      192.168.58.158 _s9v         36643      58203            0                56.8mb      127077         true      true       6.5.1   false

 

 

       2)、查看一个node上所有segment占用的memory总和:

curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/nodes?v&h=segments.count,segments.memory,segments.index_writer_memory,segments.version_map_memory,segments.fixed_bitset_memory'

segments.count segments.memory segments.index_writer_memory segments.version_map_memory segments.fixed_bitset_memory

          9488           1.1gb                       75.8mb                       1.3mb                       29.1kb

 

    减少data node上的segment memory占用,有三种方法:

    ①、删除不用的索引

    ②、关闭索引(文件仍然存在于磁盘,只是释放掉内存)。需要的时候可重新打开。

    ③、定期对不再更新的索引做force merge(之前版本是optimze)

       【关闭索引减少的segment memory占用,会比force merge要多很多

    【本文的索引是按天区分的,所以之前的索引文件,就不会再有更新了】

 

①、force merge【完全合并索引】:

       此项操作,时间长短和服务器负载,根据索引大小决定建议凌晨操作前一天的索引

 

curl -s -XPOST -uelastic:changeme 'http://192.168.58.158:9200/api-nginx-tp-*/_forcemerge?max_num_segments=1'

       实例:

#索引合并前

[root@elk ~]$curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/indices?v'|grep api-nginx-tp-2017-09-04

green  open   api-nginx-tp-2017-09-04        6r1H7VDQR6K0A5HkP-dyrg   5   0   46840141            0     24.5gb         24.5gb

#一共是133

[root@elk ]$curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/segments?v'|grep api-nginx-tp-2017-09-04

api-nginx-tp-2017-09-04        0     p      192.168.58.158 _dtw         17924     622749            0  301.4mb      537606 true      true       6.5.1   false

api-nginx-tp-2017-09-04        0     p      192.168.58.158 _jv5         25745    1322064            0  630.2mb     1046505 true      true       6.5.1   false

api-nginx-tp-2017-09-04        0     p      192.168.58.158 _vc1         40609     432480            0  212.6mb      394258 true      true       6.5.1   false

.................................

api-nginx-tp-2017-09-04        4     p      192.168.58.158 _2m0k       121844       1437            0  946.5kb       14959 true      true       6.5.1   true

 

#合并索引

[root@elk-aliyun-10.47.58.158 ~]$curl -s -XPOST -uelastic:changeme 'http://192.168.58.158:9200/api-nginx-tp-2017-09-04/_forcemerge?max_num_segments=1'

{"_shards":{"total":5,"successful":5,"failed":0}}

 

#合并索引后

[root@elk ~]$curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/indices?v'|grep api-nginx-tp-2017-09-04

green  open   api-nginx-tp-2017-09-04        6r1H7VDQR6K0A5HkP-dyrg   5   0   46840141            0     21.3gb         21.3gb

 

[root@elk ~]$curl -s -uelastic:changeme 'http://192.168.58.158:9200/_cat/segments?v'|grep api-nginx-tp-2017-09-04

api-nginx-tp-2017-09-04        0     p      192.168.58.158 _2qpk       127928    9366137            0    4.2gb     6526325 true      true       6.5.1   false

api-nginx-tp-2017-09-04        1     p      192.168.58.158 _2rti       129366    9366212            0    4.2gb     6522427 true      true       6.5.1   false

api-nginx-tp-2017-09-04        2     p      192.168.58.158 _2tam       131278    9371827            0    4.2gb     6538908 true      true       6.5.1   false

api-nginx-tp-2017-09-04        3     p      192.168.58.158 _2kc3       119667    9369922            0    4.2gb     6528417 true      true       6.5.1   false

api-nginx-tp-2017-09-04        4     p      192.168.58.158 _2m0l       121845    9366043            0    4.2gb     6519260 true      true       6.5.1   false

 

总结:

1、合并前:indices是24.5gbsegments133

2、合并后:indices是21.3gbsegments有实际的logstash客户端个数

 

segments合并之前的size.memory是38372792,合并之后是32635337,少了5.5M左右

 

②、close index:

 

       针对不使用的index,建议close,减少内存占用。因为只要索引处于open状态,索引库中的segement就会占用内存,close之后就只会占用磁盘空间了。

 

curl -s -XPOST -uelastic:changeme 'http://192.168.58.158:9200/api-nginx-tp-2017-08-28/_close'

curl -s -XPOST -uelastic:changeme 'http://192.168.58.158:9200/*-2017-08-28/_close'

 

③、调优思路及脚本:

 

#对于按天存储的nginx日志【视情况而定】:

       1)、索引合并的,第二天凌晨合并前一天的

       2)、索引关闭的,可以关闭7天前的

    脚本可以看到优化前和优化后, segment memory 的变化,包括索引的合并和关闭

#!/bin/bash

#Author:

#            perofu

#Email:

#            perofu.com@gmail.com

 

log_file=/tmp/elasticsearch_optimize_index.log

day=`date "+%Y-%m-%d"`

day_1=`date -d "1  days ago"  "+%Y-%m-%d"`

day_7=`date -d "7  days ago"  "+%Y-%m-%d"`

ip="192.168.58.158"

index_name="bb-nginx-tp

aa-nginx-tp"

 

#number_of_replicas setting 0

curl -XPUT -uelastic:changeme "http://${ip}:9200/*-${day}/_settings" -d '

{

    "number_of_replicas": 0

}'

# clear cache

curl -s -uelastic:changeme -XPOST 'http://${ip}:9200/_cache/clear'

echo "${day}" >> ${log_file}

 

curl -s -uelastic:changeme 'http://${ip}:9200/_cat/nodes?v&h=segments.count,segments.memory,segments.index_writer_memory,segments.version_map_memory,segments.fixed_bitset_memory' &>> ${log_file}

#optimize segment

 

echo "${index_name}" | while read line

do

        echo "" >> ${log_file}

        curl -s -uelastic:changeme 'http://${ip}:9200/_cat/indices?v' | grep "${line}-${day_1}" &>> ${log_file}

    curl -s -uelastic:changeme 'http://${ip}:9200/_cat/segments?v'|grep "${line}-${day_1}" | awk 'BEGIN{summ=0}{summ=summ+$10}END{print summ}' &>> ${log_file}

 

        curl -s -XPOST -uelastic:changeme "http://${ip}:9200/${line}-${day_1}/_forcemerge?max_num_segments=1" &>> ${log_file}

        sleep 10

        curl -s -uelastic:changeme 'http://${ip}:9200/_cat/indices?v' | grep "${line}-${day_1}" &>> ${log_file}

        curl -s -uelastic:changeme 'http://${ip}:9200/_cat/segments?v'|grep "${line}-${day_1}" | awk 'BEGIN{summ=0}{summ=summ+$10}END{print summ}' &>> ${log_file}

        echo "" >> ${log_file}

done

 

curl -s -uelastic:changeme 'http://${ip}:9200/_cat/nodes?v&h=segments.count,segments.memory,segments.index_writer_memory,segments.version_map_memory,segments.fixed_bitset_memory' &>> ${log_file}

 

#close index 7 day ago

echo "${index_name}" | while read line

do

        echo "" >> ${log_file}

        curl -s -XPOST -uelastic:changeme "http://${ip}:9200/${line}-${day_7}/_close" &>> ${log_file}

        sleep 2

done

 

curl -s -uelastic:changeme 'http://${ip}:9200/_cat/nodes?v&h=segments.count,segments.memory,segments.index_writer_memory,segments.version_map_memory,segments.fixed_bitset_memory' &>> ${log_file}

 

4、调优效果:

 

①、索引调优效果:

    环境说明【单机】:

        ==== 服务器信息 ====  

  CPU 信息: 8  Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz  

  CPU 核数: 8 

  内存信息: 16G  

  硬盘信息: 1116 G  

  发行版信息: 6.5    

  系统架构: x86_64

  系统运行级别: 3 

#优化前和优化后数据量的对比:

#优化前

2017-09-05【60G

392.7mb

681.6kb

11.6gb

21.6gb

317.8mb

9.8mb

681.4mb

27.7gb

 

#优化后

2017-09-06【60G

11.2gb

9.2mb

294.8mb

26.5gb

20.6gb

620.9mb

661.4kb

376.7mb

 

2017-09-07【60G

10.5gb

289.5mb

412.3mb

8.7mb

20gb

25.6gb

598.7mb

830.9kb

 

    一段时间总PV:

    一段时间的服务器负载:

    优化前后负载对比:

 

        如果你也使用了,可以把优化前后对比,在下方回复下,谢谢。

 

© 著作权归作者所有

共有 人打赏支持
perofu
粉丝 128
博文 155
码字总数 131715
作品 0
广州
系统管理员
私信 提问
在ElasticSearch之下(图解搜索的故事)(02-28 - 03-04)

摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我的搜索 foo-bar 无法匹配 foo-bar ? 为什么增加更多的文件会压缩索引(Index)? 为什么Elast...

浮躁的码农
02/28
0
0
logstash、elasticsearch、kibana搭建日志平台

1、下载logstash a、官方下载地址:https://www.elastic.co/downloads/logstash b、解压:tar -xzvf logstash-5.1.1.tar.gz c、设置用户测试的配置文件:vim logstatsh_test.conf,编辑内容如...

binhu
2018/05/23
0
0
ELK跳不过的ES,图解助你掌握内部模型及数据结构

本文我们将会先自上而下,后自底向上地介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我的搜索foo-bar无法匹配foo-bar? 为什么增加更多的文件会压缩索引(Index)? 为什么E...

DBAplus社群
01/11
0
0
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
2018/06/04
69
0
死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招!

开篇 人工智能、大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需。Elasticsearch 作为开源领域的后起之秀,从2010年至今得到飞跃式的发展。 Elasticsearch 以其开源、...

浮躁的码农
2018/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何开发一款以太坊(安卓)钱包系列2 - 导入账号及账号管理

这是如何开发一款以太坊(安卓)钱包系列第2篇,如何导入账号。有时用户可能已经有一个账号,这篇文章接来介绍下,如何实现导入用户已经存在的账号。 导入账号预备知识 从用户需求上来讲,导...

Tiny熊
今天
2
0
intellJ IDEA搭建java+selenium自动化环境(maven,selenium,testng)

1.安装jdk1.8; 2.安装intellJ; 3.安装maven; 3.1 如果是单前用户,配置用户环境变量即可,如果是多用户,则需配置系统环境变量,变量名为MAVEN_HOME,赋值D:\Application\maven,往path中...

不最醉不龟归
今天
3
0
聊聊ShenandoahGC的Brooks Pointers

序 本文主要研究一下ShenandoahGC的Brooks Pointers Shenandoah Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有 Snapshot-at-the-beginning concurrent mark包括Init Mark(P......

go4it
昨天
3
0
Makefile通用编写规则

#简单实用的Makefile模板: objs := a.o b.o test:$(objs) gcc -o test $^ # .a.o.d .b.o.d dep_files := $(foreach f,$(objs),.$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(d......

shzwork
昨天
2
0
《万历十五年》的读后感作文4000字

《万历十五年》的读后感作文4000字: 万历十五年,即1587年,距今已过去432年。在明朝276的历史中,这一年很平淡,并没有什么特别之处。黄仁宇的《万历十五年》一书,有别于其他的历史叙述方...

原创小博客
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部