Blog Post

详细分析Redis性能监控指标 附参数解释(全)

目录

前言1. 基本指标2. 监控命令3. 实战演示

前言

对于Redis的相关知识推荐阅读:

Redis框架从入门到学精(全)Python操作Redis从入门到精通附代码(全)Redis相关知识

1. 基本指标

Redis 是一个高性能的键值存储系统,常用于缓存、消息队列等场景

性能监控是确保 Redis 运行稳定和高效的关键

以下是 Redis 中必须监控的一些重要指标以及它们的详细分析:

内存使用情况连接数命令执行情况持久化CPU 使用率网络流量主从复制延迟缓存命中率慢查询客户端命令队列1.总内存使用量:监控 Redis 实例占用的总内存量,确保不会超出可用内存2.内存碎片:监控内存碎片情况,尽量避免内存碎片导致的性能问题3.命中内存:监控 Redis 缓存命中率,确保大部分请求都可以从内存中获取数据,而不是从磁盘1.当前连接数:监控当前连接到 Redis 实例的客户端数量,确保不会达到连接上限2.连接建立速率:监控连接建立速率,确保没有异常的连接波动1.命令执行速率:监控 Redis 执行命令的速率,了解系统的负载情况2.最耗时命令:监控最耗时的命令,优化这些命令的执行效率1.RDB 持久化频率:监控 RDB 持久化的频率,确保数据定期持久化到磁盘2.AOF 持久化体积:监控 AOF 日志的体积,确保不会过大导致性能下降1.系统 CPU 使用率:监控 Redis 进程占用的 CPU 使用率,确保不会过高2.单个命令的 CPU 消耗:监控单个命令的 CPU 消耗,优化高 CPU 消耗的命令输入/输出流量:监控 Redis 实例的网络输入和输出流量,确保网络带宽足够支持流量需求主从复制延迟时间:监控主从复制的延迟时间,确保从节点能及时同步主节点的数据缓存命中率:监控 Redis 缓存的命中率,确保大部分请求都能从缓存中获取数据,减少对后端存储的访问慢查询日志:监控慢查询日志,找出执行时间较长的查询,进行优化客户端命令队列长度:监控客户端命令队列的长度,避免积压过多的请求导致系统响应延迟

以上指标的监控可以通过 Redis 自带的监控命令(如 INFO 命令)、Redis 的监控工具(如 Redis Monitor、Redis Desktop Manager)以及第三方监控工具(如 Prometheus、Grafana)来实现。及时地监控这些指标,有助于发现潜在的性能问题并及时进行调优,确保 Redis 系统的稳定性和高性能运行

2. 监控命令

获取 Redis 信息:使用 INFO 命令可以获取 Redis 的各种信息,包括内存使用、连接数、持久化信息、统计信息等:redis-cli INFO

监控 Redis 实例的内存使用情况:redis-cli INFO memory

监控当前连接数:redis-cli INFO clients

查看 Redis 命令执行情况:redis-cli INFO commandstats

监控 CPU 使用情况:redis-cli INFO CPU

查看网络情况:redis-cli INFO stats

查看主从复制延迟:redis-cli INFO replication

监控慢查询:redis-cli SLOWLOG GET

查看客户端命令队列长度:redis-cli INFO clients

这些命令会返回大量的信息,根据需要选择性地获取特定部分的信息进行监控和分析

通常编写脚本来定期运行这些命令,将结果保存到日志文件中,或者使用监控工具来实时获取和展示这些信息

3. 实战演示

以下命令为Window,思路大同小异!

为了讲解演示,以测试库的Redis为例:redis-cli.exe info

大致的含义如下:

E:\software\Redis>redis-cli.exe info

# Server 关于 Redis 服务器的一般信息,包括版本、构建信息、运行模式等

redis_version:5.0.14.1 # Redis 版本

redis_git_sha1:ec77f72d # Git 版本号

redis_git_dirty:0

redis_build_id:5627b8177c9289c

redis_mode:standalone # Redis 运行模式,这里是 standalone(单机模式)

os:Windows # 操作系统

arch_bits:64

multiplexing_api:WinSock_IOCP

atomicvar_api:pthread-mutex

process_id:10608 # Redis 进程 ID

run_id:65a73910df22810039ae94a51aa66712775b8cf3

tcp_port:6379 # TCP 端口号

uptime_in_seconds:1174094 # 服务器已运行的秒数

uptime_in_days:13 # 服务器已运行的天数

hz:10

configured_hz:10

lru_clock:12732602

executable:E:\software\Redis\"e:\software\redis\redis-server.exe"

config_file:E:\software\Redis\redis.windows.conf

# Clients 关于客户端连接的信息

connected_clients:14 # 当前连接的客户端数量

client_recent_max_input_buffer:4

client_recent_max_output_buffer:0

blocked_clients:0 # 正在等待阻塞命令执行的客户端数量

# Memory 关于内存使用的信息

used_memory:1009784 # 已分配的内存总量

used_memory_human:986.12K

used_memory_rss:967520

used_memory_rss_human:944.84K

used_memory_peak:1268176 # 内存使用峰值

used_memory_peak_human:1.00M

used_memory_peak_perc:79.62%

used_memory_overhead:937224

used_memory_startup:660344

used_memory_dataset:72560

used_memory_dataset_perc:20.76%

allocator_allocated:1328232

allocator_active:427819008

allocator_resident:436207616

total_system_memory:0

total_system_memory_human:0B

used_memory_lua:37888 # Lua 脚本引擎使用的内存量

used_memory_lua_human:37.00K

used_memory_scripts:0

used_memory_scripts_human:0B

number_of_cached_scripts:0

maxmemory:0

maxmemory_human:0B

maxmemory_policy:noeviction

allocator_frag_ratio:322.10

allocator_frag_bytes:426490776

allocator_rss_ratio:1.02

allocator_rss_bytes:8388608

rss_overhead_ratio:0.00

rss_overhead_bytes:-435240096

mem_fragmentation_ratio:1.00 # 内存碎片率

mem_fragmentation_bytes:0

mem_not_counted_for_evict:0

mem_replication_backlog:0

mem_clients_slaves:0

mem_clients_normal:273264

mem_aof_buffer:0

mem_allocator:jemalloc-5.2.1-redis

active_defrag_running:0

lazyfree_pending_objects:0

# Persistence

loading:0 # 是否正在加载持久化文件

rdb_changes_since_last_save:0 # 是否正在加载持久化文件

rdb_bgsave_in_progress:0

rdb_last_save_time:1707200299 # 最后一次 RDB 持久化的时间戳

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

rdb_last_cow_size:0

aof_enabled:0 # 是否启用 AOF 持久化

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

# Stats 统计信息,包括连接、命令处理、网络流量等

total_connections_received:131 # 接收的连接总数

total_commands_processed:378897 # 处理的命令总数

instantaneous_ops_per_sec:0

total_net_input_bytes:6442981

total_net_output_bytes:1210414995

instantaneous_input_kbps:0.00

instantaneous_output_kbps:0.00

rejected_connections:0

sync_full:0

sync_partial_ok:0

sync_partial_err:0

expired_keys:58 # 过期的键总数

expired_stale_perc:0.00

expired_time_cap_reached_count:0

evicted_keys:0

keyspace_hits:15292 # 命中键总数

keyspace_misses:1262 # 未命中键总数

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:23662

migrate_cached_sockets:0

slave_expires_tracked_keys:0

active_defrag_hits:0

active_defrag_misses:0

active_defrag_key_hits:0

active_defrag_key_misses:0

# Replication 关于主从复制的信息

role:master # 角色,这里是 master(主节点)

connected_slaves:0 # 连接的从节点数量

master_replid:89ae92c82f117813f4ac44fcc520a11b695125a1

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:0

second_repl_offset:-1

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

# CPU 使用情况

used_cpu_sys:5.687500 # 系统 CPU 使用时间

used_cpu_user:22.531250 # 用户 CPU 使用时间

used_cpu_sys_children:0.000000

used_cpu_user_children:0.000000

# Cluster 集群相关信息

cluster_enabled:0 # 是否启用集群模式

# Keyspace # 数据库键空间相关信息

db0:keys=64,expires=0,avg_ttl=0 # 数据库 0 的统计信息,包括键数量、过期键数量和平均 TTL

如果要做过滤筛选,不同系统不一样选择:

对于Linux操作系统来说,通过grep筛选 对于Window操作系统来说,通过findstr筛选

推荐阅读:Window命令行 如何查看以及关闭进程

类似如下命令:

(如果是linux则更换为redis-cli info | grep ops # 每秒操作数 ) 以下为Window:

性能监控:redis-cli.exe info | findstr ops # 每秒操作数内存监控:redis-cli.exe info | findstr used | grep human 内存碎片率:redis-cli.exe | findstr mem_fragmentation_ratio已使用内存:redis-cli.exe info | findstr used_memory