redis 性能监控和排查 - babyblue - 博客园

标签: | 发表时间:2018-09-23 07:51 | 作者:
出处:https://www.cnblogs.com

    最近项目中接连遇到redis出现瓶颈的问题,现在把排查的一些经验记录下来备查,本篇只是思路的整理,不涉及具体的使用。

   大体的思路如下:

  1.通过slow log查看

     参考 http://www.cnblogs.com/onmyway20xx/p/5486604.html

  查看下是否有较为明显的慢查询?一般认为出现慢查询的话,redis性能瓶颈已经比较明显了

  2. 通过info 查看;

  info里面的信息比较多,通常关注以下几块

   # Memory    
    used_memory_human:795.13K  #redis现在占用的内存,有可能包括SWAP虚拟内存。
    used_memory_rss:18259968  #系统给redis分配的内存  
    used_memory_peak_human:9.51M  # Redis所用内存的峰值 
    mem_fragmentation_ratio:22.43 #used_memory_rss/used_memory ,当mem_fragmentation_ratio <1时,说明used_memory > used_memory_rss,

    这时Redis已经在使用SWAP,运行性能会受很大影响。

  3. 通过benchmark测试下当前服务器的性能;

  4. 通过MONITOR测算一次请求对redis操作的次数;

 

 

 

 

1. INFO

info指令返回服务器相关信息,包括:

  • server: General information about the Redis server

  • clients: Client connections section

  • memory: Memory consumption related information

  • persistence: RDB and AOF related information

  • stats: General statistics

  • replication: Master/slave replication information

  • cpu: CPU consumption statistics

  • commandstats: Redis command statistics

  • cluster: Redis Cluster section

  • keyspace: Database related statistics

其本身支持定制返回列表:

[root@~]# redis-cli info[root@~]# redis-cli info default[root@~]# redis-cli info all

详情请见: http://www.redis.cn/commands/info.html

2. MONITOR

MONITOR是一个调试命令,返回服务器处理的每一个命令,它能帮助我们了解在数据库上发生了什么操作。共有3种操作方法:

[root@~]# redis-cli monitor
OK1417532512.619715[0127.0.0.1:55043]"REPLCONF""ACK""6623624"[root@~]# telnet 127.0.0.1 6379
Trying127.0.0.1...
Connected to127.0.0.1.
Escape character is'^]'.
monitor
+OK
+1417532567.733458[0127.0.0.1:55043]"REPLCONF""ACK""6623708"
+1417532568.735936[0127.0.0.1:55043]"REPLCONF""ACK""6623708"
quit
+OK
Connection closed by foreign host.[root@~]# redis-cli127.0.0.1:6379> monitor
OK1417532590.785487[0127.0.0.1:55043]"REPLCONF""ACK""6623736"

由于MONITOR命令返回服务器处理的所有的命令, 所以在性能上会有一些消耗。使用官方的压测工具测试结果如下

在不运行MONITOR命令的情况下,benchmark的测试结果:

[root@~/software/redis-2.8.17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE:51020.41 requests per second
PING_BULK:50607.29 requests per second
SET:37257.82 requests per second
GET:49800.80 requests per second
INCR:38699.69 requests per second
LPUSH:38910.51 requests per second
LPOP:39277.30 requests per second
SADD:54614.96 requests per second
SPOP:51948.05 requests per second
LPUSH(needed to benchmark LRANGE):38819.88 requests per second
LRANGE_100(first100 elements):20112.63 requests per second
LRANGE_300(first300 elements):9025.27 requests per second
LRANGE_500(first450 elements):6836.67 requests per second
LRANGE_600(first600 elements):5406.28 requests per second
MSET(10 keys):19394.88 requests persecond

在运行MONITOR命令的情况下,benchmark的测试结果: (redis-cli monitor > /dev/null):

[root@~/software/redis-2.8.17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE:42211.91 requests per second
PING_BULK:42936.88 requests per second
SET:26143.79 requests per second
GET:33990.48 requests per second
INCR:26553.37 requests per second
LPUSH:27337.34 requests per second
LPOP:27225.70 requests per second
SADD:30459.95 requests per second
SPOP:39494.47 requests per second
LPUSH(needed to benchmark LRANGE):26315.79 requests per second
LRANGE_100(first100 elements):22055.58 requests per second
LRANGE_300(first300 elements):8104.38 requests per second
LRANGE_500(first450 elements):6371.05 requests per second
LRANGE_600(first600 elements):5031.95 requests per second
MSET(10 keys):14861.05 requests persecond

可以看到各项指标基本都有所下降。

详情请见: http://www.redis.cn/commands/monitor.html

3. SLOWLOG

通过SLOWLOG可以读取慢查询日志。

使用SLOWLOG LEN就可以获取当前慢日志长度。

[root@~/software/redis-2.8.17]# redis-cli127.0.0.1:6379> slowlog len(integer)28

使用SLOWLOG GET就可以获取所有慢日志。

127.0.0.1:6379> slowlogget1)1)(integer)272)(integer)14175313203)(integer)246234)1)"info"

其中,各项指标表示:

  • A unique progressive identifier for every slow log entry.

  • The unix timestamp at which the logged command was processed.

  • The amount of time needed for its execution, in microseconds(注意,microseconds翻译成微秒,而不是毫秒).

  • The array composing the arguments of the command.

使用SLOWLOG GET N就可以获取最近N条慢日志。

127.0.0.1:6379>slowlogget21)1)(integer)272)(integer)14175313203)(integer)246234)1)"info"2)1)(integer)262)(integer)14175283793)(integer)213634)1)"get"2)"user:score"

使用SLOWLOG RESET命令重置慢日志。一旦执行,将丢失以前的所有慢日志。

127.0.0.1:6379> slowlog reset      
3. redis延迟时间排查

最近数据量越来越多,并发写操作很多的情况下,Redis出现响应慢的情况;

    

可以使用 Redis命令来测试一下redis的响应速度:

redis-cli --latency -h  xxx  -p  xxxx
    

这条命令会向Redis插入示例数据来检查平均延时。 Ctrl+C可以随时结束测试;

    

下面我们列一下会出现延时的可能:

    
  • 硬件,系统:硬件问题是所有问题最底层的问题了,如果硬件慢,例如CPU主频低,内存小,磁盘IO慢,这些会让所有运行在上面的系统响应慢;另外,使用虚拟机会让系统运行的性能太为下降;当然,有钱的话,这问题很容易解决;系统方面,Linux本身的系统资源调度也会产生一定的延时。这些一般不会很大,可以忽略不计;

  • 网络:如果客户端和redis在同一台服务器上,使用socket建立连接会比监听 TCP/IP 端口快很多;

  • Redis命令:一些时间复杂度比较高的命令,如 lrem,sort,sunion等命令会花比较长时间;另外,大量的重复连接也会造成延时,重用连接是一种很好的品质;如果有大量写操作,可以使用 pipeline 管道的方式(类似mysql事务),一次性提交,这样数据量也少了,连接次数也少了,不用每次都返回数据,速度自然会快很多;

  • 持久化:Redis持久化需要fork出一个进程来进行持久化操作,这本身就会引发延时,如果数据变化大,RDB配置时间短,那这个代价还是挺大的;再加上,硬盘这东西真有点不靠谱,如果还是虚拟机上的虚拟硬盘,如果还是NFS共享目录,那这延时会让你崩溃。所以,如果系统不需要持久化,关了吧。

相关 [redis 性能 监控] 推荐:

nagios 监控redis

- - C1G军火库
下载check_redis.pl. OK: REDIS 2.6.12 on 192.168.0.130:6379 has 1 databases (db0) with 49801 keys, up 3 days 14 hours - connected_clients is 1, blocked_clients is 0 | connected_clients=1 blocked_clients=0.

Redis 负载监控——redis-monitor

- - ITeye资讯频道
redis-monitor是一个Web可视化的 redis 监控程序. 使用 Flask 来开发的,代码结构非常简单,适合移植到公司内网使用. redis 服务器信息,包括 redis 版本、上线时间、 os 系统信息等等. 实时的消息处理信息,例如处理 command 数量、连接总数量等. 内存占用、 cpu 消耗实时动态图表.

redis 性能监控和排查 - babyblue - 博客园

- -
    最近项目中接连遇到redis出现瓶颈的问题,现在把排查的一些经验记录下来备查,本篇只是思路的整理,不涉及具体的使用.   1.通过slow log查看.      参考 http://www.cnblogs.com/onmyway20xx/p/5486604.html.   查看下是否有较为明显的慢查询.

Redis监控技巧

- - NoSQLFan
本文来自 Bugsnag的联合创始人 Simon Maynard的系列文章,作者根据几年来对 Redis的使用经历,对Redis 监控方法进行了系统性的总结,干货很多,值得一看. 原文链接: Redis Masterclass – Part 2, Monitoring. Redis 监控最直接的方法当然就是使用系统提供的 info 命令来做了,你只需要执行下面一条命令,就能获得 Redis 系统的状态报告.

Redis监控方案

- - zzm
Redis是一种高级key-value数据库. 它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富. 有字符串,链表、哈希、集合和有序集合5种. 支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能. 所以Redis也可以被看成是一个数据结构服务器.

Redis服务器监控工具redis-live

- - 企业架构 - ITeye博客
Redis服务器监控工具redis-live. 413 views     comments 暂无评论. 目前来说,越来越多的使用多了NOSQL的业务,但是这方面的监控缺不多. 今天给大家介绍几个专业监控redis服务的工具,便于大家进行redis性能分析. 这个工具是用ruby语言写的,ruby是小鬼子弄出来的,个人真心觉得比较难用.

一个Redis监控dashboard

- - 丕子
RedisLive: 小巧玲珑,简单易用. Redis-Commander: 也很赞的样子. Redis集群增删节点的数据迁移问题. Redis Cluster的安装和配置(beta-6). 使用Jedis的ShardedJedis做Redis集群. Redis Sentinel的配置和使用. Redis持久化时的内存2倍问题.

redis监控指标 - 简书

- -
Redis Server数据采集. 二、Redis Server监控数据采集. redis存活监控 (redis_alive):redis本地监控agent使用ping,如果指定时间返回PONG表示存活,否则redis不能响应请求,可能阻塞或死亡. 当返回值不为1时,redis挂了,告警. 连接个数 (connected_clients):客户端连接个数,如果连接数过高,影响redis吞吐量.

使用Cacti监控MongoDB和Redis

- Wang Dong - NoSQLFan
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 被广泛的用于对服务器的运维监控中,Cacti提供了一种插件式的管理,只要按要求写好特定的模板,那么你就可以对任何服务进行流量监控. 本文就是要为大家介绍两个模板,分别是MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控.

Cacti监控Redis实现过程

- - BlogJava-qileilove
 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 被广泛的用于对服务器的运维监控中,Cacti提供了一种插件式的管理,只要按要求写好特定的模板,那么你就可以对任何服务进行流量监控. 本文就是要为大家介绍两个模板,分别是MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控.