ElasticSearch性能优化
现象
现在线上ES环境 性能查询较慢,并发增大,性能急剧下降
数据量大概 3000w条
20线程并发67s左右响应
50线程并发161s左右响应
部署版本 6.8.9
部署方式 docker
环境配置 CentOS7 2C 4G
JMETER 测试:
排查原因:
导入线上环境数据到本地,启动本地的ES服务,测试发现性能显著提高,
本地启动ES6.4.1服务(非docker),
以下几种可能导致线上服务性能:
1:数据源不同(线上的数据源包含一些冗余字段)
2:docker启动的ES镜像问题 (配置文件参数,启动参数,内存交换等)
3:内存限制问题(本地8G 线上4G)
4: ES版本的问题
问题排查过程:
1:数据源问题排查: 将本地环境数据导入线上,但是docker容器无法映射读取导入的数据源,镜像启动失败,停止使用docker容器,直接部署ES服务,映射测试环境数据源,无法启动ES,ES镜像映射的数据和ES直接部署的数据无法相互映射,无法排查
2:部署方式问题: 取消docker部署,按照正常流程部署ES服务,将本地环境数据导入线上环境,直接部署ES6.4.1,启动成功,性能提升
20线程并发响应时间提升到3s,50线程响应时间提升到9s,但是和本地的性能相比,仍有差距(本地2s和5s),线上和本地唯一区别就是内存的不同
线上加大内存8G,再次测试 ,性能和本地相近 ,目的达成
测试结果:
3: 版本问题 将本地的6.41更换线上6.8.9 测试发现性能接近
分析结果
1: 原因认定为docker容器启动 由于加了部分参数,或者配置文件的参数没有生效,在写入数据或者读取时候严重限制了检索性能。
ES直接部署无法正常读取docker部署映射的数据文件,两者部署方式产生的数据文件不一样
2:4G的服务器缓存上限2G,8G服务器上限5.8G 所以:8G比4G能支持更多的并发,当访问量过大时,可以更换8g的服务器,或者集群部署分发流量