ES性能优化


怀疑点:

  1. ES 使用的磁盘使用情况排查  --改用SSD.
  2. ES索引慢,查看使用的分词索引。 --
  3. 初次索引的时候,把 replica 设置为 0.
  4. indices.memory.index_buffer_size:10% 这个参数可以进行适当调整.
  5. index.translog.flush_threshold_ops:50000 和 refresh_interval。
  6. Elastic 官方文档建议:一个 Node 最好不要多于三个 shards
  7. JVM heapsize内存不超过Don’t Cross 32 GB!
  8. 机械硬盘并发访问问题index.merge.scheduler.max_thread_count: 1 



配置线程池:

线程池配置建议改为  int(CPU核数*3)/2)+1 ,不允许bulk和'indexing‘线程池大小大于CPU内核数。

如:24核,线程池:( 24*3)/2 +1=37 .同时CPU为24C,,37与24,选24 。




elasticsearch.yml中增加如下设置

indices.memory.index_buffer_size: 20%
indices.memory.min_index_buffer_size: 96mb

# Search pool
thread_pool.search.size: 5
thread_pool.search.queue_size: 100
# 这个参数慎用!强制修改cpu核数,以突破写线程数限制
# processors: 16
# Bulk pool
#thread_pool.bulk.size: 16
thread_pool.bulk.queue_size: 300
# Index pool
#thread_pool.index.size: 16
thread_pool.index.queue_size: 300

indices.fielddata.cache.size: 40%

discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s
---------------------

精细设置全文域:string类型字段默认会分词,不仅会额外占用资源,而且会影响创建索引的速度。所以,把不需要分词的字段设置为not_analyzed


禁用_all字段:对于日志和apm数据,目前没有场景会使用到
副本数量设置为0:因为我们目前日志数据和apm数据在es只保留最近7天的量,全量日志保存在hadoop,可以根据需要通过spark读回到es – 况且副本数量是可以随时修改的,区别分片数量


使用es自动生成id:es对于自动生成的id有优化,避免了版本查找。因为其生成的id是唯一的
设置index.refresh_interval:索引刷新间隔,默认为1s。因为不需要如此高的实时性,我们修改为30s – 扩展学习:刷新索引到底要做什么事情
设置段合并的线程数量:
curl -XPUT 'your-es-host:9200/nginx_log-2018-03-20/_settings' -d '{ 
"index.merge.scheduler.max_thread_count" : 1
}'

段合并的计算量庞大,而且还要吃掉大量磁盘I/O。合并在后台定期操作,因为他们可能要很长时间才能完成,尤其是比较大的段

机械磁盘在并发I/O支持方面比较差,所以我们需要降低每个索引并发访问磁盘的线程数。这个设置允许max_thread_count + 2个线程同时进行磁盘操作,也就是设置为1允许三个线程

发表评论

0 评论
  • 最新评论
  • 按热度排序