以下内容摘自雪球,在公司内部的docs上的内容总结,部分隐私信息已经处理改动
Redis参数 | 解释 | 备注 |
tcp_port | tcp 端口 | |
uptime_in_seconds | 自 Redis 服务器启动以来,经过的秒数 | |
uptime_in_days | 自 Redis 服务器启动以来,经过的天数 | |
blocked_clients | 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量 | |
aof_rewrite_scheduled | 标识是否将要在rdb save操作结束后执行 | |
total_net_input_bytes | redis网络入口流量字节数 | |
hz | 10,redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次 | |
redis_build_id | redis build id | |
sync_partial_err | 主从部分同步失败次数 | |
aof_last_bgrewrite_status | 上次bgrewriteaof操作的状态 | |
multiplexing_api | epoll,redis所使用的事件处理机制 | |
client_biggest_input_buf | 当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值 | |
aof_current_rewrite_time_sec | 如果rewrite操作正在进行,则记录所使用的时间,单位秒 | |
aof_enabled | 是否开启了aof,默认不开启 | |
aof_current_size | aof当前大小 | |
master_repl_offset | 主从同步偏移量 | 此值如果和上面的offset相同说明主从一致没延迟 |
repl_backlog_first_byte_offset | 复制缓冲区里偏移量的大小 | |
used_cpu_user | 将所有redis主进程在用户态所占用的CPU时求和累计起来 | |
rdb_last_bgsave_status | 最近一次rdb持久化是否成功 | |
redis_mode | cluster,运行模式,单机或者集群 | |
redis_git_dirty | Git dirty flag | |
aof_delayed_fsync | 被延迟的fsync调用数量 | |
repl_backlog_histlen | 此值等于 master_repl_offset - repl_backlog_first_byte_offset | 该值不会超过repl_backlog_size的大小 |
loading | loading 状态 | |
evicted_keys | 运行以来剔除(超过了maxmemory后)的key的数量 | |
cluster_enabled | 实例是否启用集群模式 | |
redis_version | redis服务器版本 | |
aof_last_write_status | 上次aof写入状态 | |
repl_backlog_active | 复制积压缓冲区是否开启 | |
mem_allocator | 在编译时指定的redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc | |
detail | # Serve | |
used_memory_peak | redis的内存消耗峰值(以字节为单位) | |
instantaneous_ops_per_sec | redis当前的qps,redis内部较实时的每秒执行的命令数 | |
process_id | redis服务器进程的pid | |
used_memory_human | 以人类可读的格式返回redis分配的内存总量 | |
used_cpu_sys | 将所有redis主进程在核心态所占用的CPU时求和累计起来 | |
role | 实例的角色,是master or slave | |
repl_backlog_size | 复制积压缓冲大小 | |
connected_slaves | 连接的slave实例个数 | |
gcc_version | 编译redis时所使用的gcc版本 | |
sync_full | 主从完全同步成功次数 | |
connected_clients | 客户端连接数 | |
used_memory_lua | lua引擎所使用的内存大小(以字节为单位) | |
rdb_current_bgsave_time_sec | 如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数 | |
aof_pending_bio_fsync | 后台I/O队列里面,等待执行的fsync调用数量 | |
total_net_output_bytes | redis网络出口流量字节数 | |
pubsub_channels | 当前使用中的频道数量 | |
arch_bits | 架构(32或64位) | |
rdb_changes_since_last_save | 离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化 | |
instantaneous_input_kbps | redis网络入口kps | |
mem_fragmentation_ratio | used_memory_rss和used_memory之间的比率,小于1表示使用了swap,大于1表示碎片比较多 | |
aof_last_rewrite_time_sec | 最近一次aof rewrite耗费的时长 | |
used_cpu_sys_children | 将后台进程在核心态所占用的CPU时求和累计起来 | |
aof_rewrite_in_progress | 标识aof的rewrite操作是否在进行中 | |
config_file | 配置文件路径 | |
lru_clock | 自增的时钟,用于LRU管理 | 该时钟100ms(hz=10,因此每1000ms/10=100ms执行一次定时任务)更新一次 |
sync_partial_ok | 主从部分同步成功次数 | |
rdb_last_save_time | 离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件 | |
pubsub_patterns | 当前使用的模式的数量 | |
redis_git_sha1 | Git SHA1 | |
used_memory_rss | 从操作系统的角度,返回redis已分配的内存总量(俗称常驻集大小)。这个值和top命令的输出一致 | |
rdb_last_bgsave_time_sec | 最近一次成功生成rdb文件耗时秒数 | |
run_id | redis服务器的随机标识符(用于sentinel和集群) | |
latest_fork_usec | 最近一次fork操作阻塞redis进程的耗时数,单位微秒 | |
os | redis服务器的宿主操作系统 | |
slave0 | lag从库多少秒未向主库发送REPLCONF命令 | |
rejected_connections | 拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数 | |
total_commands_processed | redis处理的命令数 | |
expired_keys | 运行以来过期的key的数量 | |
client_longest_output_list | 当前连接的客户端当中,最长的输出列表,用client list命令观察omem字段最大值 | |
used_memory | 由redis分配器分配的内存总量,以字节为单位 | |
aof_rewrite_buffer_length | aof rewrite buffer的大小 | |
aof_buffer_length | aof buffer的大小 | |
keyspace_misses | 没命中次数 | |
aof_base_size | 服务器启动时或者aof重写最近一次执行之后aof文件的大小 | |
instantaneous_output_kbps | redis网络出口kps | |
used_memory_peak_human | 以人类可读的格式返回redis的内存消耗峰值 | |
keyspace_hits | 命中次数 | |
aof_pending_rewrite | 是否有aof重写操作在等待rdb文件创建完毕之后执行 | |
rdb_bgsave_in_progress | 服务器是否正在创建rdb文件 | |
used_cpu_user_children | 将后台进程在用户态所占用的CPU时求和累计起来 | |
total_connections_received | 新创建连接个数 | 如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置 |
migrate_cached_sockets | 0 | |
用客户端连接redis服务器: redis-cli >> info :
- # Server(服务器信息)
- redis_version:3.0.0 #redis服务器版本
- redis_git_sha1:00000000 #Git SHA1
- redis_git_dirty:0 #Git dirty flag
- redis_build_id:6c2c390b97607ff0 #redis build id
- redis_mode:cluster #运行模式,单机或者集群
- os:Linux 2.6.32-358.2.1.el6.x86_64 x86_64 #redis服务器的宿主操作系统
- arch_bits:64 #架构(32或64位)
- multiplexing_api:epoll #redis所使用的事件处理机制
- gcc_version:4.4.7 #编译redis时所使用的gcc版本
- process_id:12099 #redis服务器进程的pid
- run_id:63bcd0e57adb695ff0bf873cf42d403ddbac1565 #redis服务器的随机标识符(用于sentinel和集群)
- tcp_port:9021 #redis服务器监听端口
- uptime_in_seconds:26157730 #redis服务器启动总时间,单位是秒
- uptime_in_days:302 #redis服务器启动总时间,单位是天
- hz:10 #redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。
- lru_clock:14359959 #自增的时钟,用于LRU管理,该时钟100ms(hz=10,因此每1000ms/10=100ms执行一次定时任务)更新一次。
- # Clients(已连接客户端信息)
- connected_clients:1081 #已连接客户端的数量(不包括通过slave连接的客户端)
- client_longest_output_list:0 #当前连接的客户端当中,最长的输出列表,用client list命令观察omem字段最大值
- client_biggest_input_buf:0 #当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值
- blocked_clients:0 #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
- # Memory(内存信息)
- used_memory:327494024 #由redis分配器分配的内存总量,以字节为单位
- used_memory_human:312.32M #以人类可读的格式返回redis分配的内存总量
- used_memory_rss:587247616 #从操作系统的角度,返回redis已分配的内存总量(俗称常驻集大小)。这个值和top命令的输出一致
- used_memory_peak:1866541112 #redis的内存消耗峰值(以字节为单位)
- used_memory_peak_human:1.74G #以人类可读的格式返回redis的内存消耗峰值
- used_memory_lua:35840 #lua引擎所使用的内存大小(以字节为单位)
- mem_fragmentation_ratio:1.79 #used_memory_rss和used_memory之间的比率,小于1表示使用了swap,大于1表示碎片比较多
- mem_allocator:jemalloc-3.6.0 #在编译时指定的redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc
在理想情况下, used_memory_rss 的值应该只比used_memory 稍微高一点儿。
当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。
内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。
当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
Because Redis does not have control over how its allocations are mapped to memory pages, highused_memory_rss is often the result of a spike in memory usage.
当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致。
查看 used_memory_peak 的值可以验证这种情况是否发生。
- # Persistence(rdb和aof的持久化相关信息)
- loading:0 #服务器是否正在载入持久化文件
- rdb_changes_since_last_save:28900855 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
- rdb_bgsave_in_progress:0 #服务器是否正在创建rdb文件
- rdb_last_save_time:1482358115 #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
- rdb_last_bgsave_status:ok #最近一次rdb持久化是否成功
- rdb_last_bgsave_time_sec:2 #最近一次成功生成rdb文件耗时秒数
- rdb_current_bgsave_time_sec:-1 #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
- aof_enabled:1 #是否开启了aof
- aof_rewrite_in_progress:0 #标识aof的rewrite操作是否在进行中
- aof_rewrite_scheduled:0
#rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
- aof_last_rewrite_time_sec:-1 #最近一次aof rewrite耗费的时长
- aof_current_rewrite_time_sec:-1 #如果rewrite操作正在进行,则记录所使用的时间,单位秒
- aof_last_bgrewrite_status:ok #上次bgrewriteaof操作的状态
- aof_last_write_status:ok #上次aof写入状态
- aof_current_size:4201740 #aof当前尺寸
- aof_base_size:4201687 #服务器启动时或者aof重写最近一次执行之后aof文件的大小
- aof_pending_rewrite:0 #是否有aof重写操作在等待rdb文件创建完毕之后执行?
- aof_buffer_length:0 #aof buffer的大小
- aof_rewrite_buffer_length:0 #aof rewrite buffer的大小
- aof_pending_bio_fsync:0 #后台I/O队列里面,等待执行的fsync调用数量
- aof_delayed_fsync:0 #被延迟的fsync调用数量
- # Stats(一般统计信息)
- total_connections_received:209561105 #新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置
- total_commands_processed:2220123478 #redis处理的命令数
- instantaneous_ops_per_sec:279 #redis当前的qps,redis内部较实时的每秒执行的命令数
- total_net_input_bytes:118515678789 #redis网络入口流量字节数
- total_net_output_bytes:236361651271 #redis网络出口流量字节数
- instantaneous_input_kbps:13.56 #redis网络入口kps
- instantaneous_output_kbps:31.33 #redis网络出口kps
- rejected_connections:0 #拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数
- sync_full:1 #主从完全同步成功次数
- sync_partial_ok:0 #主从部分同步成功次数
- sync_partial_err:0 #主从部分同步失败次数
- expired_keys:15598177 #运行以来过期的key的数量
- evicted_keys:0 #运行以来剔除(超过了maxmemory后)的key的数量
- keyspace_hits:1122202228 #命中次数
- keyspace_misses:577781396 #没命中次数
- pubsub_channels:0 #当前使用中的频道数量
- pubsub_patterns:0 #当前使用的模式的数量
- latest_fork_usec:15679 #最近一次fork操作阻塞redis进程的耗时数,单位微秒
- migrate_cached_sockets:0 #
- # Replication(主从信息,master上显示的信息)
- role:master #实例的角色,是master or slave
- connected_slaves:1 #连接的slave实例个数
- slave0:ip=192.168.64.104,port=9021,state=online,offset=6713173004,lag=0 #lag从库多少秒未向主库发送REPLCONF命令
- master_repl_offset:6713173145 #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟
- repl_backlog_active:1 #复制积压缓冲区是否开启
- repl_backlog_size:134217728 #复制积压缓冲大小
- repl_backlog_first_byte_offset:6578955418 #复制缓冲区里偏移量的大小
- repl_backlog_histlen:134217728 #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小
- # Replication(主从信息,slave上显示的信息)
- role:slave #实例的角色,是master or slave
- master_host:192.168.64.102 #此节点对应的master的ip
- master_port:9021 #此节点对应的master的port
- master_link_status:up #slave端可查看它与master之间同步状态,当复制断开后表示down
- master_last_io_seconds_ago:0 #主库多少秒未发送数据到从库?
- master_sync_in_progress:0 #从服务器是否在与主服务器进行同步
- slave_repl_offset:6713173818 #slave复制偏移量
- slave_priority:100 #slave优先级
- slave_read_only:1 #从库是否设置只读
- connected_slaves:0 #连接的slave实例个数
- master_repl_offset:0
- repl_backlog_active:0 #复制积压缓冲区是否开启
- repl_backlog_size:134217728 #复制积压缓冲大小
- repl_backlog_first_byte_offset:0 #复制缓冲区里偏移量的大小
- repl_backlog_histlen:0 #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小
- # CPU(CPU计算量统计信息)
- used_cpu_sys:96894.66 #将所有redis主进程在核心态所占用的CPU时求和累计起来
- used_cpu_user:87397.39 #将所有redis主进程在用户态所占用的CPU时求和累计起来
- used_cpu_sys_children:6.37 #将后台进程在核心态所占用的CPU时求和累计起来
- used_cpu_user_children:52.83 #将后台进程在用户态所占用的CPU时求和累计起来
- # Commandstats(各种不同类型的命令的执行统计信息)
- cmdstat_get:calls=1664657469,usec=8266063320,usec_per_call=4.97
#call每个命令执行次数,usec总共消耗的CPU时长(单位微秒),平均每次消耗的CPU时长(单位微秒)
- # Cluster(集群相关信息)
- cluster_enabled:1 #实例是否启用集群模式
- # Keyspace(数据库相关的统计信息)
- db0:keys=194690,expires=191702,avg_ttl=3607772262 #db0的key的数量,以及带有生存期的key的数,平均存活时间
除上面给出的这些值以外,参数还可以是下面这两个:
- all : 返回所有信息
- default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。
不同版本的 Redis 可能对返回的一些域进行了增加或删减。
因此,一个健壮的客户端程序在对 INFO 命令的输出进行分析时,应该能够跳过不认识的域,并且妥善地处理丢失不见的域。