【运维篇】5.4 Redis 并发延迟检测

news2024/9/21 4:29:42

文章目录

  • 0.前言
    • Redis工作原理
      • 可能引起并发延迟的常见操作和命令
      • 并发延迟检测
      • 分析和解读监控数据:
      • 优化并发延迟的策略
  • 1. 检查CPU情况
  • 2. 检查网络情况
  • 3. 检查系统情况
  • 4. 检查连接数
  • 5. 检查持久化 :
  • 6. 检查命令执行情况

在这里插入图片描述

0.前言

Redis 6.0版本之前其使用单线程模型处理所有命令。这意味着在给定的时间内,只有一个命令正在执行。虽然Redis非常快,每秒可以处理上万到十万个命令,但如果有一个命令需要大量的时间来执行,那么其他的命令就必须等待,这就是所谓的"并发延迟"。

并发延迟可能会导致应用程序的整体性能下降,因此对Redis的并发延迟进行检测和优化十分重要。尤其是在并发高、数据量大的生产环境中,及时地发现并解决潜在的并发延迟问题,对于保证Redis的性能和稳定性至关重要。

本篇博文将介绍Redis并发延迟的原因,以及如何检测并优化Redis的并发延迟。我们首先会解释Redis的工作原理,然后讨论一些可能引起并发延迟的常见操作和命令。接着,我们将讨论如何使用Redis自带的延迟监控功能进行并发延迟检测,以及如何分析和解读这些监控数据。最后,我们将提供一些实际的策略和建议,来帮助你优化Redis的并发延迟,提高Redis的性能和稳定性。

Redis工作原理

Redis 每个请求被接收后,Redis会将它放入一个队列中,然后顺序执行每个命令。这种模型的好处是避免了多线程并发访问数据时可能发生的冲突和锁的问题,但同时也意味着如果有一个命令执行时间过长,它会阻塞后面的所有命令。

可能引起并发延迟的常见操作和命令

  1. 大键操作:对于包含大量元素的列表、集合、有序集合或哈希等数据结构的操作可能会导致延迟。
  2. 慢查询:一些复杂的查询或计算密集型命令(如SORT、SUNION等)可能花费更长时间执行。
  3. 阻塞命令:某些命令(如BLPOP)在等待条件满足时会阻塞其他命令的执行。
  4. 持久化:如果使用RDB或AOF方式持久化数据,持久化操作可能会影响命令的执行。

并发延迟检测

Redis提供了一些内置的工具和命令来监控并发延迟:

  1. SLOWLOG 命令:记录执行时间超过指定阈值的命令。
  2. INFO 命令:查看和分析Redis服务器的统计信息和性能指标。
  3. LATENCY MONITOR特性:监控和报告Redis操作的延迟。

分析和解读监控数据:

  1. SLOWLOG GET:分析慢查询日志,找出执行时间过长的命令。
  2. INFO命令的输出:查看特定的性能指标,例如每秒命令数、命中率、内存使用情况等。
  3. LATENCY MONITOR:识别导致延迟的具体操作和时间点。

优化并发延迟的策略

  1. 优化数据结构:避免使用大键,合理设计数据结构。
  2. 限制慢查询:设置合理的超时阈值,对慢查询进行限制。
  3. 分片:将数据分布到多个Redis实例上,减轻单个实例的负担。
  4. 使用更快的持久化策略:如使用无磁盘同步等技术减少持久化操作对性能的影响。
  5. 硬件优化:升级硬件资源,如使用更快的CPU或增加内存。
  6. 避免阻塞命令:尽量避免使用会造成阻塞的命令,或将它们移到辅助线程中执行。
  7. 监控和调优:定期监控Redis的性能指标,根据监控数据调优配置。

1. 检查CPU情况

使用top命令查看CPU使用情况。

   top - 10:00:01 up 1 day,  2:43,  2 users,  load average: 1.05, 0.70, 0.58
   Tasks: 193 total,   2 running, 191 sleeping,   0 stopped,   0 zombie
   %Cpu(s): 25.1 us,  1.4 sy,  0.0 ni, 73.0 id,  0.4 wa,  0.0 hi,  0.1 si,  0.0 st
   KiB Mem : 16337836 total,   812508 free,  8736168 used,  6715160 buff/cache
   KiB Swap:  2097148 total,  2097148 free,        0 used.  7106764 avail Mem 

     PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   12345 redis     20   0  1.916g 1.800g   1020 S  99.9 11.4  22:10.82 redis-server
 

这里可以看到,redis-server进程的CPU使用率接近100%,这表明可能需要垂直扩展。
也可以使用mpstat

mpstat是一个展示CPU使用情况的工具,它可以显示所有CPU的统计信息,以及单个CPU的统计信息。命令mpstat -P ALL 1的含义是显示所有CPU核心的性能统计数据,每隔1秒更新一次。以下是该命令的模拟输出:

Linux 4.15.0-123-generic (ubuntu)     12/02/2021      _x86_64_        (8 CPU)

10:01:01 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:01:02 AM  all    3.50    0.00    1.25    0.75    0.00    0.12    0.00    0.00    0.00   94.38
10:01:02 AM    0    7.00    0.00    1.00    2.00    0.00    0.00    0.00    0.00    0.00   90.00
10:01:02 AM    1    2.00    0.00    1.50    0.00    0.00    0.50    0.00    0.00    0.00   96.00
10:01:02 AM    2    3.00    0.00    1.00    1.00    0.00    0.00    0.00    0.00    0.00   95.00
10:01:02 AM    3    4.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    0.00   94.00
10:01:02 AM    4    3.00    0.00    1.00    1.00    0.00    0.00    0.00    0.00    0.00   95.00
10:01:02 AM    5    3.00    0.00    1.00    0.50    0.00    0.50    0.00    0.00    0.00   95.00
10:01:02 AM    6    4.00    0.00    2.00    0.50    0.00    0.50    0.00    0.00    0.00   93.00
10:01:02 AM    7    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00
 

每一行表示一个CPU的统计数据,包括用户空间(%usr)、优先级更低的进程(%nice)、系统空间(%sys)等等。最后一列是空闲时间(%idle)。

2. 检查网络情况

使用netstat命令检查Redis端口的网络情况。

   netstat -nlt | grep 6379
   tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN     
   tcp6       0      0 ::1:6379                :::*                    LISTEN     

这里显示了本机6379端口正在监听网络连接。

3. 检查系统情况

使用vmstat命令检查系统资源情况。

   vmstat 1 5
   procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    2  0      0 812508  12345 6715160    0    0    12    45  342 1234 25  1 73  0  0
   ...

Redis 本身并不提供直接的命令来检查网络情况,但可以通过几种方式来评估Redis服务的网络性能或连接状态。

  1. PING命令:这是Redis的一个基础命令,用于检查服务是否运行并能响应命令。
   PING

如果服务运行正常,将得到一个PONG响应。

  1. INFO命令:这个命令提供了Redis服务器和其客户端的详细信息,包括网络相关的统计数据。比如:
   INFO replication
   INFO stats

这些子命令会显示连接和同步的信息,以及执行的命令数量等。

  1. CLIENT LIST命令:这个命令会展示所有连接到Redis服务器的客户端列表及其相关的信息,包括地址、端口、连接时长、空闲时间等。
   CLIENT LIST
  1. 网络工具:除了Redis命令,还可以使用标准的网络工具来检测与Redis服务的连接情况。比如ping命令检查网络延迟,telnetnc(netcat)尝试连接到Redis服务端口,traceroutetracert(在Windows上)来追踪数据包路径。
   ping <redis-server-ip>
   telnet <redis-server-ip> <redis-port>
   nc -vz <redis-server-ip> <redis-port>
   traceroute <redis-server-ip>
  1. MONITOR命令:尽管这并非直接检查网络情况的命令,但它允许监视实时的Redis服务器接收到的命令,可以帮助理解Redis服务器的负载情况。
   MONITOR

如果发现Redis的响应时间长或连接数异常,可能是网络延迟、带宽限制、过载或其他网络问题。在这种情况下,检查的网络配置、防火墙规则和硬件设备可能会很有帮助。

在Redis中,你可以使用以下命令检查系统的状态和性能:

INFO命令:这个命令提供了关于Redis服务器的各种信息和统计,包括内存使用、CPU使用、客户端连接、数据库统计等。

INFO

这会返回一系列的信息。对于系统和网络的检查,你可能会对这部分感兴趣:

  • used_memory: 用于表示Redis分配的内存总量,以字节(bytes)为单位。
  • used_memory_human: 以更易读的格式展示Redis分配的内存总量(如KB、MB、GB)。
  • connected_clients: 已连接客户端的数量。
  • instantaneous_ops_per_sec: Redis当前的qps,即每秒的查询次数。
  1. SLOWLOG命令:这个命令可以帮你找到那些执行时间较长的命令。你可以使用SLOWLOG GET来获取慢查询日志的内容,使用SLOWLOG LEN来获取慢查询日志的长度,使用SLOWLOG RESET来清空慢查询日志。
   SLOWLOG GET
   SLOWLOG LEN
   SLOWLOG RESET

4. 检查连接数

使用redis-cli info命令查看Redis的连接数。模拟输出可能如下:

   redis-cli info | grep connected_clients
   connected_clients:10

显示当前有10个客户端连接到Redis服务器。
在这里插入图片描述

5. 检查持久化 :

使用redis-cli info命令检查Redis持久化情况。

   redis-cli info | grep rdb_last_bgsave_status
   rdb_last_bgsave_status:ok

显示最后一次背景保存(bgsave)的状态是成功的。
在Redis中,最常用的持久化方式有RDB和AOF,可以通过INFO persistence命令查看相关的持久化信息。

对于RDB持久化,latest_fork_usec字段显示上一次执行fork操作的持续时间,单位为微秒。这通常在Redis每次执行RDB或AOF重写时发生。

以下是INFO persistence命令的一些输出示例:

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1626293675
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:2498560
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

其中,关于RDB的一些关键字段解释如下:

  • rdb_changes_since_last_save: 自上次成功生成RDB文件后,Redis服务器接收到的写命令数量。
  • rdb_bgsave_in_progress: 如果服务器正在创建RDB文件,那么值为1,否则为0。
  • rdb_last_save_time: 服务器最后一次成功执行SAVEBGSAVE命令的Unix时间戳。
  • rdb_last_bgsave_status: 最后一次BGSAVE命令的执行状态,成功为ok,失败为err。
  • rdb_last_bgsave_time_sec: 最后一次成功执行BGSAVE命令耗费的时长,以秒为单位。

同样,你也可以通过CONFIG GET save命令查看RDB的触发条件,该命令返回的结果形式如下:

1) "save"
2) "900 1 300 10 60 10000"

上述结果表示,当以下任一条件满足时,Redis会自动触发BGSAVE命令:

  • 900秒内有1个key发生变更
  • 300秒内有10个key发生变更
  • 60秒内有10000个key发生变更

6. 检查命令执行情况

使用redis-cli monitor命令查看Redis命令执行的实时情况。

   redis-cli monitor
   1614092587.248133 [0 127.0.0.1:6379] "set" "key1" "value1"
   1614092587.251993 [0 127.0.0.1:6379] "get" "key1"

检查Redis中每个命令的执行情况可以通过INFO commandstats命令,这个命令提供了关于Redis服务器上每个命令执行的统计数据。

INFO commandstats

执行上述命令,Redis将返回各种命令及其相关统计信息。返回的结果形式如下:

cmdstat_get:calls=100,usec=700,usec_per_call=7.00
cmdstat_set:calls=50,usec=300,usec_per_call=6.00
cmdstat_del:calls=20,usec=200,usec_per_call=10.00

在上面的输出中,每一行表示一个命令的统计信息:

  • cmdstat_get, cmdstat_set, cmdstat_del分别代表get, set, del这三个命令的统计数据。
  • calls字段表示该命令被调用的次数。
  • usec字段表示该命令总的执行时间,以微秒为单位。
  • usec_per_call字段表示该命令每次执行的平均时间,以微秒为单位。

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

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

相关文章

《视觉SLAM十四讲》-- 建图

11 建图 11.1 概述 &#xff08;1&#xff09;地图的几类用处&#xff1a; 定位&#xff1a;导航&#xff1a;机器人在地图中进行路径规划&#xff1b;避障重建交互&#xff1a;人与地图之间的互动 &#xff08;2&#xff09;几类地图 稀疏地图稠密地图语义地图 11.2 单目…

java学习part06数组

62-数组-数组的概述_哔哩哔哩_bilibili 这篇 Java 基础&#xff0c;我吹不动了 - 掘金 (juejin.cn) 1.数组概念 重点 2.数组声明和初始化 new的时候要么给出静态初始化的数据{a,b,c}&#xff0c;要么给出动态初始化指定长度 [4]。 否则报错&#xff0c;初始化必须确定长度…

Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源

云产品按月订购&#xff0c;无需购买硬件资源 PT Cloud Application Firewall 是 Positive Technologies 推出的首个用于保护网络应用程序的商用云产品。Web 应用层防火墙 (web application firewall, WAF) 现在可以通过 技术合作伙伴——授权服务商和云提供商以订购方式提供1…

获取阿里云Docker镜像加速器

1、阿里云官网&#xff08;www.aliyun.com&#xff09;注册账号 2、打开“控制台首页” 控制台首页地址&#xff1a;https://home.console.aliyun.com/home/dashboard/ProductAndService 3、点击“概览->容器镜像服务 ACR” 4、打开“镜像工具->镜像加速器”页面&#x…

FPGA实现双向电平转换

网上搜了一圈&#xff0c;好像没看到的类似的中文资料&#xff0c;不过MicroSemi有个文档AC349上给出了完整的解决方案&#xff0c;还有参考代码。 话不多说&#xff0c;看图&#xff1a; 欲知详情的朋友&#xff0c;请参考 AC349

vue过渡,vue3组合式API详细介绍

7.过渡效果 vue提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动画 Transition会在一个元素或组件进入和离开DOM时应用动画TransitionGroup会在一个v-for列表中的元素或组件被插入,移动,或移除时应用动画 7-1过渡效果 过渡模式 <Transition mode"out-in&q…

测试用例的设计方法(全):正交实验设计方法|功能图分析方法|场景设计方发

正交实验设计方法 一.方法简介 利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人&#xff0c;给软件测试带来沉重的负担&#xff0c;为了有效…

YOLO目标检测——无人机航拍输电线路绝缘瓷瓶数据集下载分享【对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;电力系统运维、状态监测与故障诊断、智能电网建设等领域数据集说明&#xff1a;无人机航拍输电线路绝缘瓷瓶数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量…

云计算赛项容器云2023搭建

部署容器云平台[5 分] 使 用 OpenStack 私 有 云 平 台 创 建 两 台 云 主 机 &#xff0c; 云 主 机 类 型 使 用 4vCPU/12G/100G 类型&#xff0c;分别作为 Kubernetes 集群的 Master 节点和 node 节点&#xff0c; 然后完成 Kubernetes 集群的部署&#xff0c;并完成 Istio …

Linux文件目录以及文件类型

文章目录 Home根目录 //bin/sbin/etc/root/lib/dev/proc/sys/tmp/boot/mnt/media/usr 文件类型 Home 当尝试使用gedit等编辑器保存文件时&#xff0c;系统默认通常会先打开个人用户的“家”&#xff08;home&#xff09;目录&#xff0c; 建议在通常情况下个人相关的内容也是保…

Unity中Shader法线贴图(下)理论篇

文章目录 前言一、采样出错的原因二、切线空间是什么&#xff1f;切线空间图解&#xff1a; 三、计算方式1、统一变换到切线空间下进行计算2、统一变换到世界空间下进行计算 四、一般统一变换到世界空间下的坐标进行计算1、求M^-1^2、求出n~w~ 前言 这篇文章&#xff0c;主要解…

使用 VPN ,一定要知道的几个真相!

你们好&#xff0c;我的网工朋友。 今天想和你聊聊VPN。在VPN出现之前&#xff0c;企业分支之间的数据传输只能依靠现有物理网络&#xff08;例如Internet&#xff09;。 但由于Internet中存在多种不安全因素&#xff0c;报文容易被网络中的黑客窃取或篡改&#xff0c;最终造…

whisper使用方法

看这个 github https://github.com/Purfview/whisper-standalone-win/tags下载 视频提取音频 ffmpeg -i 222.mp4 -vn -b:a 128k -c:a mp3 output.mp3截取4秒后的音频 ffmpeg -i output.mp3 -ss 4 -c copy output2.mp3使用 whisper-faster.exe 生成字幕 whisper-faster.exe …

网工内推 | 国企、港企网工,年底双薪,NA以上认证即可

01 中航期货有限公司 招聘岗位&#xff1a;信息技术部-网络工程师 职责描述&#xff1a; 1、负责总部、分支机构、外联单位网络的日常运维、故障和应急处置&#xff0c;特别是定期监测设备的运行状态&#xff0c;对存在隐患的地方及时发现改正&#xff0c;保持网络稳定通畅&am…

OSG文字-显示汉字 (1)

OSG文字 适当的文字信息对于显示场景信息是非常重要的。在 OSG中&#xff0c;osgText 提供了向场景中添加文字的强大功能&#xff0c;由于有第三方插件 FreeType 的支持&#xff0c;它完全支持TrueType字体。 读者可能对 FreeType和TrueType还不太了解&#xff0c;下面进行具体…

【C++ STL】string类-----迭代器(什么是迭代器?迭代器分哪几类?迭代器的接口如何使用?)

目录 一、前言 二、什么是迭代器 三、迭代器的分类与接口 &#x1f4a6;迭代器的分类 &#x1f4a6;迭代器的接口 &#x1f4a6;迭代器与接口之间的关联 四、string类中迭代器的应用 &#x1f4a6; 定义string类----迭代器 &#x1f4a6;string类中迭代器进行遍历 ✨be…

最强英文开源模型Llama2架构与技术细节探秘

prerequisite: 最强英文开源模型LLaMA架构探秘&#xff0c;从原理到源码 Llama2 Meta AI于2023年7月19日宣布开源LLaMA模型的二代版本Llama2&#xff0c;并在原来基础上允许免费用于研究和商用。 作为LLaMA的延续和升级&#xff0c;Llama2的训练数据扩充了40%&#xff0c;达到…

浅析ChatGPT中涉及到的几种技术点

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

C语言前瞻

文章目录 C语言基础简介编译方式分布编译示例流程一步编译 代码运行运行结果展示实际代码 C语言基础简介 关于C语言的书籍&#xff0c;文章有很多。C的历史我不赘述&#xff0c;只讲C语言的基础语法和使用&#xff0c;帮助大家入门&#xff0c;同时也是自己学习过程的一个回顾。…

Iceberg学习笔记(1)—— 基础知识

Iceberg是一个面向海量数据分析场景的开放表格式&#xff08;Table Format&#xff09;&#xff0c;其设计的目的是解决数据存储和计算引擎之间的适配的问题 表格式&#xff08;Table Format&#xff09;可以理解为元数据以及数据文件的一种组织方式&#xff0c;处于计算框架&…