Login
网站首页 > 文章中心 > 其它

redis 性能监控和排查_redis性能监控指标

作者:小编 更新时间:2023-10-14 18:47:49 浏览量:246人看过

redis出现瓶颈的问题,现在把排查的一些经验记录下来备查,本篇只是思路的整理,不涉及具体的使用.

大体的思路如下:

①通过slow log查看

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

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

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

redis 性能监控和排查_redis性能监控指标-图1

① INFO

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

server: General information about the Redis server

clients: Client connections section

memory: Memory consumption related information

redis 性能监控和排查_redis性能监控指标-图2

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

[root@~]# redis-cli monitor
OK
1417532512.619715 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623624"
[root@~]# telnet 12⑦0.0.1 6379
Trying 12⑦0.0.1...
Connected to 12⑦0.0.1.
Escape character is '^]'.
monitor
+OK
+141753256⑦733458 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623708"
+141753256⑧735936 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623708"
quit
+OK
Connection closed by foreign host.
[root@~]# redis-cli 
12⑦0.0.1:6379> monitor
OK
1417532590.785487 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623736"

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

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

[root@~/software/redis-2.⑧17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 51020.41 requests per second
PING_BULK: 5060⑦29 requests per second
SET: 3725⑦82 requests per second
GET: 49800.80 requests per second
INCR: 38699.69 requests per second
LPUSH: 38910.51 requests per second
LPOP: 3927⑦30 requests per second
SADD: 5461④96 requests per second
SPOP: 5194⑧05 requests per second
LPUSH (needed to benchmark LRANGE): 38819.88 requests per second
LRANGE_100 (first 100 elements): 20112.63 requests per second
LRANGE_300 (first 300 elements): 902⑤27 requests per second
LRANGE_500 (first 450 elements): 683⑥67 requests per second
LRANGE_600 (first 600 elements): 540⑥28 requests per second
MSET (10 keys): 1939④88 requests per second

/dev/null):

[root@~/software/redis-2.⑧17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 42211.91 requests per second
PING_BULK: 4293⑥88 requests per second
SET: 2614③79 requests per second
GET: 33990.48 requests per second
INCR: 2655③37 requests per second
LPUSH: 2733⑦34 requests per second
LPOP: 2722⑤70 requests per second
SADD: 30459.95 requests per second
SPOP: 3949④47 requests per second
LPUSH (needed to benchmark LRANGE): 2631⑤79 requests per second
LRANGE_100 (first 100 elements): 2205⑤58 requests per second
LRANGE_300 (first 300 elements): 810④38 requests per second
LRANGE_500 (first 450 elements): 6371.05 requests per second
LRANGE_600 (first 600 elements): 5031.95 requests per second
MSET (10 keys): 14861.05 requests per second

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

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

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

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

redis 性能监控和排查_redis性能监控指标-图3

[root@~/software/redis-2.⑧17]# redis-cli 
12⑦0.0.1:6379> slowlog len
(integer) 28

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

12⑦0.0.1:6379> slowlog get 
 1) 1) (integer) 27
2) (integer) 1417531320
3) (integer) 24623
4) 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> slowlog get 2
1) 1) (integer) 27
  2) (integer) 1417531320
  3) (integer) 24623
  4) 1) "info"
2) 1) (integer) 26
  2) (integer) 1417528379
  3) (integer) 21363
  4) 1) "get"
    2) "user:score"

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

12⑦0.0.1:6379> slowlog reset

③ redis延迟时间排查

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

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

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

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

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

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

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

[root@~]# redis-cli info
[root@~]# redis-cli info default
[root@~]# redis-cli info all
[root@~]# redis-cli monitor
OK
1417532512.619715 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623624"
[root@~]# telnet 12⑦0.0.1 6379
Trying 12⑦0.0.1...
Connected to 12⑦0.0.1.
Escape character is '^]'.
monitor
+OK
+141753256⑦733458 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623708"
+141753256⑧735936 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623708"
quit
+OK
Connection closed by foreign host.
[root@~]# redis-cli 
12⑦0.0.1:6379> monitor
OK
1417532590.785487 [0 12⑦0.0.1:55043] "REPLCONF" "ACK" "6623736"
[root@~/software/redis-2.⑧17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 51020.41 requests per second
PING_BULK: 5060⑦29 requests per second
SET: 3725⑦82 requests per second
GET: 49800.80 requests per second
INCR: 38699.69 requests per second
LPUSH: 38910.51 requests per second
LPOP: 3927⑦30 requests per second
SADD: 5461④96 requests per second
SPOP: 5194⑧05 requests per second
LPUSH (needed to benchmark LRANGE): 38819.88 requests per second
LRANGE_100 (first 100 elements): 20112.63 requests per second
LRANGE_300 (first 300 elements): 902⑤27 requests per second
LRANGE_500 (first 450 elements): 683⑥67 requests per second
LRANGE_600 (first 600 elements): 540⑥28 requests per second
MSET (10 keys): 1939④88 requests per second
[root@~/software/redis-2.⑧17]# src/redis-benchmark -c 10 -n 100000 -q
PING_INLINE: 42211.91 requests per second
PING_BULK: 4293⑥88 requests per second
SET: 2614③79 requests per second
GET: 33990.48 requests per second
INCR: 2655③37 requests per second
LPUSH: 2733⑦34 requests per second
LPOP: 2722⑤70 requests per second
SADD: 30459.95 requests per second
SPOP: 3949④47 requests per second
LPUSH (needed to benchmark LRANGE): 2631⑤79 requests per second
LRANGE_100 (first 100 elements): 2205⑤58 requests per second
LRANGE_300 (first 300 elements): 810④38 requests per second
LRANGE_500 (first 450 elements): 6371.05 requests per second
LRANGE_600 (first 600 elements): 5031.95 requests per second
MSET (10 keys): 14861.05 requests per second
[root@~/software/redis-2.⑧17]# redis-cli 
12⑦0.0.1:6379> slowlog len
(integer) 28
12⑦0.0.1:6379> slowlog get 
 1) 1) (integer) 27
2) (integer) 1417531320
3) (integer) 24623
4) 1) "info"
127.0.0.1:6379> slowlog get 2
1) 1) (integer) 27
  2) (integer) 1417531320
  3) (integer) 24623
  4) 1) "info"
2) 1) (integer) 26
  2) (integer) 1417528379
  3) (integer) 21363
  4) 1) "get"
    2) "user:score"
12⑦0.0.1:6379> slowlog reset

③ redis延迟时间排查

以上就是土嘎嘎小编为大家整理的redis 性能监控和排查相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章