20191227 Redis监控和性能指标

本文深入探讨Redis的性能监控指标,包括内存使用率、命令处理数、内存碎片率等关键参数,同时介绍如何使用Redis-Stat进行可视化监控,以及如何通过分析慢日志、缓存命中率和持久化状态来优化Redis性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Redis性能指标;

2、Redis配置文件;

 

通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息

比较重要的2部分性能指标memory和stats

可以指定info命令的参数来获取单个分类下的数据。比如输入info memory命令,会只返回与内存相关的数据。

1、内存使用率used_memory

used_memory是Redis使用的内存总量,它包含了实际缓存占用的内存和Redis自身运行所占用的内存(如元数据、lua)。

used_memory 字段数据表示的是:由Redis分配器分配的内存总量,以字节(byte)为单位。

used_memory_human上的数据和used_memory是一样的值,它以M为单位显示,仅为了方便阅读。

 

2、命令处理数total_commands_processed

在info信息里的total_commands_processed字段显示了Redis服务处理命令的总数,其命令都是从一个或多个Redis客户端请求过来的。

 

3、内存碎片率mem_fragmentation_ratio

info信息中的mem_fragmentation_ratio给出了内存碎片率的数据指标,它是由操系统分配的内存除以Redis分配的内存得出。

跟踪内存碎片率对理解Redis实例的资源性能是非常重要的。内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明redis没有发生内存交换。但如果内存碎片率超过1.5,那就说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率。若是内存碎片率低于1的话,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。

 

4、回收key数量

info信息中的evicted_keys/ɪˈvɪktɪd/字段显示的是,因为maxmemory限制导致key被回收删除的数量。

回收key的情况只会发生在设置maxmemory值后,不设置会发生内存交换。 当Redis由于内存压力需要回收一个key时,Redis首先考虑的不是回收最旧的数据,而是在最近最少使用的key或即将过期的key中随机选择一个key,从数据集中删除。

 

软件包管理器。

基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum install redis (是否安装过此软件?) Package redis-5.0.7-1.el7.remi.x86_64 already installed and latest version

如果找不到命令,说明对应的软件没有安装,去安装软件即可。

 

 

在linux上启动redis-stat:./redis-stat

redis是否开启了AOF,0表示未开启,1表示开启;

配置文件一般在etc目录下,比如redis.conf,mysql.conf;

按 ESC :wq 保存并退出

在哪个目录下执行安装命令,当前软件就安装到那里。

 

service redis start # 启动redis;

service redis stop # 停止redis;

service redis status # 查看redis运行状态;

ps -ef | grep redis # 查看redis进程;

redis-cli # 进入本机redis;

keys * # 列出所有key;

ps aux | grep redis 这个命令对我帮助很大

# 将redis-cli拷贝到/usr/local/bin/下,让redis-cli指令可以在任意目录下直接使用;

sudo cp src/redis-cli /usr/local/bin/;

 

 

Redis性能监控之Redis-Stat

Redis-Stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。

鼠标放上去会显示完整的列名。

监听某个指定实例还是监听所有实例

redis性能监控工具;用 redis-stat 进行redis的性能数据收集;

Redis-Stat数据展示工具:控制台使用,web页面使用;

如何配置在web页面上展示(比较方便)? 对外映射端口即可。

linux上如何启动redis-stat? ./redis-stat

当前进程没有绑定到网卡上。

直接映射端口出去:浏览器能够访问;http://192.168.140.88:7006/

窗口关闭后台启动:使用nohup处理;

./redis-stat 192.168.140.88:6379 --server=7006 1 --daemon

./redis-stat 127.0.0.1:6379 --server=7006 1 --daemon

当前进程是否绑定到了网卡之上。

nohup ./redis-stat 127.0.0.1:6379 --server=7006 1 &

每隔1秒打印一次信息

service redis status

Linux netstat命令用于显示网络状态。利用netstat指令可让你得知整个Linux系统的网络情况。

netstat -tnpl

三大核心指标:每秒执行命令数,cpu使用率,内存使用率;

 

time: 更新参数时间

US: Redis 服务器使用的用户 CPU

SY: Redis 服务器使用的系统 CPU

CL: connected_clients:客户端连接数(不包括从站的连接数)

cmd/s: total_commands_processed_per_ses 服务器已每秒执行的命令数量

exp/s: expired_keys_per_second 因为过期而每秒被自动删除的数据库键数量

11evt/s: evicted_keys_per_second 因为最大内存容量限制而每秒被驱逐(evict)的键数量

hit%/s: keyspace_hits_ratio _per_second 查找数据库键成功的次数比例

hit/s: keyspace_hits  _per_second  查找数据库键成功的次数

mis/s: keyspace_misses _per_second 查找数据库键每秒失败的次数

aofcs: aof_current_size  AOF文件目前的大小

redis-cli 直接敲这个命令即可。

 

1慢日志:

1.1、通过命令[slowlog get]得到 Redis 执行的 slowlog 集合,理想情况下slowlog 集合应该为空即没有任何慢日志。

1.2、若发现有慢命令,则应该逐个分析是否正常,是否需要优化。

   

2存活情况:是最重要的健康指标,通过命令 PING 的响应是否为 PONG 来判断。

 

3连接数:connected_clients    

3.1、连接的客户端数量,radis-stat 监控工具或命令 [redis-cli info Clients|grep connected_clients] 得到,这个值与使用Redis服务的连接池配置关系比较大,这个值如果很大,需要排查问题原因。

3.2、另外还有一个拒绝连接数(rejected_connections)也需要关注,这个值理想状态是0 。如果大于0,说明创建的连接数大于 maxclients,需要排查原因。是 Redis 连接池配合不合理还是连接这个Redis 的服务过多。

 

4 阻塞客户端数量:blocked_clients 

4.1 blocked_clients 通常是执行了 list 数据类型的 BLPOP 或者 BRPOP 命令引起的,可以通过[redis-cli info Clients|grep blocked_clients]得到,这个值最应该=0。

 

5 使用内存峰值

5.1 监控 Redis 内存使用峰值,可以通过命令[config set maxmemory]设置允许使用的最大内存。

5.2 为了防止发生swap导致Redis性能骤减,甚至由于使用内存超标导致系统kill,建议used_memory_peak(占用内存的峰值)的值与maxmemory 的值有个安全区间,例如1G。

5.3 可用radis-stat查看used_memory图像化曲线找到占用内存的峰值。

 

6 内存碎片率:used_memory_rss/use_memory 这两个值可用radis-stat监控

6.1 mem_fragmentation_ratio = used_memory_rss/use_memory 当值大于1时,表示分配的内存超过实际使用的内存,数值越大[利用率不高],碎片率越严重。当这个值小于1时,表示发生了 swap(Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用) ,既可用内存不足。

6.2 Redis4.0 有一个主要的特性就是优化内存碎片率问题(Memory de-fragmentation)。在redis.conf 配置文件中[ACTIVE DEFRAGMENTATION:碎片整理允许Redis压缩内存空间,从而回收内存。此特性默认是关闭的,可以通过命令CONFIG SET activedefrag yes 热启动这个特性]。

6.3 当内存使用量(use_memory)很小的时候,这个值参考价值不大。所以建议used_memory至少1G以上才考虑对内存碎片率进行监控。

 

7缓存命中率:keyspace_misses + keyspace_hits  

7.1 keyspace_misses/keyspace_hits 这两个指标用来统计缓存的命中率,keyspace_misses值未命中次数,keyspace_hits 表示命中次数。keyspace_hits/(keyspace_misses+keyspace_hits) 就是缓存命中率。

7.2 如果缓存命中率过低,那么要排查对缓存的用法是否有问题。

 

8 OPS:instantaneous_pos_per_sec 表示缓存的OPS(operation per second 每秒操作次数)

 

9 持久化:

9.1 rdb_last_bgsave_status/aof_last_bgrewrite_status,即最近一次或者最后一次 RDB/AOF 持久化是否有问题,这两个值都应该时 “OK”。

由于 Redis 持久化时会 fork 子进程,且 fork 是一个完全阻塞的过程,所以可以监控 fork    耗时即:latest_fork_usec,单位是微妙,如果这个值比较大会影响业务,甚至出现 timeout 。

9.2失效KEY:如果把 Redis 当缓存使用,那么建议所有的key都设置expire属性,通过命令redis-cli info Keyspace 得到每个 db 中 key 的数量和设置了 expire属性的 key 的属性,且 expires(表示设置了超时时间的key个数) 需要 等于 keys。

 

Redis对用户信息怎么处理的,登录成功后如何保存本地信息,Redis缓存哪些信息?

Redis计数器:Redis Incr命令将key中储存的数字值增一。如果key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。一般通常用来当做计数器来用。

Redis的单点安装,以及开始两种持久化操作;

Redis如何部署集群,设置各个节点之间的关系,如何建立主从模式?

使用redis做限流功能?

Redis的性能监控工具以及Redis的性能,最新版redis客户端只能看到粗略的情况?

 

如何封装本地缓存框架?

Cache类似于Map,它是存储键值对的集合。

//设置cache的初始大小为10,要合理设置该值

//设置并发数为5,即同一时间最多只能有5个线程往cache执行写入操作

内存使用率是Redis服务最关键的一部分。如果一个Redis实例的内存使用率超过可用最大内存 (used_memory >可用最大内存)

如果存储的是对象,需要把对象转化成String存储,所以使用了序列化工具。

getIfPresent(String key)

通过key获取缓存中的value,若不存在直接返回null。

 

Redis 一定会牵涉到序列化与反序列化的问题。

如何读取配置文件CacheConfig

创建一个统一的操作redis Client的工具类

Redis中涉及的异常处理?当前框架哪些操作redis不支持?

如何设置缓存的定时刷新?Cache

Redis 连接池的常用配置以及使用,关闭连接资源

Redis Cluster客户端命令

 

参考:

https://www.cnblogs.com/shamo89/p/8384921.html

https://www.cnblogs.com/gossip/p/5993922.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值