[14]ES性能调优

2020-08-10  本文已影响0人  不怕天黑_0819

本文集主要是总结自己在项目中使用ES 的经验教训,包括各种实战和调优。
主要的优化应该从以下几个方面进行。
bulk使用方式、自己的写入查询场景、优化磁盘IO、段合并、副本设置、刷新时间间隔等。
当上面的优化还是不满足需求时,可以通过修改修改垃圾回收器为G1,清除没用的缓存(对查询有实时性的要求时慎用),锁定内存,合并优化索引。

elasticsearch写入性能优化

● 多线程写入
● bulk操作执行写入命令,注意bulk使用fixed线程池,最大queue_size为200,满了以后的请求会被rejected
● 取消replias,写入完成之后在修改replias>=1
● 提高ES占用内存,ES内存最好占服务器内存的一半,同时最大和最小设置成一样(-Xms、-Xmx),避免GC.
● 增大shard刷新间隔(对实时性要求不高的时候)。写入数据时可以设置为-1。curl -XPUT http://localhost:9200/index/_settings -d '{"index" : {"refresh_interval" : "-1"}}'

elasticsearch其他性能优化方法:

● 设置一个shard的段segment最大数,可以通过减少段文件数,提高查询速度。curl -XPOST 'http://localhost:9200/index/_optimize?max_num_segments=5'
● 去掉mapping中_all域
Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸
"_all" : {"enabled" : false}
● 设置source为压缩模式或者disable
compress=true这个能大大减少index的尺寸
disable将直接没有_source域
● 增加merge.policy.merge_factor数
设置merge.policy.merge_factor到30,初始是10
增加这个数需要更多的内存,bulk index可以调大这个值.
如果是即时索引,应该调小这个值


其他优化手段

采用G1垃圾回收机制代替默认CMS
将 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"

调优最主要目标:1.就是降低 GC 次数时间;2.降低FULLGC 几率
PS:优化代码比优化JVM实在多了

参考链接:es索引优化
备注:所有的修改都是可以在elasticsearch.yml里面修改,也可以通过API来修改,api相对比较灵活。

上一篇 下一篇

猜你喜欢

热点阅读