Easticsearch性能优化之硬件优化

news2024/11/18 9:28:27

Easticsearch性能优化之硬件优化

  • 一、CPU配置
  • 二、内存配置
    • 1、内存配置总体方针
    • 2、内存实际分配
    • 3、禁止swap
    • 4、GC设置
  • 三、IO(磁盘)

对于性能优化,升级硬件设备配置一直都是提高服务能力最快速有效的手段。硬件优化主要可以从CPU内存存储设备(磁盘)、显卡、散热系统、主板、电源、外设设备等。
在系统层面能够影响应用性能的一般主要包括三个因素:CPU内存IO(磁盘)。可以从这三方面进行 Elasticsearch 的性能优化工作。

一、CPU配置

CPU(中央处理器)是计算机系统中最重要的组成部分之一,在CPU内可分为两个主要的单元,分别是:算数逻辑单元控制单元。 它负责执行计算机程序中的指令和控制计算机系统的操作。
我们都知道Elasticsearch 是一个多线程的应用程序,而多线程的上下文切换会导致CPU的繁忙,Elasticsearch 同时是一个很消耗内存的应用程序,特别是在进行排序、聚合时特别吃内存,这样会导致频繁的GC,也会导致CPU比较繁忙。所以合理的CPU的配置可以更好的提升Elasticsearch 的性能。
比如部署Elasticsearch 时应该选择具有多个内核的现代处理器,常见集群使用2到8核的机器(建议CPU8核,当然具体情况看具体使用)。也可选择高频CPU,来提供更快的计算速度,从而加快Elasticsearch 的处理速度。

注意:更快的 CPUs 和更多的核数之间选择,选择更多的核数更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。

二、内存配置

上面说过Elasticsearch 在排序和聚合时都很耗内存,如果有一种资源是最先被耗尽的,它可能是内存。所以有足够的堆空间来应付它们是很重要的。即使堆空间是比较小的时候,也能为操作系统文件缓存提供额外的内存。因为 Lucene 使用的许多数据结构是基于磁盘的格式,Elasticsearch 利用操作系统缓存能产生很大效果。这样显得内存的合理配置比具体配置多少个(CPU)重要的多得多。

1、内存配置总体方针

对于Elasticsearch 的堆内存分配建议将总内存的一半分配给堆内存,但不要超过机器的物理限制。对于数据节点最好不要超过32Gmaster节点可适当少点(数据节点一半即可)。所以64 GB 内存的机器是非常理想的,但是 32 GB 和 16 GB 机器也是很常见的。少于8 GB 会适得其反(你最终需要很多很多的小机器),大于 64 GB 的机器也会有问题(会有一定浪费,成本也会增加)。

为什么将总内存的一半分配给堆内存?

答:由于 ES 构建基于 lucene,而 lucene 设计强大之处在于 lucene 能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene 的索引文件 segements 是存储在单文件中的,并且不可变,对于 OS 来说,能够很友好地将索引文件保持在 cache 中,以便快速访问;因此,我们很有必要将一半的物理内存留给 lucene;另一半的物理内存留给 ES(JVM heap)。

为什么数据节点最好不大于32G?

答:在 Elasticsearch 中,将堆内存设置为超过32GB 的主要原因是基于 Java 虚拟机(JVM)的限制。具体来说,这是由于 JVM 使用指针压缩技术所导致的。

  • 在 64 位 JVM 中,默认开启了指针压缩技术(Compressed Oops),它可以减少指针占用的内存空间。指针压缩适用于堆内存小于 32GB 的情况,能够显著降低内存消耗。然而,当堆内存超过32GB时,JVM 不再使用指针压缩,而是使用全指针模式,这会增加指针的大小和内存开销。
  • 因此,在 Elasticsearch 中,将堆内存设置为超过32GB 时,可能会导致更高的内存消耗,以及对垃圾回收(GC)和索引性能的不利影响。这是因为全指针模式增加 GC 操作的时间和频率
  • 此外,超过32GB 堆内存的配置也可能受到操作系统和硬件的限制。某些操作系统(32位和64位操作系统有不同限制)和硬件可能对单个进程的可用内存有限制,因此超过这些限制可能导致性能问题或运行时错误。

2、内存实际分配

1)当机器内存小于 64G 时,遵循通用的原则,50% 给 ES,50% 留给 lucene。
2) 当机器内存大于 64G 时,遵循以下原则:

  • 如果主要的使用场景是全文检索,那么建议给 ES Heap 分配 4~32G 的内存即可;其它内存留给操作系统,供 lucene 使用(segments cache),以提供更快的查询性能。
  • 如果主要的使用场景是聚合或排序,并且大多数是 numerics,dates,geo_points 以及 not_analyzed 的字符类型,建议分配给 ES Heap 分配 4~32G 的内存即可,其它内存留给操作系统,供 lucene 使用,提供快速的基于文档的聚类、排序性能。
  • 如果使用场景是聚合或排序,并且都是基于 analyzed 字符数据,这时需要更多的 heap size,建议机器上运行多 ES 实例,每个实例保持不超过 50% 的 ES heap 设置(但不超过 32 G,堆内存设置 32 G 以下时,JVM 使用对象指标压缩技巧节省空间),50% 以上留给 lucene。

3、禁止swap

禁止 swap,一旦允许内存与磁盘的交换,会引起致命的性能问题。可以通过在 elasticsearch.yml 中 bootstrap.memory_lock: true,以保持 JVM 锁定内存,保证 ES 的性能。

4、GC设置

1)GC 默认设置为:Concurrent-Mark and Sweep(CMS),如果数据量较大建议改为G1。常用JVM配置如下:

-XX:+UseG1GC → 使用G1 gc

-XX:+ExplicitGCInvokesConcurrent → 提升gc效率,调用并发gc,减少gc的STW时间

-XX:+UseGCOverheadLimit  → 增加gc开销限制

-XX:MaxGCPauseMillis=200  → 每次GC最大停顿毫秒数

-XX:InitiatingHeapOccupancyPercent=30  →老年代占比达到30%,触发并发标记

-XX:ParallelGCThreads=43  → gc并行线程数,只有在 STW阶段才有效,不和用户线程并发执行。一般用于初始标记、重新标记、清理阶段。一般数值算法是:8+(N-8)*5/8

-XX:ConcGCThreads=8  →并发标记线程数,并发标记阶段,和用户线程并发执行,如果太大,会影响用户线程,造成不稳定,一般是ParallelGCThreads的1/4

-XX:G1HeapRegionSize=32m  → 每个Region(独立区域)的大小,一般是堆内存 除以 2048

-XX:+UnlockExperimentalVMOptions  →解锁实验参数

-XX:G1NewSizePercent=10  →年轻代最小占比

-XX:G1MaxNewSizePercent=20  →年轻代最大占比

-XX:G1ReservePercent=25  →年老代预留空间占比

2)保持线程池的现有设置,目前 ES 的线程池有了较多优化设置,保持现状即可;默认线程池大小等于 CPU 核心数。如果一定要改,按公式 ( ( CPU 核心数 * 3 ) / 2 ) + 1 设置;不能超过 CPU 核心数的 2 倍; 但是不建议修改默认配置,否则会对 CPU 造成硬伤。

三、IO(磁盘)

硬盘对所有的集群都很重要,对大量写入的集群更是加倍重要(例如那些存储日志数据的)。硬盘是服务器上最慢的子系统,这意味着那些写入量很大的集群很容易让硬盘饱和,使得它成为集群的瓶颈。
在经济压力能承受的范围下,尽量使用固态硬盘(SSD) 固态硬盘相比于任何旋转介质(机械硬盘,磁带等),无论随机写还是顺序写,都会对 IO 有较大的提升。

如果你正在使用 SSDs,确保你的系统 I/O 调度程序是配置正确的。当你向硬盘写数据,I/O 调度程序决定何时把数据实际发送到硬盘。大多数默认 *nix 发行版下的调度程序都叫做 cfq(完全公平队列)。

调度程序分配时间片到每个进程。并且优化这些到硬盘的众多队列的传递。但它是为旋转介质优化的:机械硬盘的固有特性意味着它写入数据到基于物理布局的硬盘会更高效。

这对 SSD 来说是低效的,尽管这里没有涉及到机械硬盘。但是,deadline 或者 noop 应该被使用。deadline 调度程序基于写入等待时间进行优化,noop 只是一个简单的 FIFO 队列。

这个简单的更改可以带来显著的影响。仅仅是使用正确的调度程序,我们看到了 500 倍的写入能力提升

如果你使用旋转介质(如机械硬盘),尝试获取尽可能快的硬盘(高性能服务器硬盘,15k RPM 驱动器)。
使用 RAID0 是提高硬盘速度的有效途径,对机械硬盘和 SSD 来说都是如此。 没有必要使用镜像或其它 RAID 变体,因为 Elasticsearch 在自身层面通过副本,已经提供了备份的功能,所以不需要利用磁盘的备份功能,同时如果使用磁盘备份功能的话,对写入速度有较大的影响。
最后,避免使用网络附加存储(NAS)。 人们常声称他们的 NAS 解决方案比本地驱动器更快更可靠。除却这些声称,我们从没看到 NAS 能配得上它的大肆宣传。NAS 常常很慢,显露出更大的延时和更宽的平均延时方差,而且它是单点故障的。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1377072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生+可视化技术 构建智慧新能源汽车充电站监管平台

前言 充电基础设施为电动汽车提供充换电服务,是重要的交通能源融合类基础设施。近年来,随着新能源汽车产业快速发展,我国充电基础设施持续增长,已建成世界上数量最多、服务范围最广、品种类型最全的充电基础设施体系。着眼未来新…

【Matlab】在Matlab中安装优化工具yalmip的方法

最近博主想做一些关于多目标优化的问题,因为之前对Matlab有一定经验,所以直接在网上查找了如何在Matlab上实现多目标优化的文献,看到有人提到了yamip,于是博主就试着在Matlab中安装yamip,将其中遇到的问题和一些经验和…

C++力扣题目404--左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 思路 首先要注意是判断左叶子&#xff0…

商业定位,1元平价商业咨询:豪威尔咨询!平价咨询。

在做生意之前,就需要对企业整体进行一完整的商业定位,才能让商业定位带动企业进行飞速发展。 所以,包含商业定位的有效工作内容就显得极为重要,今天,小编特地为大家整理出了商业定位所需要的筹备的工作,如下…

#mysql 8.0 踩坑日记

事情发生在,修改一个已有功能的时候,正常的参数传递进去接口异常了。查看日志报的 Column date cannot be null 。因为是一直未修改过的功能,首先排除了程序代码问题,首先想到是不是升级过程序的jar包版本,检查下来发…

一键转换,创新无限:将HTML轻松转化为PDF!

在数字时代,HTML与PDF已成为信息传递的两大主流格式。然而,在这两者之间转换常常让人感到困扰。现在,有了我们的创新工具,您只需轻点一下,即可一键将HTML转化为PDF! 首先,我们要进入首助编辑高…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS依托统计学处理数据的应用场景

《SPSS统计学基础与实证研究应用精解》1.4 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解1.4节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。本书旨在手把手教会使…

20/100 删除链表的倒数第 N 个结点 21/100 有效的括号 22/100 合并两个有序列表

20/100 删除链表的倒数第 N 个结点 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 题解: 方法1:第一次完整遍历一遍得到长度,第二次遍历到倒数第n个数据前一个,进…

矩阵起源携手深智城入选中国信通院“星河”案例

近日,由中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织的 2023 大数据“星河(Galaxy)”案例征集活动评选结果现已公示。案例征集自9月启动以来,受到了业界广泛关注和…

图文看懂Android的Matrix原理

Matrix结构 在Android开发中,矩阵是一个非常强大且有趣的工具。位于图形库中,android.graphics.Matrix 是一个 33 的 float 矩阵,其主要作用是坐标变换。 它的结构大概是这样的: 其中每个位置的数值作用和其名称所代表的的含义是…

基于Java SSM框架实现雁门关风景区宣传网站项目【项目源码】计算机毕业设计

基于java的SSM框架实现雁门关风景区宣传网站演示 Java技术 Java技术它是一个容易让人学会和使用的一门服务器语言。它在编程的过程当中只需要很少的知识就能建立起一个真正的交互站点。对于这个教程来说它并不需要你完全去了解这种语言,只要能快速融入web站点就可以…

互信息法的原理详解

文章目录 互信息法(上)互信息是什么从信息增益角度理解互信息从变量分布一致角度理解互信息 卡方检验与离散变量的互信息法 互信息法(上) 尽管f_regression巧妙的构建了一个F统计量,并借此成功的借助假设检验来判断变…

拼夕夕的拼团模式已经过时!全新拼团模式你可以看一下!

全民拼购,这个新兴的社交电商模式,正以令人惊叹的速度重塑消费者的购物体验。通过与亲朋好友的互动,消费者不仅能享受到购物的乐趣,还能获得实实在在的优惠和福利。 在全民拼购的世界里,用户不再只是孤立的消费者。他们…

给视频添加动图,让视频更具动感与活力

相较于静态图片和文字,GIF动图能更直观地传达信息,为内容增添趣味性。那么,该如何给你的视频添加GIF动图,使其更具吸引力呢?接下来,让我们一起探讨这个话题。 所需工具: 一个【视频剪辑高手】…

CMVAE

use the encoder to obtain two sets of output: 1) (μ i ( m m ) ^{(mm)}_i i(mm)​,σ i ( m m ) ^{(mm)}_i i(mm)​) and 2) (μ i ( m t ) ^{(mt)}_i i(mt)​,σ i ( m t ) ^{(mt)}_i i(mt)​) 作者未提供代码

trilium笔记私有化部署

前言:一直用有道云笔记,随着笔记越多,每次搜索跟打开都感觉没那么顺畅。再考虑到数据安全问题,想着有没私有化部署的笔记,于是开始探索私有化部署笔记。 为知笔记:比较早之前,家里的NAS部署过为…

能见度监测站在交通中有哪些作用

【TH-NJD10】能见度监测站在交通中的作用主要体现在以下几个方面: 提高交通安全:能见度是影响交通安全的重要因素之一。能见度监测站可以实时监测并发布路面或空中的能见度数据,帮助驾驶员和交通管理部门做出安全决策。在低能见度情况下&…

5、MAE:探索视觉预训练模型

目录 1、论文 2、背景与动机 3、回答的问题 4、创新与卖点 5、实现细节 模型框架 具体步骤 简单代码示例 6、一些资料 1、论文 Masked Autoencoders Are Scalable Vision Learnershttps://arxiv.org/pdf/2111.06377.pdf 2、背景与动机 在深度学习和计算机视觉的领域中…

【实用技巧】Steam Wallpaper Engine 壁纸引擎向手机导入壁纸方法

一、内容简介 本文介绍如何使用电脑上的 Wallpaper Engine (Steam 平台中的壁纸引擎)向安卓手机导入并使用壁纸。 二、所需原材料 安卓手机(以笔者使用的华为荣耀50为例)、安装有Steam以及Wallpaper Engine的电脑 三、导入方法…

美摄视频SDK,卓越的视频解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而,高质量的视频制作并不容易,需要专业的技术和设备支持。这就是我们的美摄科技视频SDK发挥作用的地方。作为一家专注于视频技术开发的公司,我们的目标是为企业提供最优质的视频解决方案…