乐趣区

es优化

1 查看 es 状态信息的常用命令

# 查询集群状态
GET _cluster/health
#查询每个节点堆设置的大小
GET _cat/nodes?h=heap.max
#查询某个索引的分片、段以及所内存
GET _cat/segments/logstash-info-2019.05.22?v&h=shard,segment,size,size.momery
#查询 node 上所有 segment 占用的 memory 的总和
GET /_cat/nodes?v&h=name,port,sm

减少数据节点上 segment 内存占用的方式

  1. 删除不用的索引
  2. 关闭索引(文件仍然存在于磁盘,只是释放掉内存),需要时可以打开。
  3. 定期对不再更新的索引 force merge。

ES 的 heap 是如何被瓜分掉的?

  1. segment memory
  2. filter cache
  3. field data cache
  4. bulk queue
  5. indexing buffer
  6. state buffer
  7. 超大搜索聚合结果集的 fetch
  8. 对高 cardinality 字段做 terms aggregation

gc overhead 导致数据节点脱离集群

笔者线上的 heap 设置了 32G,导致 gc 的时间过长,从而使节点脱离了集群。如果把 heap size 设置的过小,GC 太过频繁,会影响 ES 入库和搜索的效率。通过增加 ping_timeout 的时间,和增加 ping_retries 的次数来防止节点错误的脱离集群,可以使节点有充足的时间进行 full GC。可以通过调整参数来优化。

discovery.zen.fd.ping_timeout: 1000s
discovery.zen.fd.ping_retries: 10

当然,最好的优化方式,是改进垃圾回收方式,改用 G1GC。

参考文章:
https://www.cnblogs.com/bonel…
https://www.elastic.co/cn/blo…
https://blog.csdn.net/Nonoroy…

退出移动版