相信通过前面的章节,大家对redis的基本概念及配置已经有了解,本章节会重点说明如何通过的redis的工具来监控redis的运行状态。
“Redis info”
使用Another Redis Desktop Manager工具进行监控Redis
#info
命令获取监控数据
connected_clients:68
连接的客户端数量
used_memory_rss_human:847.62M
操作系统为 Redis 进程分配的内存总量
used_memory_peak_human:794.42M
最大使用内存总量(峰值)
total_connections_received:619104
服务器已接受的连接请求数量
instantaneous_ops_per_sec:1159
服务器每秒钟执行的命令数量
instantaneous_input_kbps:55.85
redis 网络入口 kps
instantaneous_output_kbps:3553.89
redis 网络出口 kps
rejected_connections:0
因为最大客户端数量限制而被拒绝的连接请求数量
expired_keys:0
因为过期而被自动删除的数据库键数量
evicted_keys:0
因为最大内存容量限制而被驱逐( evict )的键数量
keyspace_hits:0
查找数据库键成功的次数
keyspace_misses:0
查找数据库键失败的次数
# Server
redis_version:3.2.4 #Redis版本
redis_git_sha1:00000000 #Git SHA1
redis_git_dirty:0 #Git dirty flag
redis_build_id:4a0a5391316325c5
redis_mode:cluster
os:Linux 2.6.32-358.el6.x86_64 x86_64 #Redis 服务器的宿主操作系统
arch_bits:64 #架构(32 或 64 位)
multiplexing_api:epoll #Redis 所使用的事件处理机制
gcc_version:4.4.7 #编译 Redis 时所使用的 GCC 版本
process_id:42341 #服务器进程的 PID
run_id:961f96e23843202ae98dbeffb655b4f9c4d4c57e #Redis 服务器的随机标识符(用于 Sentinel 和集群)
tcp_port:28001 #TCP/IP 监听端口
uptime_in_seconds:60872 #运行时间(秒)
uptime_in_days:0 #运行天数
hz:10
lru_clock:12112874 #以分钟为单位进行自增的时钟,用于 LRU 管理 executable:/home/app/redis3/redis-server
config_file:/home/app/redis3/./cluster/28001/redis-28001.conf #cluster配置 文件
# Clients
connected_clients:68 #连接的客户端数量
client_longest_output_list:0 #当前连接的客户端当中,最长的输出列表 client_biggest_input_buf:0 #当前连接的客户端当中,最大输入缓存 blocked_clients:0 #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
# Memory
used_memory:831391096 #由 Redis 分配器分配的内存总量(以字节为单位)
used_memory_human:792.88M
used_memory_rss:888795136 #Redis分配的内存总量(该值与top命令输出一致)
used_memory_rss_human:847.62M
used_memory_peak:833008000 #Redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human:794.42M
total_system_memory:33661575168
total_system_memory_human:31.35G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.07 #内存碎片比率
mem_allocator:jemalloc-4.0.3
# Persistence
loading:0 #一个标志值,记录了服务器是否正在载入持久化文件
rdb_changes_since_last_save:7358 #距离最近一次成功创建持久化文件之后,经过了多少秒 rdb_bgsave_in_progress:0 #一个标志值,记录了服务器是否正在创建 RDB 文件
rdb_last_save_time:1505285008 #最近一次成功创建 RDB 文件的 UNIX 时间戳
rdb_last_bgsave_status:ok #一个标志值,记录了最近一次创建 RDB 文件的结果是成功还是失 败
rdb_last_bgsave_time_sec:10 #记录了最近一次创建 RDB 文件耗费的秒数
rdb_current_bgsave_time_sec:-1 #如果服务器正在创建 RDB 文件,那么这个值记录的就是当 前的创建操作已经耗费的秒数
aof_enabled:1 #redis是否开启了aof
aof_rewrite_in_progress:0 #一个标志值,记录了服务器是否正在创建 AOF 文件
aof_rewrite_scheduled:0 #一个标志值,记录了在 RDB 文件创建完毕之后,是否需要执行预约 的 AOF 重写操作
aof_last_rewrite_time_sec:4 #最近一次创建 AOF 文件耗费的时长 aof_current_rewrite_time_sec:-1 #如果服务器正在创建 AOF 文件,那么这个域记录的就是 当前的创建操作已经耗费的秒数
aof_last_bgrewrite_status:ok #一个标志值,记录了最近一次创建 AOF 文件的结果是成功还是失败
aof_last_write_status:ok
aof_current_size:633883114
aof_base_size:428945179 #服务器启动时或者 AOF 重写最近一次执行之后,AOF 文件的大小
aof_pending_rewrite:0 # 一个标志值,记录了是否有 AOF 重写操作在等待 RDB 文件创建完毕之后执行
aof_buffer_length:0 #AOF 缓冲区的大小
aof_rewrite_buffer_length:0 #AOF 重写缓冲区的大小
aof_pending_bio_fsync:0 # 后台 I/O 队列里面,等待执行的 fsync 调用数量 aof_delayed_fsync:12 #被延迟的 fsync 调用数量
# Stats
total_connections_received:619104 #服务器已接受的连接请求数量
total_commands_processed:26830012 #服务器已执行的命令数量
instantaneous_ops_per_sec:1159 #服务器每秒钟执行的命令数量 total_net_input_bytes:1304952619 #redis网络入口流量字节数 total_net_output_bytes:1009790961 #redis网络出口流量字节数 instantaneous_input_kbps:55.85 #redis网络入口kps instantaneous_output_kbps:3553.89 #redis网络出口kps
rejected_connections:0 #因为最大客户端数量限制而被拒绝的连接请求数量
sync_full:2
sync_partial_ok:0
sync_partial_err:0
expired_keys:0 #因为过期而被自动删除的数据库键数量
evicted_keys:0 #因为最大内存容量限制而被驱逐(evict)的键数量 keyspace_hits:0 #查找数据库键成功的次数
keyspace_misses:0 #查找数据库键失败的次数
pubsub_channels:0 #当前使用中的频道数量
pubsub_patterns:0 #当前使用中的模式数量
latest_fork_usec:2639
migrate_cached_sockets:0
# Replication
role:master #当前实例的角色master还是slave
connected_slaves:1 slave0:ip=172.18.1.162,port=28004,state=online,offset=674295829,lag=0
master_repl_offset:674298545
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:673249970
repl_backlog_histlen:1048576
# CPU
used_cpu_sys:718.26 #服务器耗费的累计系统 CPU
used_cpu_user:468.60 #服务器耗费的累计用户 CPU
used_cpu_sys_children:122.46 #后台进程耗费的系统 CPU
used_cpu_user_children:835.28 #后台进程耗费的用户 CPU
# Cluster
cluster_enabled:1 #是否开启集群模式 1代表是
# Keyspace db0:keys=3322,expires=0,avg_ttl=0 #各个数据库的 key 的数量,以及带有生存期的 key 的数量
● Redis TTL 命令
● Redis TTL 命令以秒为单位返回 key 的剩余过期时间。 语法
● Redis TTL 命令基本语法如下:
redis 127.0.0.1:6379> TTL KEY_NAME
返回值
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为 单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
# 不存在的 key
redis> TTL key
(integer) -2
# key 存在,但没有设置剩余生存时间
redis> SET key value
OK
redis> TTL key
(integer) -1
# 有剩余生存时间的 key
redis> EXPIRE key 10086
(integer) 1
redis> TTL key
(integer) 10084
1、延迟问题诊断
持久性策略会影响会对延迟有影响,在设置持久性时需要权衡性能的问题。
AOF+fsync always:对性能延迟影响最大,需要确定我们什么时候用它
AOF+fsync every second:这是一个很好的折中方案。
AOF+fsync every second+no appendfsync on rewrite set to yes:如上所述,但在重写过程中避免使用fsync以降低磁盘压力。
AOF+fsync never:取决于操作系统内核设置。
RDB:根据配置的保存触发器,确定更好的折中方案。
(1).基准延迟测量
redis-cli --intrinsic-latency 60
[root@localhost bin]# redis-cli --intrinsic-latency 60
Max latency so far: 28 microseconds.
Max latency so far: 354 microseconds.
Max latency so far: 807 microseconds.
Max latency so far: 950 microseconds.
Max latency so far: 1081 microseconds.
Max latency so far: 1314 microseconds.
Max latency so far: 1670 microseconds.
Max latency so far: 1739 microseconds.
Max latency so far: 2874 microseconds.
Max latency so far: 3111 microseconds.
Max latency so far: 5487 microseconds.
Max latency so far: 9560 microseconds.
Max latency so far: 45349 microseconds.
Max latency so far: 136359 microseconds.
Max latency so far: 143275 microseconds.
Max latency so far: 281699 microseconds.
7560410 total runs (avg latency: 7.9361 microseconds / 7936.08 nanoseconds per r
un).
Worst run took 35496x longer than the average latency.
(2).在启动Redis服务之前,应该测度网络往返延迟
redsi-cli --latency
min: 0, max: 2, avg: 0.11 (3026 samples)