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 内存占用的方式
- 删除不用的索引
- 关闭索引(文件仍然存在于磁盘,只是释放掉内存),需要时可以打开。
- 定期对不再更新的索引 force merge。
ES 的 heap 是如何被瓜分掉的?
- segment memory
- filter cache
- field data cache
- bulk queue
- indexing buffer
- state buffer
- 超大搜索聚合结果集的 fetch
- 对高 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…