首页 > 其他分享 >Elasticsearch性能优化

Elasticsearch性能优化

时间:2023-11-06 10:33:31浏览次数:35  
标签:sysctl 性能 查询 文档 内存 分片 Elasticsearch 优化 ES

Elasticsearch性能因素总结

Elasticsearch性能优化可以分为四个模块来进行,分别是硬件、操作系统、Elasticsearch参数配置以及查询优化。

硬件优化

在预算充足的情况下。特别是一些高并发业务的搜索。硬件层面占用整个elasticsearch性能空间很大比例。

  1. 内存
    根据业务量不同,内存的需求也不同,一般生产建议不要少于16G。ES是比较依赖内存的,并且对内存的消耗也很大,内存对ES的重要性甚至是高于CPU的,所以即使是数据量不大的业务,为了保证服务的稳定性,在满足业务需求的前提下,我们仍需考虑留有不少于20%的冗余性能。一般来说,按照百万级、千万级、亿级数据的索引,我们为每个节点分配的内存为16G/32G/64G就足够了。
  2. 硬盘
    对于ES来说,硬盘可能是最重要的了,因为数据都是存储在磁盘上的,当然这里说的磁盘指的是磁盘的性能。磁盘性能往往是硬件性能的瓶颈,木桶效应中的最短板。ES应用可能要面临不间断的大量的数据读取和写入。建议使用一些高性能io的硬盘,SSD。
  3. CPU
    在高并发的情况下,cpu的计算能力要求就很高了。cpu配置尽量高。
  4. 网络
    ES是自带分布式属性的,并且ES的分布式系统是基于对等网络的,节点与节点之间的通信十分的频繁,延迟对于ES的用户体验是致命的,所以对于ES来说,低延迟的网络是非常有必要的。

操作系统优化

  1. 设置最大文件打开数
ulimit -a  查看    
ulimit -HSn 655360     s 代表软件资源,n代表硬件资源  系统重启之后恢复默认
echo "*               soft    nofile          655360
*               hard    nofile          655360
*               soft    nproc           77823
*               hard    nproc           77823
*               hard    memlock         unlimited
*               soft    memlock         unlimited" >> /etc/security/limits.conf
  1. 优化相关内核及内存参数
sysctl -w vm.swappiness=1
sysctl -w vm.overcommit_memory=1
sysctl -w net.core.somaxconn=2048
sysctl -w vm.max_map_count=262144
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf 
echo "vm.swappiness=1" >> /etc/sysctl.conf
echo "net.core.somaxconn=2048" >> /etc/sysctl.conf
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

swappiness:取值0-100,越低,不积极依赖交换空间、越高,积极依赖交换空间
overcommit_memory:是一个内核对内存分配的一种策略。取值又三种分别为0(表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程),1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何),2(表示内核允许分配超过所有物理内存和交换空间总和的内存)。
max_map_count:是一个与内核虚拟内存子系统相关的参数,用于控制进程可以拥有的内存映射区域的最大数量。它通常用于限制一个进程可以打开的文件数量,特别是在使用大量内存映射文件的情况下。
net.core.somaxconn:是TCP/IP协议栈内核参数之一,用于指定处于监听状态的连接请求队列的最大长度
  1. 关闭transparent_hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo "############################################
#disable THP
############################################
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi" >> /etc/rc.d/rc.local

Elasticsearch参数优化

  1. 优化GC,减少GC时间
    修改config/jvm.options文件中-Xms、-Xmx,建议设置为操作系统内存的一半,一般生产建议不要少于16G。
  2. 调整ping机制
    如果有节点超时,master默认ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。
discovery.zen.fd.ping_timeout: 60s         ###超时时间
discovery.zen.fd.ping_retries: 6           ###ping重试次数
discovery.zen.fd.ping_interval: 10s        ###ping间隔时间
  1. 分片优化
    按自己的业务需求控制shard数量,shard过多,交互多。shard过少,单个分片数据容易累积,当单个分片的数据超过30G的时候就有性能下降的情况,当超过50G的时候,就有明显性能下降的效果。
    集群分片规范:
- 控制每个分片大小不超过30G,不超过 ES 的最大 JVM 的堆空间设置(一般设置不超过 32 G),因此,如果索引的总容量在 500 G 左右,那分片大小在 16 个左右即可。
- 考虑一下 node 数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,很可能会导致一个节点上存在多个分片,导致数据分布不均匀,部分节点磁盘使用率高。所以,建议单个索引分片数量不超过节点数量。
  1. 锁住ES内存
    ES在内存不够JVM开启swapping的时候,表现得会很差,所以为了避免这个问题,将该属性设为true,表示锁定es所使用的内存:
bootstrap.memory_lock: true

查询优化

  1. 避免单次召回大量数据
    搜索引擎最擅长的事情是从海量数据中查询少量相关文档,而非单次检索大量文档。非常不建议动辄查询上万数据。如果有这样的需求,建议使用滚动查询。
  2. 避免单个文档过大
    鉴于默认http.max_content_length设置为 100MB,Elasticsearch 将拒绝索引任何大于该值的文档。您可能决定增加该特定设置,但 Lucene 仍然有大约 2GB 的限制。即使不考虑硬性限制,大型文档通常也不实用。大型文档对网络、内存使用和磁盘造成了更大的压力,即使对于不请求的搜索请求也是如此,_source因为 Elasticsearch_id在所有情况下都需要获取文档的文件系统缓存有效。对该文档进行索引可能会占用文档原始大小的倍数的内存量。
  3. 单次查询10条文档,好于10次查询每次一条
    批量请求将产生比单文档索引请求更好的性能。但是每次查询多少文档最佳,不同的集群最佳值可能不同,为了获得批量请求的最佳阈值,建议在具有单个分片的单个节点上运行基准测试。
  4. 使用filter代替query
    query和filter的主要区别在: filter是结果导向的而query是过程导向。query倾向于“当前文档和查询的语句的相关度”而filter倾向于“当前文档和查询的条件是不是相符”。即在查询过程中,query是要对查询的每个结果计算相关性得分的,而filter不会。另外filter有相应的缓存机制,可以提高查询效率。
  5. 避免深度分页
    避免单页数据过大。es提供两种解决方案 scroll search 和 search after。
  6. 使用Keyword类型
    并非所有数值数据都应映射为数值字段数据类型。Elasticsearch为 查询优化数字字段,例如integeror long。如果不需要范围查找,对于 term查询而言,keyword 比 integer 性能更好。

标签:sysctl,性能,查询,文档,内存,分片,Elasticsearch,优化,ES
From: https://blog.51cto.com/u_13482808/8202066

相关文章

  • elasticsearch笔记一
    安装官网链接:[InstallationandUpgradeGuide7.2]|Elastic=》InstallingtheElasticStackhttps://www.elastic.co/guide/en/elastic-stack/7.2/installing-elastic-stack.html系统支持:支持一览表|Elastic启动:sh/usr/local/elasticsearch/bin/elasticsearch-d-p......
  • 记一次翻页性能优化
    背景   由于是公司项目,所以不方便给出代码或者视频,只能列一些自己画的流程图。   大致情况如上,前端有7个显示区。在对其进行滚动翻页的时候,存在以下问题:1.连续滚轮翻页,每次所有显示区刷新完,进行下一次翻页用时较久。(说人话就是,平均耗时翻页时间长)2.连续滚轮翻页,会出......
  • 如何借助数据集更好的评估NLP模型的性能?
    随着信息时代的迅猛发展,每天有无数文本、声音、图片和视频不断涌入互联网。如何从海量数据中提炼有意义信息成为学术界和工业界迫切需要解决的问题。在此背景下,自然语言处理(NLP)应运而生,成为人工智能领域最为活跃的研究领域之一。NLP的目标是让计算机理解和生成人类语言,从而实现与人......
  • HDFS Distcp数据迁移与优化实践
    1.背景对于HDFS集群而言,不可避免会将一个集群中的数据迁移到另外一个集群中。一般以下几种情况需要进行迁移:hadoop2集群中的项目数据迁移到hadoop3中。hadooprbf的一个子集群block数量在2亿~3亿,需要将大项目迁移到其他空闲子集群。海外项目数据由于历史原因存放到国内集群,根......
  • 小程序性能提速大作战:少点HTTP请求,多点性能!
    引言:嗨,各位小程序魔法师们,是不是常常被小程序的加载速度拖拖拉拉?别担心,小编今天要带你们探讨一项神奇的技能——减少HTTP请求,让你的小程序速度飙升!我们要玩得开心,一切都要如丝滑般流畅!背景:小程序性能提速的关键之一就是减少HTTP请求。过多的请求会导致小程序的加载速度变得缓慢,影......
  • 普加项目管理中间件:优化项目管理流程的利器
    项目管理是现代商业运营中至关重要的一环。随着项目的复杂性不断增加,需要更有效的工具和方法来规划、执行和监控项目,以确保项目按时、按预算和按质量交付。普加项目管理中间件(PertMiddleware)已经成为众多组织的首选工具,用于简化项目管理流程、提高项目可见性、降低风险,并最终实现......
  • 监控易:实时掌握IT设备的健康状况和性能表现
      在当今的数字化时代,IT设备是企业运营的重要支撑,无论是服务器、路由器、交换机、防火墙还是PC、打印机、摄像头等,都承载着各种业务和服务。如果这些设备出现故障或性能下降,就会影响企业的正常运作,甚至造成重大损失。因此,对IT设备进行有效的监控和管理,是每个企业都必须面对的挑......
  • 百度网站怎样优化排名_百度如何优化排名靠前
    网站如何优化排名才会靠前?1、(1)用户体验经过网站的优化设计,用户可以方便地浏览网站的信息、使用网站的服务。2、④、内链建设:站内优化也是重中之重,如导航栏设计、站内导向链接规划等。当用户浏览网页的时候最好知道自己身处在什么位置。另外,为用户提供有价值的“下一站”跳转......
  • Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿......
  • Java服务中的大文件上传和下载优化技巧分享
    1.分片上传和下载将大文件分割成更小的块或分片,可以减轻服务器负担,提高处理效率。上传示例:importorg.springframework.web.multipart.MultipartFile;importjava.io.RandomAccessFile;importjava.io.File;importjava.io.IOException;publicvoiduploadFile(MultipartFi......