最近在写Redis的性能数据和服务状态监控,性能数据这块用 info 命令就可以获取的比较全面了。
因为之前也没有接触过Redis,这几天通过info的输出参数来展开了解,发现还是挺适合的。
Redis官网对 info 已经讲解的比较清楚的,参考文档 。
可以看到,info的输出结果是分几块的,有Servers、Clients、Memory等等,通过info后面接这些参数,可以指定输出某一块数据。
我刚开始在Gentoo上装的默认版本2.4.10,并没有分块输出,都是挤到一堆,而且也无法按上面说的加选项控制输出某一块,后来升级到2.6.7和2.6.8的版本,都报 Segment Fault 段错误,找了半天没法解决,也在Gentoo论坛问过,应该是一个bug。后来再更新portage树,然后换上2.6.9的版本,就没这个问题了(我同事刚好也遇到这个问题,今天我让他升级到2.6.9后,也解决了)
下面是针对info的输出在旁边注释了,因为对Redis了解的不深,可能会存在错误,以后了解多了再慢慢完善。
# 参考:http://redis.io/commands/info
#
#
# Server
redis_version:2.6.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_mode:standalone
os:Linux 3.4.9-gentoo x86_64
arch_bits:64
multiplexing_api:epoll # redis的事件循环机制
gcc_version:4.6.3
process_id:18926
run_id:df8ad7574f3ee5136e8be94aaa6602a0079704cc # 标识redis server的随机值
tcp_port:6379
uptime_in_seconds:120 # redis server启动的时间(单位s)
uptime_in_days:0 # redis server启动的时间(单位d)
lru_clock:321118 # Clock incrementing every minute, for LRU management TODO 不清楚是如何计算的
# Clients
connected_clients:3 # 连接的客户端数
client_longest_output_list:0 # 当前客户端连接的最大输出列表 TODO
client_biggest_input_buf:0 # 当前客户端连接的最大输入buffer TODO
blocked_clients:0 # 被阻塞的客户端数
# Memory
used_memory:573456 # 使用内存,单位B
used_memory_human:560.02K # human read显示使用内存
used_memory_rss:1798144 # 系统给redis分配的内存(即常驻内存)
used_memory_peak:551744 # 内存使用的峰值大小
used_memory_peak_human:538.81K # human read显示内存使用峰值
used_memory_lua:31744 # lua引擎使用的内存
mem_fragmentation_ratio:3.14 # used_memory_rss/used_memory比例,一般情况下,used_memory_rss略高于used_memory,当内存碎片较多时,则mem_fragmentation_ratio会较大,可以反映内存碎片是否很多
mem_allocator:jemalloc-3.3.1 # 内存分配器
# Persistence
##########################
# rdb和aof事redis的两种持久化机制
#
# rdb是通过配置文件设置save的时间的改动数量来操作
# 把上次改动后的数据达到设置的指标后保存到db
# 如果中间发生了crash,则数据会丢失
# 这种策略被叫做快照
#
# aof是持续的把写操作执行写入一个类似日志的文件
# 但是会影响应能
# 分为appendfsync always和appendfsync eversec
# 前者每次写操作都同步,数据安全性高,但是特别消耗性能
# 后者每秒同步一次,如果发生crash,则可能会丢失1s的数据
##########################
loading:0 #
rdb_changes_since_last_save:0 # 自上次dump后rdb的改动
rdb_bgsave_in_progress:0 # 标识rdb save是否进行中
rdb_last_save_time:1366359865 # 上次save的时间戳
rdb_last_bgsave_status:ok # 上次的save操作状态
rdb_last_bgsave_time_sec:-1 # 上次rdb save操作使用的时间(单位s)
rdb_current_bgsave_time_sec:-1 # 如果rdb save操作正在进行,则是所使用的时间
----------------------------
aof_enabled:0 # 是否开启aof,默认没开启
aof_rewrite_in_progress:0 # 标识aof的rewrite操作是否在进行中
aof_rewrite_scheduled:0 # 标识是否将要在rdb save操作结束后执行
aof_last_rewrite_time_sec:-1 # 上次rewrite操作使用的时间(单位s)
aof_current_rewrite_time_sec:-1 # 如果rewrite操作正在进行,则记录所使用的时间
aof_last_bgrewrite_status:ok # 上次rewrite操作的状态
-----------------------------
# 开启aof后增加的一些info信息
aof_current_size:0 # aof当前大小
aof_base_size:0 # aof上次启动或rewrite的大小
aof_pending_rewrite:0 # 同上面的aof_rewrite_scheduled
aof_buffer_length:0 # aof buffer的大小
aof_rewrite_buffer_length:0 # aof rewrite buffer的大小
aof_pending_bio_fsync:0 # 后台IO队列中等待fsync任务的个数
aof_delayed_fsync:0 # 延迟的fsync计数器 TODO
-----------------------------
# Stats
total_connections_received:7 # 自启动起连接过的总数
total_commands_processed:7 # 自启动起运行命令的总数
instantaneous_ops_per_sec:0 # 每秒执行的命令个数
rejected_connections:0 # 因为最大客户端连接书限制,而导致被拒绝连接的个数
expired_keys:0 # 自启动起过期的key的总数
evicted_keys:0 # 因为内存大小限制,而被驱逐出去的键的个数
keyspace_hits:0 # 在main dictionary(todo)中成功查到的key个数
keyspace_misses:0 # 同上,未查到的key的个数
pubsub_channels:0 # 发布/订阅频道数
pubsub_patterns:0 # 发布/订阅模式数
latest_fork_usec:0 # 上次的fork操作使用的时间(单位ms)
##########################
# pubsub是一种消息传送的方式,分为频道和模式两种
# 消息不支持持久化,消息方中断后再连接,前面的消息就会没了
# 频道是指通过SUBSCRIBE指定一个固定的频道来订阅
# 模式是指通过PSUBSCRIBE模式匹配来订阅相关的匹配给定模式的频道
##########################
# Replication
role:master # 角色
connected_slaves:1 # 连接的从库数
slave0:127.0.0.1,7777,online
-----------------------------
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0 # 标识主redis正在同步到从redis
slave_priority:100
slave_read_only:1
connected_slaves:0
# CPU
used_cpu_sys:0.00 # redis server的sys cpu使用率
used_cpu_user:0.12 # redis server的user cpu使用率
used_cpu_sys_children:0.00 # 后台进程的sys cpu使用率
used_cpu_user_children:0.00 # 后台进程的user cpu使用率
# Keyspace
db0:keys=2,expires=0
db1:keys=1,expires=0