Redis实用监控工具一览
Redis已经成为web应用开发不可或缺的一个组成部分,在项目中的应用越来越广泛,这篇文章就来讲讲那些关于Redis监控的那点事。
vredis-benchmark
1.1 简介
第一个就介绍一下,Redis自带的性能检测工具redis-benchmark, 该工具可以模拟 N 个客户端同时发出 Y 个请求。 可以使用 redis-benchmark -h 来查看基准参数。
1.2 命令格式:
redis-benchmark [-h ] [-p ] [-c ] [-n <requests]> [-k ]
1.3 参数介绍:
序号 | 选项 | 描述 | 默认值 |
---|---|---|---|
1 | -h | 指定服务器主机名 | 127.0.0.1 |
2 | -p | 指定服务器端口 | 6379 |
3 | -s | 指定服务器 socket | |
4 | -c | 指定并发连接数 | 50 |
5 | -n | 指定请求数 | 10000 |
6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
7 | -k | 1=keep alive 0=reconnect | 1 |
8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
9 | -P | 通过管道传输 <numreq> 请求 | 1 |
10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
11 | --csv | 以 CSV 格式输出 | |
12 | -l | 生成循环,永久执行测试 | |
13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
14 | -I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
1.4 实例:
1.4.1 同时执行1000个请求来检测性能:
redis-benchmark -n 1000 -q
1.4.2 50个并发请求,10000个请求,检测Redis性能:
redis-benchmark -h localhost -p 6379 -c 50 -n 10000
[root@localhost toutou]# redis-benchmark -h localhost -p 6379 -c 50 -n 10000
====== PING_INLINE ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 96.25% <= 1 milliseconds
98.38% <= 2 milliseconds
99.01% <= 3 milliseconds
100.00% <= 4 milliseconds
88495.58 requests per second ====== PING_BULK ======
10000 requests completed in 0.10 seconds
50 parallel clients
3 bytes payload
keep alive: 1 97.74% <= 1 milliseconds
100.00% <= 2 milliseconds
95238.10 requests per second ====== SET ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.44% <= 1 milliseconds
100.00% <= 1 milliseconds
93457.95 requests per second ====== GET ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.33% <= 1 milliseconds
99.13% <= 2 milliseconds
100.00% <= 2 milliseconds
93457.95 requests per second ====== INCR ======
10000 requests completed in 0.10 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.28% <= 1 milliseconds
100.00% <= 1 milliseconds
95238.10 requests per second ====== LPUSH ======
10000 requests completed in 0.10 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.70% <= 1 milliseconds
100.00% <= 1 milliseconds
97087.38 requests per second ====== RPUSH ======
10000 requests completed in 0.10 seconds
50 parallel clients
3 bytes payload
keep alive: 1 98.66% <= 1 milliseconds
100.00% <= 1 milliseconds
95238.10 requests per second ====== LPOP ======
10000 requests completed in 0.15 seconds
50 parallel clients
3 bytes payload
keep alive: 1 93.78% <= 1 milliseconds
96.51% <= 2 milliseconds
97.35% <= 3 milliseconds
98.41% <= 4 milliseconds
99.02% <= 5 milliseconds
99.23% <= 6 milliseconds
99.46% <= 7 milliseconds
99.96% <= 8 milliseconds
99.97% <= 9 milliseconds
100.00% <= 9 milliseconds
67567.57 requests per second ====== RPOP ======
10000 requests completed in 0.31 seconds
50 parallel clients
3 bytes payload
keep alive: 1 65.78% <= 1 milliseconds
84.10% <= 2 milliseconds
90.96% <= 3 milliseconds
94.19% <= 4 milliseconds
95.72% <= 5 milliseconds
97.05% <= 6 milliseconds
98.33% <= 7 milliseconds
98.80% <= 8 milliseconds
99.40% <= 9 milliseconds
99.72% <= 10 milliseconds
100.00% <= 14 milliseconds
31746.03 requests per second ====== SADD ======
10000 requests completed in 0.19 seconds
50 parallel clients
3 bytes payload
keep alive: 1 93.00% <= 1 milliseconds
96.88% <= 2 milliseconds
98.33% <= 3 milliseconds
98.92% <= 6 milliseconds
98.94% <= 7 milliseconds
98.95% <= 9 milliseconds
99.04% <= 10 milliseconds
99.48% <= 12 milliseconds
99.61% <= 14 milliseconds
99.62% <= 15 milliseconds
99.99% <= 16 milliseconds
100.00% <= 16 milliseconds
52083.33 requests per second ====== HSET ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 95.90% <= 1 milliseconds
99.95% <= 2 milliseconds
100.00% <= 2 milliseconds
90909.09 requests per second ====== SPOP ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 97.04% <= 1 milliseconds
99.75% <= 2 milliseconds
99.78% <= 3 milliseconds
100.00% <= 3 milliseconds
90909.09 requests per second ====== LPUSH (needed to benchmark LRANGE) ======
10000 requests completed in 0.11 seconds
50 parallel clients
3 bytes payload
keep alive: 1 96.48% <= 1 milliseconds
99.46% <= 2 milliseconds
99.95% <= 3 milliseconds
100.00% <= 3 milliseconds
87719.30 requests per second ====== LRANGE_100 (first 100 elements) ======
10000 requests completed in 0.33 seconds
50 parallel clients
3 bytes payload
keep alive: 1 32.63% <= 1 milliseconds
93.24% <= 2 milliseconds
99.83% <= 3 milliseconds
100.00% <= 3 milliseconds
30303.03 requests per second ====== LRANGE_300 (first 300 elements) ======
10000 requests completed in 0.85 seconds
50 parallel clients
3 bytes payload
keep alive: 1 2.65% <= 1 milliseconds
23.01% <= 2 milliseconds
53.33% <= 3 milliseconds
77.25% <= 4 milliseconds
91.47% <= 5 milliseconds
98.58% <= 6 milliseconds
99.99% <= 7 milliseconds
100.00% <= 7 milliseconds
11764.71 requests per second ====== LRANGE_500 (first 450 elements) ======
10000 requests completed in 1.22 seconds
50 parallel clients
3 bytes payload
keep alive: 1 1.01% <= 1 milliseconds
9.09% <= 2 milliseconds
28.25% <= 3 milliseconds
50.31% <= 4 milliseconds
68.06% <= 5 milliseconds
81.18% <= 6 milliseconds
90.78% <= 7 milliseconds
96.96% <= 8 milliseconds
99.43% <= 9 milliseconds
100.00% <= 9 milliseconds
8196.72 requests per second ====== LRANGE_600 (first 600 elements) ======
10000 requests completed in 1.57 seconds
50 parallel clients
3 bytes payload
keep alive: 1 0.61% <= 1 milliseconds
4.90% <= 2 milliseconds
14.77% <= 3 milliseconds
28.67% <= 4 milliseconds
44.56% <= 5 milliseconds
59.45% <= 6 milliseconds
72.38% <= 7 milliseconds
82.29% <= 8 milliseconds
90.01% <= 9 milliseconds
95.42% <= 10 milliseconds
98.34% <= 11 milliseconds
99.78% <= 12 milliseconds
100.00% <= 12 milliseconds
6357.28 requests per second ====== MSET (10 keys) ======
10000 requests completed in 0.19 seconds
50 parallel clients
3 bytes payload
keep alive: 1 68.40% <= 1 milliseconds
98.61% <= 2 milliseconds
100.00% <= 3 milliseconds
53763.44 requests per second [root@localhost toutou]#
vredis-cli
2.1 简介
查看redis的连接及读写操作
2.2 命令格式
redis-cli -h xx -p yy monitor
2.3 实例:
2.4 redis-cli info:
Redis 监控最直接的方法就是使用系统提供的 info 命令,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。
# Server
redis_version:5.0.2 # Redis 的版本
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:bf5d1747be5380f
redis_mode:standalone
os:Linux 2.6.32-220.7.1.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7 #gcc版本
process_id:49324 # 当前 Redis 服务器进程id
run_id:bbd7b17efcf108fdde285d8987e50392f6a38f48
tcp_port:6379
uptime_in_seconds:1739082 # 运行时间(秒)
uptime_in_days:20 # 运行时间(天)
hz:10
lru_clock:1734729
config_file:/home/s/apps/RedisMulti_video_so/conf/zzz.conf # Clients
connected_clients:1 #连接的客户端数量
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0 # Memory
used_memory:821848 #Redis分配的内存总量
used_memory_human:802.59K
used_memory_rss:85532672 #Redis分配的内存总量(包括内存碎片)
used_memory_peak:178987632
used_memory_peak_human:170.70M #Redis所用内存的高峰值
used_memory_lua:33792
mem_fragmentation_ratio:104.07 #内存碎片比率
mem_allocator:tcmalloc-2.0 # Persistence
loading:0
rdb_changes_since_last_save:0 #上次保存数据库之后,执行命令的次数
rdb_bgsave_in_progress:0 #后台进行中的 save 操作的数量
rdb_last_save_time:1410848505 #最后一次成功保存的时间点,以 UNIX 时间戳格式显示
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0 #redis是否开启了aof
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 # Stats
total_connections_received:5705 #运行以来连接过的客户端的总数量
total_commands_processed:204013 # 运行以来执行过的命令的总数量
instantaneous_ops_per_sec:0
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:34401 #运行以来过期的 key 的数量
evicted_keys:0 #运行以来删除过的key的数量
keyspace_hits:2129 #命中key 的次数
keyspace_misses:3148 #没命中key 的次数
pubsub_channels:0 #当前使用中的频道数量
pubsub_patterns:0 #当前使用中的模式数量
latest_fork_usec:4391 # Replication
role:master #当前实例的角色master还是slave
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0 # CPU
used_cpu_sys:1551.61
used_cpu_user:1083.37
used_cpu_sys_children:2.52
used_cpu_user_children:16.79 # Keyspace
db0:keys=3,expires=0,avg_ttl=0 #各个数据库的 key 的数量,以及带有生存期的 key 的数量
redis-cli info
结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8个部分。从info大返回结果中提取相关信息,就可以达到有效监控的目的。
vshowlog
3.1 简介
redis的slowlog是redis用于记录记录慢查询执行时间的日志系统。由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能。Slowlog是Redis从2.2.12版本引入的一条命令。
3.2 命令格式
在redis-cli中有关于slowlog的设置:
CONFIG SET slowlog-log-slower-than 6000
CONFIG SET slowlog-max-len 25
3.3 实例:
vRedisLive
4.1 简介
RedisLive是由Python编写的开源的图形化监控工具。核心服务部分只包括一个web服务和基于Redis自带的Info命令以及monitor命令的监控服务。支持多实例监控,监控信息可以使用redis存储和sqlite持久化存储。
4.2 安装
4.2.1 安装依赖环境
RedisLive是由Python2.X编写的,所以最好使用Python2.7来运行RedisLive,在CentOS 7中预安装了Python2.7,但没有安装Python的包管理器pip。
yum install epel-release
sudo yum install python-pip
pip install --upgrade pip
pip install tornado
pip install redis
pip install python-dateutil
4.2.2 安装RedisLive
git clone https://github.com/nkrode/RedisLive.git
4.2.3 修改配置文件redis-live.conf
cd RedisLive/src
//按照以下方式修改配置文件
{
"RedisServers":
[
#在此处添加需要监控的redis实例
{
"server": "127.0.0.1", #redis监听地址,此处为本机
"port" : 6379, #redis端口号,可以通过lsof -i | grep redis-ser查看 redis-server端口号
"password" : "some-password" #redis认证密码,如果没有可以删除该行,注意json格式
}
], "DataStoreType" : "redis", #监控数据存储方案的配置,可选择redis或sqllite
#用来存储监控数据的 Redis 实例
"RedisStatsServer":
{
"server" : "127.0.0.1",
"port" : 6379,
"password" : "some-password"
},
#监控数据持久化数据存储配置
"SqliteStatsStore" :
{
"path": "db/redislive.sqlite" #redis数据文件
}
}
redis-live.conf的配置可以参考redis-live.conf.example
4.3 启动
启动监控服务,每60秒监控一次
./redis-monitor.py --duration=60
再次开启一个终端,进入/root/RedisLive/src目录,启动web服务
./redis-live.py
4.4 效果图
vredis-faina
5.1 简介
5.1.1 背景
redis-faina是由Instagram开发并开源的一个 Redis 查询分析小工具。Instagram团队曾经使用 PGFouine 来作为其PostgreSQL的查询分析工具,他们觉得Redis也需要一个类似的工具来进行query分析工作,于是开发了 redis-faina。
5.1.1 概念
redis-faina 是通过Redis的 MONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性。
5.2 安装
git clone https://github.com/facebookarchive/redis-faina.git
5.3 命令介绍
[root@localhost toutou]# cd redis-faina/
[root@localhost redis-faina]# ls
heroku-redistogo-faina.sh LICENSE README.md redis-faina.py
[root@localhost redis-faina]# ./redis-faina.py -h
usage: redis-faina.py [-h] [--prefix-delimiter PREFIX_DELIMITER]
[--redis-version REDIS_VERSION]
[input] positional arguments:
input File to parse; will read from stdin otherwise optional arguments:
-h, --help show this help message and exit
--prefix-delimiter PREFIX_DELIMITER
String to split on for delimiting prefix and rest of
key
--redis-version REDIS_VERSION
Version of the redis server being monitored
[root@localhost redis-faina]#
其中 --prefix-delimiter
主要用于统计前缀的key的数据。
可以通过 redis MONITOR
命令以及管道进行分析,例如:
redis-cli -p 6379 MONITOR | head -n | ./redis-faina.py [options]
或者
redis-cli -p 6379 MONITOR > outfile.txt
./redis-faina.py ./outfile.txt
Overall Stats
========================================
Lines Processed 117773
Commands/Sec 11483.44 Top Prefixes
========================================
friendlist 69945
followedbycounter 25419
followingcounter 10139
recentcomments 3276
queued 7 Top Keys
========================================
friendlist:zzz:1:2 534
followingcount:zzz 227
friendlist:zxz:1:2 167
friendlist:xzz:1:2 165
friendlist:yzz:1:2 160
friendlist:gzz:1:2 160
friendlist:zdz:1:2 160
friendlist:zpz:1:2 156 Top Commands
========================================
SISMEMBER 59545
HGET 27681
HINCRBY 9413
SMEMBERS 9254
MULTI 3520
EXEC 3520
LPUSH 1620
EXPIRE 1598 Command Time (microsecs)
========================================
Median 78.25
75% 105.0
90% 187.25
99% 411.0 Heaviest Commands (microsecs)
========================================
SISMEMBER 5331651.0
HGET 2618868.0
HINCRBY 961192.5
SMEMBERS 856817.5
MULTI 311339.5
SADD 54900.75
SREM 40771.25
EXEC 28678.5 Slowest Calls
========================================
3490.75 "SMEMBERS" "friendlist:zzz:1:2"
2362.0 "SMEMBERS" "friendlist:xzz:1:3"
2061.0 "SMEMBERS" "friendlist:zpz:1:2"
1961.0 "SMEMBERS" "friendlist:yzz:1:2"
1947.5 "SMEMBERS" "friendlist:zpz:1:2"
1459.0 "SISMEMBER" "friendlist:hzz:1:2" "zzz"
1416.25 "SMEMBERS" "friendlist:zhz:1:2"
1389.75 "SISMEMBER" "friendlist:zzx:1:2" "zzz"
v博客总结
关于Redis的监控工具还有很多,这里就不一一列举了,下面给出其它几款优秀的Redis监控工具链接,感兴趣的可以看看。
其他监控工具:
- https://github.com/junegunn/redis-stat
- https://github.com/steelThread/redmon
- https://github.com/oliver006/redis_exporter
作 者:请叫我头头哥
出 处:http://www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
Redis实用监控工具一览的更多相关文章
- 安装Redis图形监控工具---RedisLive
RedisLive简介 RedisLive是一款用Python编写基于WEB的Redis图形监控工具,也是一款实时监控Redis数据的开源软件,以WEB的形式展现出redis中的key的情况,实例数据 ...
- 聊聊redis的监控工具
序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redi ...
- Redis进阶知识一览
Redis的持久化机制 RDB: Redis DataBase 什么是RDB RDB∶每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存.如果宕机重启,那么内存里的 ...
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- Redis专栏
后端开发都应该掌握的Redis基础 Redis实用监控工具一览
- 详解Codis安装与部署
Codis github上的介绍安装,里面很全,而且也有中/英文的,只不过按照github的步骤安装,会有一些坑,所以有了这么一篇文章. 在上一篇文章<Redis实用监控工具一览>中,介绍 ...
- Redis分布式锁—Redisson+RLock可重入锁实现篇
前言 平时的工作中,由于生产环境中的项目是需要部署在多台服务器中的,所以经常会面临解决分布式场景下数据一致性的问题,那么就需要引入分布式锁来解决这一问题. 针对分布式锁的实现,目前比较常用的就如下几种 ...
- redis与CPU、内存
任何一个后端应用,包括代码都要考虑对于CPU和内存的影响.redis本质上类似于nodejs,单进程.单线程,事件驱动,但不同的是redis是CPU密集型的.这里列出了redis与内存CPU的相关考虑 ...
- Redis的KEYS命令引起宕机事件
摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...
随机推荐
- PHP将unicode转utf8最简法
最近开发时遇到Unicode编码问题,找了半天才知道PHP并没有Unicode转码函数,终于发现用一行PHP代码解决的方案: $str = '{"success":true,&qu ...
- Boostrap的自适应功能
其实理解栅栏模式之后,自适应功能就简单很多了,根据浏览器的大小,Boostrap有四种栅栏类名提供使用,用法与Css样式表类名选择器样式调用是一样的: xs:col-xs-1 ~ col-xs-12, ...
- API生命周期第三阶段:API实施模式,以及结合swagger和项目现状的最佳模式
这篇博客,主要是宏观介绍一下开发模式,尤其是针对于目前公司前后分离的项目! 一.API实施模式概述 API实施模式,主要是三个,其中API-First又是作为一种指导思想的一种,所以,简单来说事实实施 ...
- 【Istio】error initializing configuration '/etc/istio/proxy/envoy-rev0.json': malformed IP address: istio-statsd-prom-bridge
今天遇到一个问题,istio的组件一直在重启,查看log大概是这个样子 --03T07::.935580Z info Epoch starting --03T07::.936317Z info Env ...
- Chromo开发常用插件和***工具
地址:https://www.google.com/chrome/webstore/ ***工具:链接:http://pan.baidu.com/s/1pLakW7T 密码:2gpw Axure RP ...
- 【Luogu】P3746组合数问题(矩阵)
题目链接 哇我一个活人的智商被题目碾压了 可以把问题转化为有nk个物品,问拿i件物品的方案数有多少种,其中i%k=r. 然后矩阵乘法加速DP即可. #include<cstdio> #in ...
- html 文本标签
文本格式化标签 标签 描述 <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> ...
- Topcoder SRMCards ——贪心
选择一个数x会删去x+1和x-1,问可以最多选多少次. 显然,对于一段连续的数列,贪心的从左向右选取是最优的. 然后就可以贪心的统计答案了. #include <map> #include ...
- Unity 导出的android项目自动生成Private Libraries
如果Unity里面Plugins/Android 添加了 jar 文件,则导出Android 项目时会自动生成 Private Libraries. 而且里面的项还删不掉 然后在网上搜了一下,找到了原 ...
- C#创建Graphics对象的方法
方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用 ...