优化记录 -- 记一次搜索引擎(SOLR)优化
业务场景
某服务根据用户相关信息,使用搜索引擎进行数据检索
软件配置
solr 1台:32c 64g 数据10gb左右,版本 7.5.5
应用服务器1台:16c 64g
应用程序 3节点
问题产生现象
1、因业务系统因处理能不足,对业务系统硬件平台进行升级,升级变更为 16c64g —> 32c64g 增加 16c
2、业务系统升级,处理能力增加,对原搜索引擎服务器的qps有所提升,原qps 1500 提升至 2600左右
3、搜索引擎负载发生极大变化,从原始负载60左右,提升至85左右,远超预期
分析问题
应用层:
链接数未提升,仅提升qps,应该不会对solr 造成过大的影响
SOLR 层
分析缓存
检查os 剩余内存
使用 htop 观测剩余内存还有将近30g,因此决定调整 solr 相关缓存配置

分析 SOLR 线程栈
1、使用 jstack pid >pid.jstack 导出solr 线程运行情况
2、通过 IBM JCA469.jar 分析工具,检查线程锁

发现500+线程等待log锁

检查 solr 相关日志配置
发现 solr 7.5.5 使用 log4j2日志框架,且使用同步日志输出模式

调整方案
增加SOLR缓存,提升缓存命中率
原始配置
<filterCache class="solr.FastLRUCache"maxRamMB="2048"autowarmCount="150000"/><queryResultCache class="solr.LRUCache"size="65536"initialSize="65536"autowarmCount="0"/><documentCache class="solr.LRUCache"size="65536"initialSize="65536"autowarmCount="0"/>
更新后配置
<filterCache class="solr.FastLRUCache"maxRamMB="2048"autowarmCount="150000"/><queryResultCache class="solr.LRUCache"size="131070"initialSize="131070"autowarmCount="0"/><documentCache class="solr.LRUCache"size="131070"initialSize="131070"autowarmCount="0"/>
增加JVM 内存
Xmx16g ---> Xmx24g
使用全局异步日志打印日志输出
在 solr.in.sh 添加JVM启动参数
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
调整后效果如下
os 负载情况
调整前

调整后

线程锁情况

调整后

相关文章:
优化记录 -- 记一次搜索引擎(SOLR)优化
业务场景 某服务根据用户相关信息,使用搜索引擎进行数据检索 软件配置 solr 1台:32c 64g 数据10gb左右,版本 7.5.5 应用服务器1台:16c 64g 应用程序 3节点 问题产生现象 1、因业务系统因处理能不足,对业务系统硬件…...
电力感知边缘计算网关产品设计方案-网关系统通信架构方案
1.边缘协同控制模发 能针对建筑、充电桩、分布式储能、分布式光伏等典型设备建立对应物模型、完成数据采集通信协议设计和控制指令交互设计,能针对建筑、充换电站等典型场景提出具体实施方案和人工智能控制算法和逻辑。物模型、通信协议设计和控制指令交互设计科学、先进,能…...
RabbitMQ消息的可靠性
RabbitMQ消息的可靠性 一 生产者的可靠性 生产者重试 有时候由于网络问题,会出现连接MQ失败的情况,可以配置重连机制 注意:SpringAMQP的重试机制是阻塞式的,重试等待的时候,当前线程会等待。 spring:rabbitmq:conne…...
Opengl 纹理(知识点)
纹理(知识点) 以下是纹理用到的知识点,至于具体流程操作请参考: https://learnopengl.com/Getting-started/Textures 纹理环绕 纹理环绕(Texture Wrapping)的作用是定义在纹理坐标超出标准范围时系统如何…...
Centos 7 安装yum(针对python卸载yum出错)
提前下载所需安装包,按照下面顺序安装即可完成,每个依赖包必须正确安装 下载地址:http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联 whereis …...
substr()与substring()的区别
在 JavaScript 编程语言中,substr() 和 substring() 都是字符串函数,用于截取指定位置的子字符串。虽然这两个函数都可以用于截取字符串,但它们之间存在一些区别。 substr() 语法:string.substr(start,length) 参数值:…...
MacOS 成为恶意软件活动的目标
Malwarebytes 警告称,一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer,也称为 AMOS,是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…...
从0开始学习JavaScript--JavaScript生成器
JavaScript生成器(Generator)是一项强大的语言特性,它允许函数在执行过程中被暂停和恢复,从而实现更灵活的控制流。本文将深入探讨JavaScript生成器的基本概念、用法,并通过丰富的示例代码展示其在实际应用中的优势和强…...
householder进行矩阵QR分解
文章目录 1. Householder 进行QR分解 1. Householder 进行QR分解 A Q R (1) AQR\tag1 AQR(1) A [ 1 2 0 1 1 0 3 1 1 0 3 2 1 2 0 2 ] (2) A\begin{bmatrix}1&2&0&1\\\\1&0&3&1\\\\1&0&3&2\\\\1&2&0&2\end{bmatrix}\tag2 A…...
利用叉积计算向量的旋向及折线段的拐向
一、向量叉积 两个向量 u u u、 v v v的叉积写作 u v n ∥ u ∥ ∥ v ∥ s i n θ \mathbf{u \times v n \left \| u \right \| \left \| v \right \| sin\theta } uvn∥u∥∥v∥sinθ 式中, n n n: 与 u u u、 v v v均垂直的单位向量,theta是两向量…...
Vmware 扩展硬盘空间后的操作-Ubuntu
在VMware中扩展了Ubuntu虚拟机的硬盘容量后,你需要在Ubuntu内部进行操作才能使用新增的空间。过程包括为增加的空间建立分区、格式化以及挂载该分区供使用。下面是具体的步骤: 首先登录到你的Ubuntu系统,用lsblk命令查看分区情况。这样你可以…...
Rust错误处理:Result
文章目录 简介错误匹配 Rust基础教程: 初步⚙ 所有权⚙ 结构体和枚举类⚙ 函数进阶⚙ 泛型和特征⚙ 并发和线程通信⚙ cargo包管理⚙ 可空类型Option Rust进阶教程: 用宏实现参数可变的函数⚙ 类函数宏 简介 Rust中没有提供类似try…catch之类…...
1410.HTML 实体解析器
题目来源: leetcode题目,网址:1410. HTML 实体解析器 - 力扣(LeetCode) 解题思路: 使用map存放特殊字符串及其应被替换为的字符串。然后遍历字符串替换 map 中的字符串即可。 解题代码: …...
Python通过串口收发文件
单位内外网是隔离的,USB对拷线被禁用,安全优盘使用太费事,就想到了通过串口传输文件. import serial from xmodem import XMODEM import osdef Send_File(filepath, portCOM8, baudrate115200):bn os.path.basename(filepath)filesize os.stat(filepath).st_sizestrSendFile…...
[crash] cxa_pure_virtual 崩溃分析与原理
摘要:工作过程中处理线上的崩溃时发现了一例cxa_pure_virtual相关的crash,直接看堆栈基本山很容易确认是有异步调用导致出发了ABI的异常。但是对于为什么会触发cxa_pure_virtual虽然有大致的猜测但是没有直接的证据,因此本文主要描述触发该类…...
2023年学习Go语言是否值得?探索Go语言的魅力
关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 作为一门流行且不断增长的编程语言,Go语言在2023年是否值得学习呢?让我们来看看学习Go语言的好处以及为何…...
【C++11】=default与=delete关键字使用详解
系列文章目录 C11新特性使用详解-持续更新 文章目录 系列文章目录一、default关键字1. 为什么要引入default关键字2. 注意事项3. 使用default关键字有什么好处4.实例代码 二、delete关键字1. 为什么要引入delete关键字2. 注意事项3. 使用场景3.1删除默认构造函数3.2 删除拷贝构…...
[开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务
一、开源项目简介 小鹿快传 - 在线P2P文件传输工具 小鹿快传是一款Web端的P2P文件传输工具,使用了WebRTC技术实现P2P连接和文件传输。 二、开源协议 使用MIT开源协议 三、界面展示 产品截图 四、功能概述 简单安全高效的P2P文件传输服务 小鹿快传是一款Web端…...
边缘计算多角色智能计量插座 x 资产显示标签:实现资产追踪与能耗管理的无缝结合
越来越多智慧园区、智慧工厂、智慧医院、智慧商业、智慧仓储物流等企业商家对精细化、多元化智能生态应用场景的提升,顺应国家节能减排、环保的时代潮流,设计一款基于融合以太网/WiFi/蓝牙智能控制的智能多角色插座应运而生,赋予智能插座以遥…...
chromium证书校验流程SM2WithSM3(C++源码说明)
文章目录 一、证书链二、证书链校验过程三、证书链签名校验图解四、C++源码4.1 编译TASSL4.2 代码一,直接读取签名值方法4.3 代码二(推荐)4.3.1 获取证书的签名数据4.3.2 获取证书的签名值4.3.3 从证书中获取公钥4.3.4 完整代码4.3.5 代码地址五、补充说明5.1 SM2的Z值算法以…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
