项目中的服务集成了springboot-admin做服务监控,最近一直收到邮件告警,提示es出错。错误信息如下:
org.elasticsearch.ElasticsearchTimeoutException: java.util.concurrent.TimeoutException: Timeout waiting for task.
频繁收到这个告警,所以决定花时间研究一下。从报错信息看,并发超时异常。ES作为java开发的中间件,我们没有对任何代码做过修改,所以就从JVM开始着手尝试解决,同时还涉及到部分ES知识和springboot的知识。
可参考另一篇学习笔记: 深入理解java虚拟机
使用 jstat -gc(-gccapacity, -gcutil)命令查看堆分配情况
每次minor gc,通过将eden和一个survivor的内容复制到另一个survivor, 避免碎片化问题
可参考另外一篇笔记:Elasticsearch学习笔记
主要介绍es官网手册特别说明的一些注意点
要针对jvm调优,必不可少的是先查看堆内存状况,有以下几种查看方法
节点 | 堆总大小 | 新生代 | survivor | eden | 老年代 | 元数据区 |
---|---|---|---|---|---|---|
节点A | 32G | 1.46G | 0.146G | 1.16G | 30.5G | 81M |
节点B | 32G | 1.46G | 0.146G | 1.16G | 30.5G | 85M |
节点C | 32G | 1.46G | 0.146G | 1.16G | 30.5G | 81M |
节点D | 20G | 1.46G | 0.146G | 1.16G | 18.5G | 76M |
工具名称 | 各分区情况 | 数据是否直观 | 是否可查看历史数据 | 是否免费 | 备注 |
---|---|---|---|---|---|
jstat | 是 | 否 | 否 | 是 | 主要用于查看各分区大小 |
ElasticHQ | 否 | 是 | 否 | 是 | 主要用于浏览es整体信息 |
cerebro | 否 | 是 | 否 | 是 | 主要用于浏览es整体信息 |
x-pack | 否 | 是 | 是 | 试用期一年 | 试用期到相关功能不可用,不影响现有功能。6.3版本x-pack已经开源,后续版本可能会免费 |
curl -XPUT 'http://{ip}:9200/_xpack/license?acknowledge=true' -H "Content-Type: application/json" -d @sivabalan-nagarajan-2327c0fa-f56b-443a-a3d6-abef7ecf2220-v5.json
./bin/kibana-plugin install x-pack 安装很慢,先把文件下载下来,用下一个命令安装
./bin/elasticsearch-plugin install file:///home/breakpad/softs/x-pack-5.5.1.zip
es配置文件里,只启用监控功能
xpack.security.enabled: false
xpack.monitoring.enabled: true
xpack.graph.enabled: false
xpack.watcher.enabled: false
kibana配置文件里,只启用监控功能
xpack.security.enabled: false
xpack.monitoring.enabled: true
xpack.graph.enabled: false
xpack.reporting.enabled: false
rpm安装后,systemctl方式启动kibana报权限不足的问题?
kibana启动后网页打不开怎么解决?
曲线中每一天大概24个点,即计算的是每个小时的数据
通过以上分析发现的问题,然后尝试调整参数,并且观察调整后的监控结果,验证我们的推测是否正确。
节点 | 堆总大小 | 新生代 | survivor | eden | 老年代 | 元数据区 |
---|---|---|---|---|---|---|
节点A | 16G | 3.2G | 320M | 2.56G | 12.8G | 77M |
节点B | 20G | 4G | 400M | 3.2G | 16G | 66M |
节点C | 16G | 3.2G | 320M | 2.56G | 12.8G | 77M |
节点D | 16G | 3.2G | 320M | 2.56G | 12.8G | 77M |