最近在研究Java 使用Jedis连接Redis,有个jedis.info()命令,获取redis的相关信息,这里记录下返回的每个值的详解,不带任何参数调用info返回的数据如下:通过给定可选的参数 section ,可以让命令只返回某一部分的信息。
# Server
redis_version:999.999.999
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:581578ab5320e2b1
redis_mode:standalone
os:Darwin 18.2.0 x86_64
arch_bits:64
multiplexing_api:kqueue
atomicvar_api:atomic-builtin
gcc_version:4.2.1
process_id:93
run_id:2c01647915ddd0633abb2c6629f241afca3610c7
tcp_port:6379
uptime_in_seconds:102469
uptime_in_days:1
hz:10
configured_hz:10
lru_clock:6537460
executable:/usr/local/bin/redis-server
config_file:/Users/weijinhui/Redis/redis-unstable/redis.conf
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
# Memory
used_memory:1059376
used_memory_human:1.01M
used_memory_rss:688128
used_memory_rss_human:672.00K
used_memory_peak:1270720
used_memory_peak_human:1.21M
used_memory_peak_perc:83.37%
used_memory_overhead:1037990
used_memory_startup:988048
used_memory_dataset:21386
used_memory_dataset_perc:29.98%
allocator_allocated:1024512
allocator_active:650240
allocator_resident:650240
total_system_memory:8589934592
total_system_memory_human:8.00G
used_memory_lua:37888
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:0.63
allocator_frag_bytes:18446744073709177344
allocator_rss_ratio:1.00
allocator_rss_bytes:0
rss_overhead_ratio:1.06
rss_overhead_bytes:37888
mem_fragmentation_ratio:0.67
mem_fragmentation_bytes:-336384
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:libc
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:1549938863
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
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:80
total_commands_processed:1115
instantaneous_ops_per_sec:0
total_net_input_bytes:27125
total_net_output_bytes:36412
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:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
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
connected_slaves:0
master_replid:28ef8fd4aa90632cf1d2ce9c258eed7657004a1d
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:16.693537
used_cpu_user:10.184285
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
# Commandstats
cmdstat_select:calls=572,usec=10712,usec_per_call=18.73
cmdstat_auth:calls=159,usec=3909,usec_per_call=24.58
cmdstat_info:calls=11,usec=87208,usec_per_call=7928.00
cmdstat_dbsize:calls=305,usec=44030,usec_per_call=144.36
cmdstat_config:calls=68,usec=45106,usec_per_call=663.32
# Cluster
cluster_enabled:0
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
下面则是每个值的详解:
- server : 一般 Redis 服务器信息,包含以下域:
- redis_version : Redis 服务器版本
- redis_git_sha1 : Git SHA1
- redis_git_dirty : Git dirty flag
- os : Redis 服务器的宿主操作系统
- arch_bits : 架构(32 或 64 位)
- multiplexing_api : Redis 所使用的事件处理机制
- gcc_version : 编译 Redis 时所使用的 GCC 版本
- process_id : 服务器进程的 PID
- run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
- tcp_port : TCP/IP 监听端口
- uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
- uptime_in_days : 自 Redis 服务器启动以来,经过的天数
- lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
- executable:执行文件
- config_file:配置文件路径
- clients : 已连接客户端信息,包含以下域:memory : 内存信息,包含以下域:
- connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
- client_longest_output_list : 当前连接的客户端当中,最长的输出列表
- client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
- blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
- memory : 内存信息,包含以下域:
- used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位
- used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
- used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和top 、 ps 等命令的输出一致。
- used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
- used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
- used_memory_peak_perc:(used_memory/ used_memory_peak) *100%
- used_memory_overhead:Redis为了维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog。
- used_memory_startup:Redis服务器启动时消耗的内存
- used_memory_dataset:used_memory—used_memory_overhead
- used_memory_dataset_perc:100%*(used_memory_dataset/(used_memory—used_memory_startup))
- total_system_memory:整个系统内存
- total_system_memory_human:以人类可读的格式,显示整个系统内存
- used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
- used_memory_lua_human:以人类可读的格式,显示Lua脚本存储占用的内存
- maxmemory:Redis实例的最大内存配置
- maxmemory_human:以人类可读的格式,显示Redis实例的最大内存配置
- maxmemory_policy:当达到maxmemory时的淘汰策略
- mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
- mem_allocator : 在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。
- active_defrag_running:表示没有活动的defrag任务正在运行,1表示有活动的defrag任务正在运行(defrag:表示内存碎片整理)
- lazyfree_pending_objects:0表示不存在延迟释放(也有资料翻译未惰性删除)的挂起对象
说明:
在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。
当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。
内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。
当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
如果 Redis 释放了内存,却没有将内存返还给操作系统,那么 used_memory 的值可能和操作系统显示的 Redis 内存占用并不一致。
查看 used_memory_peak 的值可以验证这种情况是否发生。
- persistence : RDB 和 AOF 的相关信息,包含以下域:
- loading:服务器是否正在载入持久化文件
- rdb_changes_since_last_save:离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
- rdb_bgsave_in_progress:服务器是否正在创建rdb文件
- rdb_last_save_time:离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
- rdb_last_bgsave_status:最近一次rdb持久化是否成功
- rdb_last_bgsave_time_sec:最近一次成功生成rdb文件耗时秒数
- rdb_current_bgsave_time_sec:如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
- rdb_last_cow_size:RDB过程中父进程与子进程相比执行了多少修改(包括读缓冲区,写缓冲区,数据修改等)。
- aof_enabled:是否开启了aof
- aof_rewrite_in_progress:标识aof的rewrite操作是否在进行中
- aof_rewrite_scheduled:rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
- aof_last_rewrite_time_sec:最近一次aof rewrite耗费的时长
- aof_current_rewrite_time_sec:如果rewrite操作正在进行,则记录所使用的时间,单位秒
- aof_last_bgrewrite_status:上次bgrewriteaof操作的状态
- aof_last_write_status:上次aof写入状态
- aof_current_size:aof当前尺寸
- aof_base_size:服务器启动时或者aof重写最近一次执行之后aof文件的大小
- aof_pending_rewrite:是否有aof重写操作在等待rdb文件创建完毕之后执行?
- aof_buffer_length:aof buffer的大小
- aof_rewrite_buffer_length:aof rewrite buffer的大小
- aof_pending_bio_fsync:后台I/O队列里面,等待执行的fsync调用数量
- aof_delayed_fsync:被延迟的fsync调用数量
- stats : 一般统计信息,包含以下域:
- total_connections_received:新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置
- total_commands_processed:redis处理的命令数
- instantaneous_ops_per_sec:redis当前的qps,redis内部较实时的每秒执行的命令数
- total_net_input_bytes:redis网络入口流量字节数
- total_net_output_bytes:redis网络出口流量字节数
- instantaneous_input_kbps:redis网络入口kps
- instantaneous_output_kbps:redis网络出口kps
- rejected_connections:拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数
- sync_full:主从完全同步成功次数
- sync_partial_ok:主从部分同步成功次数
- sync_partial_err:主从部分同步失败次数
- expired_keys:运行以来过期的key的数量
- evicted_keys:运行以来剔除(超过了maxmemory后)的key的数量
- keyspace_hits:命中次数
- keyspace_misses:没命中次数
- pubsub_channels:当前使用中的频道数量
- pubsub_patterns:当前使用的模式的数量
- latest_fork_usec:最近一次fork操作阻塞redis进程的耗时数,单位微秒
- migrate_cached_sockets:是否已经缓存了到该地址的连接
- replication : 主/从复制信息,包含以下域:
- role:实例的角色,是master or slave
- connected_slaves:连接的slave实例个数
- master_replid:主实例启动随机字符串
- master_replid2:主实例启动随机字符串2
- master_repl_offset:主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟,与master_replid可被用来标识主实例复制流中的位置。
- second_repl_offset:主从同步偏移量2,此值如果和上面的offset相同说明主从一致没延迟
- repl_backlog_active:复制积压缓冲区是否开启
- repl_backlog_size:复制积压缓冲大小
- repl_backlog_first_byte_offset:复制缓冲区里偏移量的大小
- repl_backlog_histlen:此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小
- cpu : CPU 计算量统计信息,包含以下域:
- used_cpu_sys:将所有redis主进程在核心态所占用的CPU时求和累计起来
- used_cpu_user:将所有redis主进程在用户态所占用的CPU时求和累计起来
- used_cpu_sys_children:将后台进程在核心态所占用的CPU时求和累计起来
- used_cpu_user_children:将后台进程在用户态所占用的CPU时求和累计起来
- commandstats : Redis 命令统计信息,包含以下域:
- cmdstat_set:Set 命令统计
- cmdstat_ping:Ping 命令统计
- cmdstat_del:Del命令统计
- cmdstat_psync:Psync命令统计
- cmdstat_keys:Keys命令统计
- cmdstat_hmset:Hmset命令统计
- cmdstat_command:Command命令统计
- cmdstat_info:Info命令统计
- cmdstat_replconf:Replconf命令统计
- cmdstat_client:Client命令统计
- cmdstat_hgetall:Hgetall命令统计
- cluster : Redis 集群信息,包含以下域:
- cluster_enabled:实例是否启用集群模式
- keyspace : 数据库相关的统计信息,包含以下域:
- db0:db0的key的数量,以及带有生存期的key的数,平均存活时间
除上面给出的这些值以外,参数还可以是下面这两个:
- all : 返回所有信息
- default : 返回默认选择的信息
当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。
不同版本的 Redis 可能对返回的一些域进行了增加或删减。
因此,一个健壮的客户端程序在对 INFO 命令的输出进行分析时,应该能够跳过不认识的域,并且妥善地处理丢失不见的域。