【赵渝强老师】监控Redis

在这里插入图片描述

对运行状态的Redis实例进行监控是运维管理中非常重要的内容,包括:监控Redis的内存、监控Redis的吞吐量、监控Redis的运行时信息和监控Redis的延时。通过Redis提供的监控命令便能非常方便地实现对各项指标的监控。

一、监控Redis的内存

视频讲解如下

【赵渝强老师】监控Redis的内存

Redis监控内存最直接的方法当然就是使用系统提供的info命令来做了。只需要执行下面一条命令,就能获得Redis关于内存的状态报告。

bin/redis-cli info |grep mem输出的信息如下:
used_memory:873720 					Redis分配的总内存量。
used_memory_human:853.24K 			以可读方式展示Redis分配的总内存量。
used_memory_rss:9809920 			Redis总占用内存量。
used_memory_rss_human:9.36M 		可读方式展示Redis总占用内存量。
used_memory_peak:931792 			内存使用量的峰值。
used_memory_peak_human:909.95K 		可读方式展示内存使用量的峰值。
used_memory_peak_perc:93.77% 		内存使用量峰值的百分比。
used_memory_overhead:810000 		缓冲区等占用的内存。
used_memory_startup:809992 			启动Redis实例时消耗的内存。
used_memory_dataset:63720 			Redis数据所占用的内存。
used_memory_dataset_perc:99.99%		Redis数据所占用内存的百分比。
total_system_memory:4126871552 		操作系统总内存。
total_system_memory_human:3.84G 	可读方式展示操作系统总内存。
used_memory_lua:37888 				LUA脚本消耗的内存。
used_memory_lua_human:37.00K 		可读方式展示LUA脚本消耗的内存。
used_memory_scripts:0
used_memory_scripts_human:0B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:12.11 		内存的碎片率。
mem_fragmentation_bytes:8999912 	内存碎片的大小。
mem_not_counted_for_evict:4
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:0
mem_aof_buffer:8
mem_allocator:jemalloc-5.1.0 		Redis内存分配器版本。

二、监控Redis的吞吐量

视频讲解如下

【赵渝强老师】监控Redis的吞吐量

通过执行下面命令可以监控Redis的吞吐量。

127.0.0.1:6379 > info stats
输出的信息如下:
# Stats
total_connections_received:1 	总的连接数请求。
total_commands_processed:1 		从Redis启动以来总计处理的命令数。
instantaneous_ops_per_sec:0 	当前Redis实例的OPS。
total_net_input_bytes:42 		网络总入量。
total_net_output_bytes:20324 	网络总出量。
instantaneous_input_kbps:0.00 	每秒输入量,单位是kb/s。
instantaneous_output_kbps:0.00 	每秒输出量,单位是kb/s。
rejected_connections:0 			被拒绝的连接数。
......

《Redis架构原理与高性能实战》

三、监控Redis的运行时信息

视频讲解如下

【赵渝强老师】监控Redis的运行时信息

Redis提供的info命令不仅能够查看实时的吞吐量(ops/sec),还能看到一些有用的运行时信息。下面用grep过滤出一些比较重要的实时信息,比如已连接的和在阻塞的客户端、已用内存、拒绝连接、实时的tps和数据流量等。执行下面的命令:

bin/redis-cli info | \
grep -e "connected_clients" \
-e "blocked_clients" \
-e "used_memory_human" \
-e "used_memory_peak_human" \
-e "rejected_connections" \
-e "evicted_keys" \
-e "instantaneous"输出的信息如下:
connected_clients:2 			已连接的客户端数。
blocked_clients:0 				已阻塞的客户端数
used_memory_human:2.41G 		已使用的内存大小。
used_memory_peak_human:2.41G 	已使用内存大小的峰值。
instantaneous_ops_per_sec:0 	每秒处理的指令数。
instantaneous_input_kbps:0.00 	每秒读取的字节数。
instantaneous_output_kbps:0.00 	每秒写入的字节数
rejected_connections:0 			被拒绝的连接数。
evicted_keys:0 					Redis实例启动以来被删除的键的数量。

四、监控Redis的延时

视频讲解如下

【赵渝强老师】监控Redis的延时

Redis中的延时可以通过客户端进行手动的监控,也可以由服务器内部进行自动的延迟监控。从客户端可以监控Redis的延迟,利用Redis提供的PING命令,不断PING服务端,记录服务端响应PONG的时间。下面开两个终端,一个监控延迟,一个监视服务端收到的命令。如果我们故意用DEBUG命令制造延迟,就能看到一些输出上的变化。

服务端内部的延迟监控稍微麻烦一些,因为延迟记录的默认阈值是0。尽管空间和时间耗费很小,Redis为了高性能还是默认关闭了它。所以首先我们要开启它,设置一个合理的阈值。

下面通过具体的示例来进行演示。

(1)执行下面的命令使用Redis客户端进行手动监控。

bin/redis-cli --latency输出的信息如下:
min: 0, max: 1, avg: 0.22 (211 samples)提示:此时会发现Redis一直在执行延时监控,并将结果输出到屏幕上。

(2)新开启一个Redis客户端,通过debug命令手动触发一个延时。

127.0.0.1:6379 > debug sleep 2

(3)观察第(1)步中输出的信息。

min: 0, max: 1991, avg: 0.40 (7557 samples)提示:这时候可以看出Redis监控到目前产生的最大演示是1991毫秒,即2秒左右。

(4)查看服务器内部监控的阈值设定。

127.0.0.1:6379> config get latency-monitor-threshold输出的信息如下:
1) "latency-monitor-threshold"
2) "0"提示:在默认情况下,Redis关闭了延迟的服务器内部监控机制。

(5)设置服务器内部监控阈值是100毫秒。

127.0.0.1:6379> config set latency-monitor-threshold 100

(6)手动触发一些延迟。

127.0.0.1:6379 > debug sleep 2
127.0.0.1:6379 > debug sleep .15
127.0.0.1:6379 > debug sleep .5

(7)使用latency命令查看产生的延迟信息。

# 查看最近一次产生的延迟。
127.0.0.1:6379> latency latest
1) 1) "command"
2) (integer) 1650195297
3) (integer) 501
4) (integer) 2000# 查看延迟的时间序列。
127.0.0.1:6379 > latency history command
1) 1) (integer) 1650195290
2) (integer) 2000
2) 1) (integer) 1650195292
2) (integer) 152
3) 1) (integer) 1650195297
2) (integer) 501# 以图形化的方式显示延迟。
127.0.0.1:6379 > latency graph command
command - high 2000 ms, low 152 ms (all time high 2000 ms)
----------------------------------------------------------
#
|
|
|_#
115
mm5
s

(8)使用Redis提供的优化延迟指导。

127.0.0.1:6379 > latency doctor输出的信息如下:
Dave, I have observed latency spikes in this Redis instance. You don't mind talking about it, do you Dave?
1. command: 3 latency spikes (average 884ms, mean deviation 743ms, period 92.67 sec). Worst all time event 2000ms.
I have a few advices for you:
- Check your Slow Log to understand what are the commands you are running which are too slow to execute. Please check https://redis.io/commands/slowlog for more information.- Deleting, expiring or evicting (because of maxmemory policy) large objects is a blocking operation. If you have very large objects that are often deleted, expired, or evicted, try to fragment those objects into multiple smaller objects.- I detected a non zero amount of anonymous huge pages used by your process. This creates very serious latency events in different conditions, especially when Redis is persisting on disk. To disable THP support use the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled', make sure to also add it into /etc/rc.local so that the command will be executed again after a reboot. Note that even if you have already disabled THP, you still need to restart the Redis process to get rid of the huge pages already created.提示:Redis提供的延迟指导可以帮助定位延迟产生的原因,并提供了一些解决的方案。从上面的输出中可以看出,doctor命令给出了三点优化的建议。

(9)使用Redis延迟度量的基线。

bin/redis-cli --intrinsic-latency 100提示:度量是指一段时间内,某一性能指标的累计值。延迟中的一部分是来自环境的,比如操作系统内核、虚拟化环境等等。Redis提供了度量这一部分延迟基线的方法。输出的信息如下:
Max latency so far: 1 microseconds.
Max latency so far: 16 microseconds.
Max latency so far: 17 microseconds.
Max latency so far: 82 microseconds.
Max latency so far: 116 microseconds.
Max latency so far: 169 microseconds.
Max latency so far: 388 microseconds.
Max latency so far: 1488 microseconds.
Max latency so far: 6807 microseconds.
Max latency so far: 10914 microseconds.
Max latency so far: 13091 microseconds.
Max latency so far: 14162 microseconds.
1594254423 total runs (avg latency: 0.0627 microseconds / 62.73 nanoseconds per run).Worst run took 225778x longer than the average latency.

《Redis架构原理与高性能实战》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML前端手册

HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案,供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…

C++:类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

JVM基本概念及内存管理模型

一、JVM基本概念 JVM(Java Virtual Machine,Java 虚拟机)是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令,并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下: 加载和执行…

MyBatis - 单元测试 参数传递 注解 CRUD

目录 1. MyBatis 简介 2. 简单使用 MyBatis 2.1 创建 MyBatis 项目 2.2 连接数据库 2.3 创建 Java 类 2.4 创建 Mapper 接口 2.5 在测试类中执行 3. 单元测试 3.1 Test 3.2 SpringBootTest 3.3 BeforeEach / AfterEach 4. MyBatis 基础操作 4.1 配置 MyBatis 打印日…

大语言模型学习--本地部署DeepSeek

本地部署一个DeepSeek大语言模型 研究学习一下。 本地快速部署大模型的一个工具 先根据操作系统版本下载Ollama客户端 1.Ollama安装 ollama是一个开源的大型语言模型(LLM)本地化部署与管理工具,旨在简化在本地计算机上运行和管理大语言模型…

shell文本处理

shell文本处理 一、grep ​ 过滤来自一个文件或标准输入匹配模式内容。除了 grep 外,还有 egrep、fgrep。egrep 是 grep 的扩展,相当于 grep -E。fgrep 相当于 grep -f,用的比较少。 用法 grep [OPTION]... PATTERN [FILE]...支持的正则描述…

Linux中死锁问题的探讨

在 Linux 中,死锁(Deadlock) 是指多个进程或线程因为竞争资源而相互等待,导致所有相关进程或线程都无法继续执行的状态。死锁是一种严重的系统问题,会导致系统资源浪费,甚至系统崩溃。 死锁的定义 死锁是指…

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中,全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构,企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例,其利用中台系统将分散在CRM、ERP及内部文档…

ArcGIS Pro高级应用:高效生成TIN地形模型

一、引言 在地理信息科学与遥感技术的快速发展背景下,数字高程模型(DEM)已成为地形表达与分析的关键工具。 三角网(TIN)作为DEM的一种重要形式,因其能够精准描绘复杂地形特征而广受青睐。 ArcGIS Pro为用…

leetcode112-路径总和

leetcode 112 思路 我们利用递归来实现,用result字段来记录结果值,默认为false,我们递归的时候传入需要的目标值,然后每次遍历到一个节点,就用目标值减去节点当前值,最终到叶子节点时,如果是…

LLM | 论文精读 | CVPR | PEACE : 通过多模态大语言模型(MLLMs)赋能地质图全面理解

论文标题:FairCLIP: Harnessing Fairness in Vision-Language Learning 作者:Yan Luo Min Shi Muhammad Osama Khan Muhammad Muneeb Afzal等 期刊:CVPR 2025 email:yuhan.huangwhu.edu.cn 创作不易,恳请大家点赞收…

网络学习(四)HTTPS中,SSL的单向认证与双向认证

目录 一、什么是SSL?1.1 SSL 的主要功能1.2 SSL 的工作原理1.3 SSL 的核心组件1.4 SSL 的应用场景1.5 SSL 与 TLS 的区别 二、SSL 单向认证、双向认证2.1 SSL 单向认证2.2 SSL 双向认证2.3 总结:SSL 单向认证和双向认证的区别 一、什么是SSL?…

Mybatis 中#{} 和${} 的区别是什么?

在 MyBatis 中,#{} 和 ${} 都是用于动态 SQL 语句中的占位符,但是它们的作用和使用方式是不同的。下面是它们的区别: 1. #{} —— 用于防止 SQL 注入和自动类型处理 #{} 是用来将参数安全地传递到 SQL 语句中,它会将传递的参数值…

HTML-05NPM使用踩坑

2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷,然后一番折腾之后,终究还是没有解决npm的问题😞😞😞,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…

Zookeeper 的核心引擎:深入解析 ZAB 协议

#作者:张桐瑞 文章目录 前言ZAB 协议算法崩溃恢复选票结构选票筛选消息广播 前言 ZooKeeper 最核心的作用就是保证分布式系统的数据一致性,而无论是处理来自客户端的会话请求时,还是集群 Leader 节点发生重新选举时,都会产生数据…

C++ Primer 动态数组

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

基于 HTML、CSS 和 JavaScript 的智能九宫格图片分割系统

目录 1 前言 2 技术实现 2.1 HTML 结构 2.2 CSS 样式 2.3 JavaScript 交互 3 代码解析 3.1 HTML 部分 3.2 CSS 部分 3.3 JavaScript 部分 4 完整代码 5 运行结果 6 总结 6.1 系统特点 6.2 使用方法 1 前言 在当今数字化的时代,图片处理需求日益增长。…

Java+iTextPDF,实时生成与预览PDF文件的最佳实践!

Java+iTextPDF,实时生成与预览PDF文件的最佳实践! 背景 其实公司之前的项目里是用到了帆软报表的,然而最近接了一个新项目,这个项目独立部署在甲方的独立环境中,组长的意思是不用再单独部署一套帆软报表,成本太大,用其他方式实现一下。虽然我不太理解成本大在哪儿,不…

Linux 快捷命令链接

修改mvn命令 默认手动安装后,命令格式为 安装路径命令 /data/apache-maven-3.8.8/bin/mvn -v更改为通用的命令模式 [root ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [root ~]# echo $PATH /usr/local/node16/bin:/usr/local/sbin:/sbin…

论文回顾:NeoBERT:新一代 BERT

NeoBERT:新一代编码器,具有 4K 标记上下文长度,在 MTEB 上优于 RoBERTa 等更大的模型! 论文链接:https://arxiv.org/pdf/2502.19587 摘要 NeoBERT 是下一代双向编码器;它融合了最先进的架构、现代数据和优…