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...


棣琦
37 声望5 粉丝

《Linux二进制分析》译者。