ElasticSeach性能调优
1. 硬件相关
1.1 硬盘
- 一块好的硬盘,会带来ES整体性能10倍以上提升,推荐在datanode节点上使用SSD硬盘,索引的data目录,存放在SSD硬盘上。
1.2 内存
- 建议内存>128G时,ES使用的JVM内存为30G,lucene会消耗大量的cache,如果索引文件很大,建议预留足够多的cache给lucene使用;
- 如果内存<64G时,需要综合考虑单节点上索引文件的大小来评估,如果索引文件较大,建议ES JVM内存配置为16G,留下足够的内存给cache使用;
2. 操作系统相关
2.1 调整磁盘参数
- 磁盘blockdev参数的readbuffer,建议调整为32
可以通过命令 blockdev --getra /dev/vdb 查看,需要sudo权限,通过命令 blockdev --setra 32 /dev/vdb 进行调整;
3. ES相关
3.1 集群相关
- 检查集群单个datanode节点的负载情况
- 可以通过命令 GET _cat/nodes?v 来查看,重点关注各个节点的 heap.percent和ram.percent指标;
- heap.percent表示ES使用的JVM内存情况,该值应该低于75,如果长时间大于75,表示JVM内存配置不够,如果JVM已经配置到30G,则表示该Datanode节点上的压力较大,需要考虑增加Datanode节点来分摊压力;
- ram.percent 表示机器上内存的使用情况,实际对应linux上的 used+cache内存使用情况,如果该值接近100%,则表示机器上cache内存不够用,主要是由于ES检索中,lucene会消耗大量cache内存,如果cache不够,会导致lucene无法将部分文件加载到cache中,会频繁从磁盘中进行读取,导致查询延时加大;
- 检查集群上各个节点上的shard分布情况
- 可以通过命令 GET _cat/shards?v 来查看,重点关注单个datanode上的shard数量,以及shard的总大小;
建议解决方案
- 如果datanode节点的压力过载,那就要设法降低datanode节点上的压力,主要是要降低节点上活跃的shard数量
- 评估索引是否在使用,关闭不用的索引
- 评估索引的副本数是否合理,降低副本数
- 如果只有部分datanode节点压力过载,可能原因是这些节点上的索引数据量较大,并且较为活跃,可以手工移动shard到其他压力相对较小的datanode上,注意手工调整前,需要先关闭集群的分片自动分配机制,调整完成后再打开;
3.2 索引相关
- 检查索引分片数
- 索引分片数不是越少越好,也不是越多越好,需要结合索引文件的大小,并发写入、查询的性能要求,进行调优,在分片数和性能之间达到一个平衡即可;
- ES官方建议,一个分片的大小在10-40G之间,具体要结合索引的mapping复杂度来进行实际调优;
- 索引的分片数,是在索引创建的时候设置的,无法进行动态调整,如果要调整,需要通过新建索引,然后将旧索引的数据,通过reindex命令迁移到新索引中来进行;
- 检查索引副本数
- 副本数不是越多越好,副本存在的意义,最主要是保障数据的可靠性,另外可以提升查询QPS,但是也会给集群带来翻倍的资源消耗;
- 建议在性能满足要求的情况下,谨慎增加副本数,没有没有特殊场景,使用默认的副本数1即可;
- 参考命令
curl -XPUT "http://127.0.0.1:9200/{index-name}/_settings" -H "Content-Type: application/json" -d '{
"number_of_replicas"
: 0
}'
- 调整refreshtime参数
- refreshtime主要用于索引有写入场景时,写入的数据多久可以被检索到,refreshtime默认为1s,表示数据通过bulk接口写入后,最多1s后数据可以被写入到cache中(不是磁盘),然后就可以被检索到;
- 如果ES仅用于检索,没有写入场景,则可以将refreshtime设置为-1;
- 如果ES有写入场景,但是对检索实时性要求不高,可以将refreshtime设置为一个较大的值,比如60s;
- 参考命令
curl -XPUT
"http://127.0.0.1:9200/{index-name}/_settings" -H "Content-Type:
application/json" -d '{
"refresh_interval": "60s"
}'
- 调整translog参数
- translog存在的意义,是为了保证数据可靠性,当新写入的数据通过refresh刷新到cache,还没有写到磁盘时,如果发生丢失,可以从translog中进行恢复,ES中默认每30分钟进行一次flush操作,或者当translog的数据达到某个上限的时候会进行一次flush操作;
- 而translog的可靠性如何保证呢,ES中默认是每5s将synclog写入磁盘,将这个间隔 index.translog.sync_interval 调大,可以减少磁盘IO的次数;另外,也可以适当调大translog文件多大时会自动写入磁盘的阈值,目的也是为了减少磁盘IO次数;
- 参考命令
curl -XPUT
"http://127.0.0.1:9200/index/_settings?pretty" -d '{
"index.translog.durability": "async",
"index.translog.flush_threshold_size": "1gb",
"index.translog.sync_interval": "30s"
}
- curl -XPUT
'192.168.2.181:9200/index/_settings?pretty' -H "Content-Type:
application/json" -d '{
"index.translog.durability": "async",
"index.translog.flush_threshold_size": "1gb",
"index.translog.sync_interval": "30s"
}
- 检查segment参数
- segment表示shard中的分段,ES中每次flush,会生成一个segment,然后再通过专门的merge线程,对segment进行merge,在检索时,ES会依次去每个segment检索,segment越多,会导致检索效率越低;
- 通过 _cat/shards?v&h=index,shard,prirep,segmentsCount 可以查到shard的segment数量,该值越大,表示shard中存在的分段数量越多,
- 如果索引后续不会再有大规模的写操作,建议可以通过 forcemerge 命令,对segment进行强制合并,可以指定合并后的segment数量, 但是要注意,segment合并操作,会消耗大量的磁盘IO,也会占用两倍于shard大小的磁盘空间,建议在确保磁盘空间足够的情况下,选择闲时进行merge操作;
ElasticSeach性能调优的更多相关文章
- web前端性能调优
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- [网站性能2]Asp.net平台下网站性能调优的实战方案
文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错, ...
- Asp.net平台下网站性能调优的实战方案(转)
转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来 ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- sqlserver性能调优第一步
相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说“调优”这个词.说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手.当然,也有很多人对此不屑一顾,因 ...
- JavaScript:内存泄露、性能调优
1.在进行JS内存泄露检查之前,先要了解JS的内存管理: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Manageme ...
- hadoop 性能调优与运维
hadoop 性能调优与运维 . 硬件选择 . 操作系统调优与jvm调优 . hadoop运维 硬件选择 1) hadoop运行环境 2) 原则一: 主节点可靠性要好于从节点 原则二:多路多核,高频 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
- websphere性能调优之dump命令
websphere性能调优之dump命令 基于WebSphere 构建的企业应用,时常会出现性能问题,在严重的情况下还会提示出内存溢出,这是一件很让人恼怒的事情.在WebSphere Applicat ...
- Java性能调优
一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JV ...
随机推荐
- K8s validating data: the server could not find the requested resource ... with --validate=false
转载: https://blog.csdn.net/yangchao1125/article/details/106193107/
- Python系统模块os.py和sys.py常用函数
OS模块 os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) result = os.ge ...
- mongodb-命令小结
小白暂时在这里记录些涉及到的 在某条记录添加一个字段: 先查询_id: db.subscriptions.find({"channel":"parking.notify. ...
- Java07 异常
一.Error 和 Exception 1.什么是异常 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格 ...
- Codeforces Round #843 (Div. 2) C【思维】
https://codeforces.com/contest/1775/problem/C 题意 题意是说,给你n和x,你要求出最小的满足要求的m,使得 \(n\)&\((n+1)\)& ...
- windows11上面打开HEIC文件的有效方法
今天在传资料的时候,用手机拍了一张照片传到window11,打开时竟然无法打开,顿时有点诧异,仔细看了文件类型(HEIC),可能软件不识别,怎么解决呢? 经过搜索整理尝试了许多方法,没找到一个合适的. ...
- docker镜像原理(二)
一.docker镜像定义 如果我们想要定义mysql5.7镜像应该怎么做? 获取基础镜像,选择一个发行版平台(unbtu.centos) 在centos镜像中安装mysql5.7软件 导出镜像,可以命 ...
- DataTable操作汇总
1.排序 DataTable dt = new DataTable(); dt.Columns.Add("Name"); dt.Columns.Add("Age" ...
- 织梦栏目url的seo处理
织梦本身把栏目静态都放在 a 目录下,一些seoer认为栏目放在根目录下 就是所谓的物理路径更短 更有利于优化 ,第一步 在后台系统设置 保存目录位置 改为 / 这个样整个栏目都是存放在根目录下了但 ...
- xshell he xftp下载网址
https://www.xshell.com/zh/free-for-home-school/