Redis交互速度慢,CPU占用100%,集群方案,报错等问题
Redis交互速度很慢,达到几十到一百毫秒一次
问题描述:
执行top命令发现redis占用达到100%
redis交互速度慢,一次要几十到一百毫秒一次
解决思路
查看redis数据量,比如我这里达到了30万
经过本地测试,redis交互的速度跟redis交互量成正比,也就是说redis没数据时交互在10ms以内,数据量大的话一次可能花费更久的时间
集群方案
我在本地虚拟机建立了3个主节点3个从节点的redis集群,经过压力测试单节点情况cpu占到30%;改为集群模式redis每个节点占用在10%以下
可以得出结论集群方案确实能降低单节点cpu压力大的问题
**速度测试:**我这测试里单节点速度要比集群方案快,数据量增加后依然是单节点速度比集群快,目前看到集群的优势仅仅是降低了单节点cpu的负载(当然这是在只考虑速度,不考虑容错的情况下)
并发问题
我的程序中开了多线程跟redis做压力测试交互,但是由于redis内部是单线程处理的,所以增加线程数量对速度没有提升,且太多线程数还可能造成时间片竞争;但是多个线程确实比单线程在单位时间内交互次数多一些,我猜测是利用上了程序内部的执行时间,但也没快很多,1.5倍左右?
虽然我的环境是多核心处理器,但是关于redis:
Redis本身是一个单线程的数据库服务器,它使用一个事件循环来处理所有的客户端请求和操作。这意味着在Redis服务器内部,所有的操作都是按顺序处理的,一个接一个地执行。
然而,Redis支持多个并发客户端连接。这些客户端连接可以同时发送请求给Redis服务器。虽然Redis在内部是单线程的,但它使用了非阻塞的I/O操作和事件驱动的模型来实现高并发。这意味着Redis可以同时处理多个客户端请求,而不会阻塞其他客户端。
当多个客户端同时连接到Redis时,每个客户端都有自己的线程或进程来处理Redis通信。这样,多个客户端可以并发地发送请求和接收响应,而不会相互干扰。
测试下经常报错:RedisSystemException: RedisException: Connection closed
org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: Connection closedat org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:74)at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44)at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42)at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:277)at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1085)at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$4(LettuceConnection.java:938)at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673)at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589)at org.springframework.data.redis.connection.lettuce.LettuceKeyCommands.exists(LettuceKeyCommands.java:79)at org.springframework.data.redis.connection.DefaultedRedisConnection.exists(DefaultedRedisConnection.java:81)at org.springframework.data.redis.core.RedisTemplate.lambda$hasKey$7(RedisTemplate.java:782)at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:191)at org.springframework.data.redis.core.RedisTemplate.hasKey(RedisTemplate.java:782)at com.bestdata.em.drs.util.RedisUtil.hasKey(RedisUtil.java:98)at com.bestdata.em.drs.receive.serivce.impl.HasMoreBusinessServiceImpl.insertFormulaValueToMongoDB(HasMoreBusinessServiceImpl.java:180)at com.bestdata.em.drs.receive.serivce.impl.HasMoreBusinessServiceImpl.moreBusinessOperations(HasMoreBusinessServiceImpl.java:113)at com.bestdata.em.drs.receive.serivce.FormulaDataProcessingService.sensorFormulaCalculation(FormulaDataProcessingService.java:264)at com.bestdata.em.drs.receive.serivce.FormulaDataProcessingService.run(FormulaDataProcessingService.java:167)at java.lang.Thread.run(Thread.java:750)
16:18:33.404 [FormulaThreadPoll-9] ERROR c.b.e.d.r.s.i.HasMoreBusinessServiceImpl - Unite Alarm Exception:Redis exception; nested exception is io.lettuce.core.RedisException: Connection closed
问题排查:
服务端和redis是否在同一网段?
是内网,没问题
Redis资源占用
执行top命令
Redis CPU占用一直高达50%~100%,3到5秒就跳一次(此时生产环境有其他程序和redis交互,但是没有特别大)
Redis数据量占用很高,且这是单点部署非集群模式
执行压力测试程序:Redis CPU占用一直高达100%
结论
看到redis的cpu占用100%我本以为是这个导致的RedisSystemException:Connection closed,但是后来反复测试发现报错原因不是这个,而是我在测试过程中强行kill进程,导致出现了连接关闭的报错(这是我在idea中停止运行程序后弹了一下这个异常后发现的)
再经过测试redis cpu占用100%确实会引发异常,但却是超时的问题:org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException:
提高Redis服务器资源配置确实可以降低单点压力;但是对速度的提升不明显,甚至经过本地压力测试还慢了
相关文章:
Redis交互速度慢,CPU占用100%,集群方案,报错等问题
Redis交互速度很慢,达到几十到一百毫秒一次 问题描述: 执行top命令发现redis占用达到100% redis交互速度慢,一次要几十到一百毫秒一次 解决思路 查看redis数据量,比如我这里达到了30万 经过本地测试,redis交互的速…...
wpf 系统在显示器分辨率和缩放设置为非1920*1080和100%时,SelectionChanged事件响应问题分析?
系统在显示器分辨率和缩放设置为1920*1080和100%时,窗口四分格能正常响应SelectionChanged事件,但是当缩放为125%时,或是分辨率大于1920*1080时四分格其中一个格子的下侧和右侧点击不响应,什么原因? 描述的问题可能由以…...
刷题记录--算法--简单
第一题 2582. 递枕头 已解答 简单 相关标签 相关企业 提示 n 个人站成一排,按从 1 到 n 编号。 最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递…...
条码生成器与Zint使用
文章目录 目的条形码zint支持条形码种类下载编译qt pro配置code保存条形码目的 1: 了解条形码数据理论知识 2: 了解zint第三方库相关, 如何编译引用到项目中 条形码 条形码(Barcode)一维码 和二维码(QR code)都是用于存储信息的图形化表示方式,通常应用于商品标识、库…...
C#winform上下班打卡系统Demo
C# winform上下班打卡系统Demo 系统效果如图所示 7个label控件(lblUsername、lblLoggedInEmployeeId、lab_IP、lblCheckOutTime、lblCheckInTime、lab_starttime、lab_endtime)、3个按钮、1个dataGridView控件、2个groupBox控件 C#代码实现 using System; using System.Dat…...
P1 Qt的认识及环境配置
目录 前言 01 下载Qt Creator windows下载安装包拷贝到Linux Linux直接下载 02 Linux 安装Qt 前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类…...
单元测试Nunit的几种断言
Nunit提供了一些辅助函数用于确定好某个被测试函数是否正常工作。通常把这些函数称为断言 断言是单元测试最基本的组成部分。因此,NUnit程序库以Assert类的静态方法的形式提供了不同形式的多种断言 1. Assert.AreEqual:比较两个值是否相等。用于比较数…...
前端中的响应式布局与各个端适配
什么是响应式布局? 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局。在移动互联网高度发达的今天,我们在桌面浏览器上开发的网页已经无法满足在移动设备上查看的需求。传统的开发方式是PC端开发一套页面,手机端再开发一套页面。但是…...
2023年5个自动化EDA库推荐
EDA或探索性数据分析是一项耗时的工作,但是由于EDA是不可避免的,所以Python出现了很多自动化库来减少执行分析所需的时间。EDA的主要目标不是制作花哨的图形或创建彩色的图形,而是获得对数据集的理解,并获得对变量之间的分布和相关…...
7-1 查找书籍
给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字…...
【无线网络技术】——无线广域网(学习笔记)
📖 前言:无线广域网(WWAN)是指覆盖全国或全球范围内的无线网络,提供更大范围内的无线接入,与无线个域网、无线局域网和无线城域网相比,它更加强调的是快速移动性。典型的无线广域网:蜂窝移动通信系统和卫星…...
【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、springboot分层架构、IDEA修改快捷键、vue代码风格
项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、sp…...
NGINX相关配置
全局配置 NGINX配置信息 nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分: 主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { worker_…...
如何将idea中导入的文件夹中的项目识别为maven项目
问题描述 大家经常遇到导入某个文件夹的时候,需要将某个子文件夹识别为maven项目 解决方案...
CleanMyMac4.16中文最新版本下载
当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候,我已经使用过了多款系统清理工具,并找到了最适合我的那一款。我的电脑是超耐用的Mac book,接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…...
谷歌正式发布最强 AI 模型 Gemini
2023年12月6日,谷歌公司宣布推出其被认为是规模最大、功能最强大的人工智能模型 Gemini。 Gemini将分为三个不同的套件:Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被认为具备最强大的能力,Gemini Pro则可扩展至多任务&#x…...
无人机语音中继电台 U-ATC118
简介 甚高频无线电中继通讯系统使用经过适航认证的机载电台连接数字网络传输模块,通过网络远程控制无缝实现无人机操作员与塔台直接语音通话。无人机操作员可以从地面控制站远程操作机载电台进行频率切换、静噪开关、PTT按钮,电台虚拟面板与真实面板布局…...
两种测量方式的自适应卡尔曼滤波数据融合
文章目录 测试效果代码CMakeLists.txt参考测试效果 代码 #include <iostream> #include <Eigen/Dense> #include...
.Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
机缘 不知不觉,.NET8都已经面世,而我们一直还停留在.netframework4.5开发阶段,最近准备抽空研究一下.Net6,一是为了提高技术积累,一方面想着通过这次的学习,看有没有可能将老的FX版本替换到.Net6开发上,经过查找官方资料,对.Net6支持的系统版本做一个分享,方便大家后期…...
CopyOnWriteArraySet怎么用
简介 CopyOnWriteArraySet是一个线程安全的无序集合,它基于“写时复制”的思想实现。它继承自AbstractSet,可以将其理解成线程安全的HashSet。 CopyOnWriteArraySet在读取操作比较频繁、写入操作相对较少的情况下可以提高程序的性能和可靠性。它的线程…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
