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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。