赞
踩
项目上是用 ES 做数据库,存储的告警数据,量级在千万级别左右。测试在压测之后,系统频繁出现告警记录查询报错,系统不可用。基于此排查分析项目上 Elasticsearch 的使用是否合理。
要针对 jvm 调优,必不可少的是先查看堆内存状况,使用如下命令查看
jstat -gc
jstat -gc命令查看堆分配情况
ES各节点分配信息
节点 | 堆总大小 | 新生代 | survivor | eden | 老年代 | 元数据区 |
data | 15G | 0.243G | 0.024G | 0.195G | 14.756G | 77M |
网上很多文章指出新生代和老年代的默认比例为1:2,但是通过观察发现并不是这样(我们的机器上大约是1:60)。
这篇文章解释了原因:https://bugs.openjdk.java.net/browse/JDK-8153578
查看k8s日志发现elasticsearch频繁发生minior GC,而且每次GC需要花费200-500ms,截图如下:kubectl logs -f -n logging elasticsearch-data-0 --tail=100
需总共给 Elasticsearch 分配 22 GB内存。原因如下:
elasticsearch-data
综上:elasticsearch-data 的调优参数为:-Xms15g -Xmx15g -Xmn10g
elasticsearch-client
综上:elasticsearch-client 的调优参数为:-Xms4g -Xmx4g -Xmn2g
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。