Redis中info命令详解

Redis的info命令提供了Server、Clients、Memory、Persistence、Stats、Replication、CPU、Cluster和Keyspace等9个维度的详细状态信息,帮助用户监控和优化Redis实例。本文介绍了内存管理、内存碎片、持久化、统计信息和主从复制等方面的要点,强调理解info命令对于Redis使用者的重要性。

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

目录

序言:

1:Server

2:Clients

3:Memory

4:Persistence

5:Stats

6:Replication

7:CPU

8:Cluster

9:Keyspace


序言:

redis中info命令可以很直观的通过各种维度属性描述信息告知我们当前redis的状态。我们可以通过此命令构建redis的实时监控系统。在上线之前的压测过程中,监控redis的各运行指标状态再结合系统本身的需求,可以提前进行配置优化设置。所以懂得redis中info命令返回的结果是一个redis使用者的基础条件。info命令从Server,Clients,Memory,Persistence,Stats,Replication,CPU,Cluster,Keyspace这9个维度告知使用者自己当前状态。建议不要自己简单看一遍就算了,自己主动敲一遍不说全部明白所以命令意思,但至少对于几个核心的要大致明白其意思(当前测试版本为5.0)。详细解释可以自行翻查server.h,

1:Server

对于redis所在服务器的基础环境进行描述

 

redis_versionredis的版本。demo:5.0.4
redis_git_sha1Git SHA1
redis_git_dirtyGit dirty flag
redis_build_idbuild id redis生成唯一id
redis_moderedis部署模式(standalone、Sentinel、Cluster)默认:standalone
os当前服务器的操作系统。demo:Linux 4.9.184-linuxkit x86_64
arch_bits

当前操作系统是32位还是64位

multiplexing_api

redis使用的事件处理机制模式默认为epoll

atomicvar_api

 Redis使用的Atomicvar API

gcc_version

编译redis的gcc编译器的版本号。demo:8.2.1

process_id

该服务在系统的进程id

run_id

redis服务器的随机id,此处作为(哨兵和集群)中的唯一标示

tcp_port

使用tcp端口默认6379

uptime_in_seconds

redis存活时间按秒计算

uptime_in_days

redis存活时间按天计算

hz

redis内部调度频率。(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行次数。默认为10

configured_hz 
lru_clock

自增的时钟,用于LRU算法管理,该时钟为(1000/设置的值:执行一次定时任务serverCron)更新一次。默认10则100ms更新一次

executable

执行启动文件在服务器路径信息

config_file

配置文件在服务器路径信息


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Demo:

 

2:Clients

对于客户端连接的一些信息

connected_clients

当前所有客户端连接redis的连接数(不包括通过从属服务器连接的客户端)

client_recent_max_input_buffer

当前连接的客户端中最大输入

client_recent_max_output_buffer

当前连接的客户端中最大输出
blocked_clients

因执行一些命令(BLPOP、BRPOP、BRPOPLPUSH)而导致阻塞的客户端数

 

 

 

 

Demo: 

3:Memory

redis内存有关参数

在参数中存在一些技术点提前描述下:

  1. redis中分配器(在编译的时候选择,可以是 libc 、 jemalloc 或者 tcmalloc 默认使用jemalloc),使用内存分配器可以更好的管理和重复利用内存,分配内存一般采用固定范围的内存块进程分配。例如jemalloc分配器将内存分为:Small class(存放小对象区域)、Large class(存放大对象区域)、Huge class(存放巨大对象区域)。如下图所示是jemalloc分配器详细情况

     那么当redis需要存储对象为10kb对象时,内存分配将将该对象分配到12kb的Large区域中,那么还存在2kb的内存空间无法使用,那么这2kb的内存空间就变为了内存碎片了
used_memory由Redis分配器分配的内存总量,包括使用的虚拟内存(即swap),以字节(byte)单位显示数据
used_memory_human与used_memory作用一样只不过显示单位为G
used_memory_rss

从操作系统角度返回redis使用内存数,与linux中top,ps命令返回数据一致。除了分配器分配的内存之外,used_memory_rss还包括进程运行本身需要的内存、内存碎片等,但是不包括虚拟内存

以字节(byte)单位显示数据

used_memory_rss_human

与used_memory_rss作用一样只不过显示单位为G

used_memory_peak

redis的内存消耗峰值(redis内存使用的最大值),以字节(byte)单位显示数据

used_memory_peak_human与used_memory_peak_human作用一样只不过显示单位为G
used_memory_peak_perc

(used_memory/used_memory_peak)*100% 

used_memory_overhead

redis维护整个内存数据集可用内部机制所需要的内存开销。包括维护内部数据结构,所有客户端输出缓冲区,AOF重写缓冲区,查询缓冲区,AOF写入缓冲区和主从复制的backlog。以字节(byte)单位显示数据

used_memory_startup

redis消耗的初始内存值,以字节(byte)单位显示数据

used_memory_dataset

redis中数据集所占内存数据大小(used_memory-used_memory_overhead),以字节(byte)单位显示数据

used_memory_dataset_perc

(used_memory_dataset/(used_memory—used_memory_startup))*100% 

used_memory_dataset在净内存(used_memory-used_memory_startup)使用量中所占的百分比

allocator_allocated

redis中分配器分配内存数,以字节(byte)单位显示数据

allocator_active

redis中分配器活跃内存数,以字节(byte)单位显示数据

allocator_residentredis中分配器常驻内存数,以字节(byte)单位显示数据
total_system_memory

系统内存总数,以字节(byte)单位显示数据

total_system_memory_human

与total_system_memory作用一致只不过显示单位为G

used_memory_lua

lua引擎使用内存量,以字节(byte)单位显示数据

used_memory_lua_human

与used_memory_lua作用一致只不过显示单位为G

used_memory_scripts

 

used_memory_scripts_human

 

number_of_cached_scripts 
maxmemory

redis中可分配的最大内存数,默认为0不限制

maxmemory_human与maxmemory作用一致只不过显示单位为G
maxmemory_policy

达到redis最大内存数maxmemory后的处理策略,默认为noeviction即后续所有申请都会引发异常

allocator_frag_ratio

分配器碎片率

allocator_frag_bytes分配器内存碎片大小,以字节(byte)单位显示数据
allocator_rss_ratio

分配器常驻内存比例

allocator_rss_bytes

分配器常驻内存大小,以字节(byte)单位显示数据

rss_overhead_ratio

常驻内存开销比例

rss_overhead_bytes

常驻内存开销大小,以字节(byte)单位显示数据

mem_fragmentation_ratio

redis中内存碎片率 此值为 (used_memory_rss/used_memory)*100%

mem_fragmentation_bytes

redis中内存碎片大小,以字节(byte)单位显示数据

mem_not_counted_for_evict

被驱逐的内存大小
mem_replication_backlog

从服务其中backlog内存大小

mem_clients_slaves

 

mem_clients_normal

 

mem_aof_buffer

redis使用aof持久化方式中aof_buffer缓冲区大小,以字节(byte)单位显示数据

mem_allocator

内存分配器(在编译的时候选择,可以是 libc 、 jemalloc 或者 tcmalloc 默认使用jemalloc)

active_defrag_running

内存整理是否处于活动状态 0否 1是

lazyfree_pending_objects

等待释放对象数,此值只会在使用ASYNC选项并调用UNLINK或FLUSHDB和FLUSHALL时存在

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

对于上述参数值的一些说明:

  1. use_memory与uss_memory_rss。use_memory从redis的角度分配的内存,use_memory_rss是从操作系统的角度来分配的内存,两者不一样在use_memory包含了swap区的内存,use_memory_rss虽然包含分配器分配的内存但不包含swap内存,并且还包含redis进程运行自身内存(包含各缓冲区内存),内存碎片。
  2. 如何处理内存碎片过多情况。详细可以参考redis中内存碎片处理                                                                                                                               
  3. mem_fragmentation_ratio:redis中内存碎片率,可以根据该值的大小看出当前redis服务的内存状况。但此值不是越大越好也不是越小越好。根据值不同可以分为3中情况
  • 3.1:mem_fragmentation_ratio=1.5以下左右此时redis服务数据正常运行状态存在内存碎片,但不是很多,对于系统不存在较大的影响
  • 3.2:mem_fragmentation_ratio>>1 说明此时use_memory_rrs远大于use_memory说明,服务中内存碎片过大,我们需要进行内存碎片重新整合 ,释放这些内存空间 
  • 3.3:mem_fragmentation_ratio<1 如果出现了这种情况说明出现了redis使用了虚拟内存(redis在内存不足时会将内存中数据交换到磁盘中),此时需要我们排除程序,为何会出现内存不足到需要使用到虚拟内存的情况,如果程序无误,需要进行评估是否增加redis服务节点内存,或者添加新的节点。是否考虑禁止使用swap交换,并指定配置属性为noeviction即时内存不足直接报错(为啥要禁用swap,在于redis的高性能在于读写使用内存,如果部分数据使用磁盘进行读写,磁盘的读写效率比内存慢百倍,redis又是单线程调度,那么redis的整体性能极大降低,从而导致线上服务出现缓慢响应情况)。

Demo数据:

4:Persistence

显示RDB和AOF相关信息,通过

loading

当前redis服务是否在加载数据文件

loading_start_time

加载数据文件开始时间 格式时间戳 需要正在loading中时才会显示

loading_total_bytes

加载文件总大小 需要正在loading中时才会显示

loading_loaded_bytes

已经加载的数据大小,以字节(byte)单位显示数据 需要正在loading中时才会显示

loading_loaded_perc

已经加载的数据占比 需要正在loading中时才会显示

loading_eta_seconds

预计剩余数据加载完成需要秒数 需要正在loading中时才会显示

rdb_changes_since_last_save

上一次rdb后发生变化的key数量

rdb_bgsave_in_progress

当前服务是否在进行rdb标志位 0否 1是

rdb_last_save_time

rdb最后一次执行的时间 格式时间戳

rdb_last_bgsave_status

rdb最后一次执行状态 

rdb_last_bgsave_time_sec

rdb最后一次执行时间 单位秒

rdb_current_bgsave_time_sec

正在执行的rdb持续时间 单位秒 不存在值为-1

rdb_last_cow_size

最后一次执行rdb操作期间copy-on-write分配的字节大小,以字节(byte)单位显示数据

aof_enabled

aof持久化开启标准为 0未开启,1开启

aof_rewrite_in_progress

aof文件重写是否正在进行标准为 0否 1是

aof_rewrite_scheduled

表示一旦进行中的RDB保存操作完成,就会安排进行AOF重写操作的标志 0否 1是,该值由redis服务设定。当出现RDB动作的同时也出现了自动aof重写操作,为了避免对磁盘造成压力,将改值改为1,将此次的aof重写动作推辞到rdb完成之后的下一次serverCron里才会触发。

aof_last_rewrite_time_sec

最后一次aof重写执行时间 单位秒 不存在值为-1

aof_current_rewrite_time_sec

正在执行aof重写持续时间 单位秒 不存在值为-1

aof_last_bgrewrite_status

最后一次aof重写是否成功 

aof_last_write_status

最后一次写入aof文件是否成功

aof_last_cow_size

最后一次执行aof重写操作期间copy-on-write分配的字节大小

aof_current_size

当前aof文件大小 需要开启aof持久化才会显示

aof_base_size

上次启动或重写的aof大小 需要开启aof持久化才会显示

aof_pending_rewrite

 指示AOF重写操作是否会在当前RDB保存操作完成后立即执行 0否 1是 需要开启aof持久化才会显示

aof_buffer_length

当前aof_buffer缓冲区数据大小,以字节(byte)单位显示数据 需要开启aof持久化才会显示

aof_rewrite_buffer_length

当前aof_rewrite_buffer缓冲区数据大小,以字节(byte)单位显示数据 需要开启aof持久化才会显示

aof_pending_bio_fsync

在后台等待执行fsync(刷新内存缓冲区数据到磁盘)动作的任务数 需要开启aof持久化才会显示

aof_delayed_fsync

延迟fsync计数器 此值用于aof写入磁盘策略为everysec,每执行一次aof同步使若出现一次阻塞(整个aof文件写入同步时间为2s,若因为数据太多超过2s则会阻塞主进程)则该值相对于加一需要开启aof持久化才会显示

Demo数据(数据显示不全):

 

5:Stats

系统中一些常规数据统计

total_connections_received

服务器启动以来接收到的连接总数(包含历史连接数) 服务器重启该值置空。

total_commands_processed

服务器启动以来接收的命令总数  服务器重启该值置空。

instantaneous_ops_per_sec

redis服务吞吐量即每秒处理命令数

total_net_input_bytes

redis服务接受输入总数据量,以字节(byte)单位显示数据

total_net_output_bytes

redis服务输出总数据量,以字节(byte)单位显示数据

instantaneous_input_kbps

输入带宽,redis服务每秒读字节数

instantaneous_output_kbps

输出带宽,redis服务每秒写字节数

rejected_connections

redis服务拒绝连接数

sync_full与从服务器之间完全同步(SYNC)的次数

 

sync_partial_ok

从服务器接受PSYNC(部分同步)请求次数

sync_partial_err从服务器未接受PSYNC(部分同步)请求次数,一旦从服务器无法进行部分同步时,强制会进行全量同步则sync_partial_err+1则sync_full+1
expired_keys

redis服务启动以来中失效的key总数

expired_stale_perc

过期key占总key比率

expired_time_cap_reached_count

过期计数

evicted_keys

redis服务运行以来由于maxmemory限制而导致被驱逐(参考Redis中数据淘汰机制与缓存失效策略)的key的数量

keyspace_hits

缓存命中成功数 在redis服务中能成功查找到key的次数

keyspace_misses

缓存命中失败数 在redis服务中不能成功查找到key的次数

pubsub_channels

redis提供mq功能中正在使用中的channel数

pubsub_patterns

redis提供mq功能中正在使用的pattern数

latest_fork_usec

最后一次fork子进程所花费时间 单位微秒 该值不能过大

migrate_cached_sockets

 

slave_expires_tracked_keys

从服务器中到期key数量

active_defrag_hits

主动垃圾碎片整理命中次数 该值与ActiveDefrag机制中源码stat_active_defrag_hits相同,用于计算内存碎片率,当碎片率达到指定值范围开启自动整理功能

active_defrag_misses

主动垃圾碎片整理未命中

active_defrag_key_hits

主动垃圾碎片整理key命中次数

active_defrag_key_misses

主动垃圾碎片整理key未命中次数

在压测redis时,可以通过 instantaneous_ops_per_sec,instantaneous_input_kbps,instantaneous_output_kbps这几个值来参考redis的压力服务

Demo数据:

6:Replication

主从复制信息统计

role

当前实例的角色 master 或slave 单点默认为master

connected_slaves

当前连接slave的个数

master_replid

主实例启动随机产生id

master_replid2主实例启动随机产生id2
master_repl_offset

主从同步偏移量

second_repl_offset

主从同步偏移量2

repl_backlog_active复制积压缓冲区是否开启
repl_backlog_size

复制积压缓冲区数据大小,以字节(byte)单位显示数据

repl_backlog_first_byte_offset

复制缓冲区里偏移量的大小

repl_backlog_histlen

此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小

master_host主节点的Host名称或IP地址 如果该实例是从节点才会显示
master_port主节点监听的TCP端口 如果该实例是从节点才会显示
master_link_status连接状态(up或者down)如果该实例是从节点才会显示
master_last_io_seconds_ago自上次与主节点交互以来,经过的秒数 如果该实例是从节点才会显示
master_sync_in_progress主节点正在与从节点是否正在同步 如果该实例是从节点才会显示
master_sync_left_bytes 同步完成前剩余的字节数 如果Sync操作正在进行
master_sync_last_io_seconds_ago在SYNC操作期间自上次传输IO以来的秒数 如果Sync操作正在进行
master_link_down_since_seconds自连接断开以来,经过的秒数 如果主从节点之间断开

Demo数据:

 

7:CPU

当前服务器CPU信息统计

used_cpu_sysredis主进程在核心态所占用的CPU资源
used_cpu_userredis主进程在用户态所占用的CPU资源
used_cpu_sys_children

redis中后台进程在核心态所占用的CPU资源

used_cpu_user_children

redis中后台进程在用户态所占用的CPU资源 

8:Cluster

当前所属集群统计

cluster_enabled实例是否启用集群模式 

9:Keyspace

提供有关每个数据库的主字典的统计,统计信息是key的总数和过期的key的总数。

db0:keys=4,expires=0,avg_ttl=0

数据库0目前现有4个key,过期key总数为0 估计算设置生存时间键的平均寿命单位毫秒数

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值