Skip to content

使用info命令,对redis进行监控

3152字约11分钟

监控调优

2021-11-28

Info命令

命令查询的信息
info all查询全部信息 : ServerClientsMemoryPersistenceStatsReplicationCPUModulesCommandstatsErrorstatsClusterKeyspace
info相比 info all , 缺少 Commandstats 信息
info server仅查看Server信息
info clients仅查看客户端链接信息
info memory仅查看内存信息
info persistence仅查看持久化信息
info stats查看运行状态
info replication查看主从复制信息
info cpu查看服务器cpu信息
info modules查看服务加载的模块信息
info commandstats查看命令运行信息
info error stats查看错误状态信息
info cluster查看集群配置信息
info keyspace查看数据库信息(对应 select 命令)

服务器信息

属性含义
redis_version当前Redis的版本信息
redis_git_sha1Git SHA1
redis_git_dirtygit dirty flag
redis_build_idredis 的构建ID
redis_moderedis运行模式: 哨兵模式 / 集群模式 / 独立模式
osredis宿主机器的操作系统信息
arch_bits操作系统的架构 32/ 64
multiplexing_apiRedis所用的事件处理机制: kqueue / poll / epoll/ select
atomicvar_api原子处理的API
gcc_versionGCC的版本信息
process_idRedis服务的进程ID
process_supervised是否有进程监控
run_idRedis 服务器的随机标识符(用于 哨兵 和集群)
server_time_usec服务器时间, 单位: 微秒
uptime_in_seconds自服务启动以来,经过的秒数
uptime_in_days自服务启动以来, 经历的天数
hzredis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。
configured_hz配置的频率
lru_clock自增的时钟,用于LRU管理,该时钟100ms(hz=10,因此每1000ms/10=100ms执行一次定时任务)更新一次。
executable可执行文件的路径
config_file服务启动所使用的配置文件路径
io_threads_active活跃的IO线程数

客户端信息

属性含义
connected_clients当前有多少客户端连接
cluster_connections集群连接数
maxclients最大客户端连接数
client_recent_max_input_buffer客户端最近最大输入缓存, 以字节为单位
client_recent_max_output_buffer客户端最近最大输出缓存, 以字节为单位
blocked_clients阻塞客户端数量, 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
tracking_clients-
clients_in_timeout_table-

内存信息

属性含义
used_memory由 Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_humanused_memory 可读化表示
used_memory_rss从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
used_memory_rss_humanused_memory_rss 可读化表示
used_memory_peakRedis 的内存消耗峰值(以字节为单位)
used_memory_peak_humanused_memory_peak 可读化表示
used_memory_peak_perc峰值系统内存使用率
used_memory_overheadRedis为了维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog
used_memory_startupRedis服务器启动时消耗的内存
used_memory_dataset数据占用的内存大小,即used_memory-used_memory_overhead
used_memory_dataset_perc数据占用的内存大小的百分比,100%*(used_memory_dataset/(used_memory-used_memory_startup))
allocator_allocated内存分配器申请的内存,以字节为单位
allocator_active内存分配器正在使用的内存,以字节为单位
allocator_resident内存分配器的常驻内存,以字节为单位
total_system_memory操作系统内存(以字节为单位)
total_system_memory_humantotal_system_memory可读化表示
used_memory_luaLua脚本存储占用的内存(以字节为单位)
used_memory_lua_humanused_memory_lua 可读化表示
used_memory_scriptsLua脚本使用的内存大小(以字节为单位)
used_memory_scripts_humanused_memory_scripts 可读化表示
number_of_cached_scripts缓存的lua脚本数量
maxmemoryRedis实例的最大内存配置(以字节为单位)
maxmemory_humanmaxmemory 可读化表示
maxmemory_policy当达到maxmemory时的淘汰策略, 详细参见 : Redis数据淘汰策略
allocator_frag_ratio内存分配器碎片比例
allocator_frag_bytes内存分配器碎片大小,以字节为单位
allocator_rss_ratio从操作系统角度看, 内存分配器碎片比例
allocator_rss_bytes从操作系统角度看, 内存分配器碎片大小,以字节为单位
rss_overhead_ratio从操作系统角度看, 开销的比例
rss_overhead_bytes从操作系统角度看, 开销的大小, 以字节为单位
mem_fragmentation_ratio1. 碎片率,used_memory_rss/ used_memory,正常情况下稍大于1。
2. 低于1,Redis实例可能会把部分数据交换到硬盘上,内存交换会严重影响Redis的性能,所以应该增加可用物理内存。
3. 大于1.5表示碎片过多。额外碎片的产生是由于Redis释放了内存块,但内存分配器并没有返回内存给操作系统,这个内存分配器是在编译时指定的
4. 内存分配器可以是libc、jemalloc或者tcmalloc。
mem_fragmentation_bytes内存碎片大小(字节表示)
mem_not_counted_for_evict不应驱逐的内存大小,以字节为单位
mem_replication_backlog复制backlog的内存大小, 以字节为单位
mem_clients_slaves-
mem_clients_normal-
mem_aof_buffer1.内存分配器,Redis支持glibc’s malloc、jemalloc11、tcmalloc几种不同的内存分配器,每个分配器在内存分配和碎片上都有不同的实现。
2.不建议普通管理员修改Redis默认内存分配器,因为这需要完全理解这几种内存分配器的差异,也要重新编译Redis。
active_defrag_runningdefrag:表示内存碎片整理, 0表示没有活动的defrag任务正在运行,1表示有活动的defrag任务正在运行
lazyfree_pending_objects延迟释放的挂起对象
lazyfreed_objects延迟释放的对象数量

数据淘汰策略

策略名称淘汰规则
volatile-lru从设置了过期时间的数据集中,选择最近最久未使用的数据释放
allkeys-lru从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放
volatile-random从设置了过期时间的数据集中,随机选择一个数据进行释放
allkeys-random从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放
volatile-ttl从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作
noeviction不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。

主从复制信息

公共属性

属性含义
role节点角色 master 主节点 slave 从节点
repl_backlog_active复制缓冲区是否开启 0 - 未开启 1 - 已开启
repl_backlog_size复制缓冲区大小(以字节为单位)
repl_backlog_first_byte_offset复制缓冲区里偏移量的大小
repl_backlog_histlen此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小

主节点属性

属性含义
connected_slaves连接到此主节点的从节点数量
master_failover_state故障转移状态 no-failover 无故障转移
master_replid实例启动的随机字符串
master_replid2实例启动的随机字符串2
master_repl_offset主从同步偏移量
second_repl_offset主从同步偏移量2

从节点属性

属性含义
master_host主节点host
master_port主节点端口
master_link_status与主节点连接状态 up - 正常连接 down - 断开
master_last_io_seconds_ago主节点与从节点最后通信的时间间隔, 单位: s
master_sync_in_progress从节点是否正在全量同步主节点rdb文件 0 - 否 1 - 是
slave_repl_offset复制偏移量
slave_priority从节点优先级
slave_read_only从节点是否只读 0 - 否 1 - 是

从节点列表

从节点会以 slave0、slave1....这种 形式 返回, 其格式为 slave0:ip=x.x.x.x,port=6379,state=online,offset=123456,lag=1

  1. slave0: 从库的标记
  2. ip: 从库IP
  3. port: 从库端口
  4. state: 从库状态
  5. offset: 主从同步偏移量
  6. lag: 主从同步消息堆积量

CPU信息

属性含义
used_cpu_sysRedis主进程在内核态所占用CPU时钟总和
used_cpu_userRedis主进程在用户态所占用CPU时钟总和
used_cpu_sys_childrenRedis子进程在内核态所占用CPU时钟总和
used_cpu_user_childrenRedis子进程在用户态所占用CPU时钟总和

集群信息

属性含义
cluster_enabled集群是否开启 0 - 否 1 - 是

持久化信息

属性含义
loading服务器是否正在进行持久化 0 - 否 1 -是
current_cow_size-
current_cow_size_age-
current_fork_perc-
current_save_keys_processed-
current_save_keys_total-
rdb_changes_since_last_save离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress服务器是否正在创建rdb文件 0 - 否 1 - 是
rdb_last_save_time最近一次创建rdb文件的时间戳,单位秒
rdb_last_bgsave_status最近一次rdb持久化是否成功 ok 成功
rdb_last_bgsave_time_sec最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec如果服务器正在创建rdb文件,那么这个字段记录的就是当前的创建操作已经耗费的秒数
rdb_last_cow_sizeRDB过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)。
aof_enabled是否开启了AOF 0 - 否 1 - 是
aof_rewrite_in_progress标识aof的rewrite操作是否在进行中 0 - 否 1- 是
aof_rewrite_scheduledrewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
aof_last_rewrite_time_sec最近一次aof rewrite耗费的时长
aof_current_rewrite_time_sec如果rewrite操作正在进行,则记录所使用的时间,单位秒
aof_last_bgrewrite_status上次 bgrewrite aof 操作的状态 ok 成功
aof_last_write_status上次aof写入状态
aof_last_cow_sizeAOF过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)
io_threaded_reads_processed读取线程数
io_threaded_writes_processed写入线程数

数据库信息

数据格式为 : db0:keys=3,expires=0,avg_ttl=0

  • db0: 0号数据库, 对应 select 0
  • keys: 数据库中key的数量
  • expires: 过期的key的数量
  • avg_ttl: key平均有效期

指令调用信息

数据格式为 : cmdstat_set:calls=19,usec=195,usec_per_call=10.26,rejected_calls=0,failed_calls=2

  • cmdstat_set: set命令的统计信息
  • calls: 累计调用该命令的次数
  • usec: 调用该命令的累计耗时,单位微秒
  • usec_per_call: 调用该命令的平均耗时
  • rejected_call: 拒绝执行的次数
  • failed_calls: 调用失败的次数

服务运行状态

属性含义
total_connections_received所有连接数, 累积值, 只增不减, 连接断开也不会减少
total_commands_processed服务器执行的命令数 累积值, 只增不减
instantaneous_pps_per_sec每秒执行的命令数
total_net_input_bytes网络流量-流入 以字节(byte)为单位
total_net_output_bytes网络流量-流出 以字节(byte)为单位
instantaneous_input_kbps网络流量-流入-KB/s
instantaneous_output_kbps网络流量-流出-KB/s
rejected_connections因达到最大连接数而被拒绝的连接数量
sync_full主从全量同步的次数
sync_partial_ok主从部分同步成功的次数
sync_partial_err主从部分同步失败次数
expired_keys过期key的数量
expired_stale_perc过期过时的百分比
expired_time_cap_reached_count过期时间达到上限的数量
expire_cycle_cpu_milliseconds过期循环CPU毫秒数
evicted_keys超过 maxmemory 之后, 剔除的 key 的数量
keyspace_hits访问命中次数
keyspace_misses访问未命中次数
pubsub_channels当前频道数量 发布 - 订阅 模式
pubsub_patterns当前使用中的模式数量
latest_fork_usec最近一次fork 操作消耗的时间, 单位微秒
total_forksfork 的总次数
migrate_cached_sockets记录当前 Redis 正在 migrate 操作的目标 Redis 个数, 例如 A 向 B 和 C 执行 migrate操作
slave_expires_tracked_keys从实例到期的 key 的数量
active_defrag_hits主动碎片整理命中次数
active_defrag_misses主动碎片整理未命中次数
active_defrag_key_hits主动整理碎片, key命中次数
active_defrag_key_misses主动整理碎片, key未命中次数
tracking_total_keyskey 查询的总数
tracking_total_itemsitem查询的总数
tracking_total_prefixes前缀查询的总数
unexpected_error_repliesunexpected 异常响应次数
total_error_replies异常响应总次数
dump_payload_sanitizations-
total_reads_processed正在读取的请求数
total_writes_processed正在写入的请求数
io_threaded_reads_processed正在读取的线程数
io_threaded_writes_processed正在写入的线程数

错误信息

数据格式 errorstat_ERR:count=2

  • errorstat_ERR: 错误的类型
  • count: 次错误类型累计出现的次数

加载的模块信息

数据格式

获取相关信息的GO实现

GO语言获取Redis Info信息

全部信息图

redis监控数据概览