问题描述

当 Azure Redis 服务器负载过高的情况下,使用时就会遇见连接超时,命令超时,IO Socket超时等异常。为了能定位是那些因素引起的,可以参考微软官方文档( 管理 Azure Cache for Redis 的服务器负载 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices-server-load#avoid-long-running-commands) 开始以下因素的分析:

  1. 值大小 : 可以通过Redis-cli.exe 的bigkeys来进行分析 [redis-benchmark -h <your redis name>.redis.cache.chinacloudapi.cn -a [xxxxxxxxxxxxxxxxxx your access key ] -t GET -n 1000000 -d 1024 -P 50 -c 50]
  2. 避免出现客户端连接高峰 : 可以查看Redis Metrics中的连接数
  3. 内存压力 : 通过查看Redis Metrics中的内存使用量
  4. 避免长时间运行的命令 : 通过Azure Redis门户上的console或者是Redis-cli.exe 来执行 slowlog get 100指令

本文就重点演示在Azure Redis门户上的console页面执行  slowlog get 100  指令。

问题回答

因为Redis 服务器是单线程系统。 长时间运行的命令(官名:慢指令, Slowlog)可能导致客户端出现延迟或超时,因为服务器在忙于处理长时间运行的命令时无法响应任何其他请求。那么,如何来查看慢指令呢?

第一步: 登录Azure门户,选择需要查看的Redis服务,进入Console页面

第二步:在Console命令页输入:slowlog get 100

  • slowlog get 100: 获取当前Redis服务中所记录的慢指令信息,每一个指令包含六部分内容,id,unix时间,指令执行时间(ms 微秒), 指令内容,客户端IP:端口,客户端机器名。
  • slowlog len : 返回当前Redis服务器中所记录的慢指令日志中所记录指令数
  • slowlog reset  :清空当前慢指令记录

指令输出示例:

Welcome to secure redis console!

This console connects to your live redis server and all commands are run on the server.

WARNING: Use expensive commands with caution as they can impact your server load!

>slowlog get 100
1) 1) (integer) 16
2) (integer) 1639993957
3) (integer) 10012
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:14835"
6) ""
2) 1) (integer) 15
2) (integer) 1639993727
3) (integer) 10195
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:19468"
6) ""
3) 1) (integer) 14
2) (integer) 1639992068
3) (integer) 13279
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:46504"
6) ""
4) 1) (integer) 13
2) (integer) 1639990412
3) (integer) 14152
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:39900"
6) ""
5) 1) (integer) 12
2) (integer) 1639990251
3) (integer) 10710
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:52381"
6) ""
6) 1) (integer) 11
2) (integer) 1639989209
3) (integer) 11665
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:38779"
6) ""
7) 1) (integer) 10
2) (integer) 1639989142
3) (integer) 13642
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:12348"
6) ""
8) 1) (integer) 9
2) (integer) 1639988822
3) (integer) 22073
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:51454"
6) ""
9) 1) (integer) 8
2) (integer) 1639988414
3) (integer) 13668
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:1550"
6) ""
10) 1) (integer) 7
2) (integer) 1639987239
3) (integer) 18846
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:57350"
6) ""
11) 1) (integer) 6
2) (integer) 1639986196
3) (integer) 12921
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:1739"
6) ""
12) 1) (integer) 5
2) (integer) 1639986196
3) (integer) 15833
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:1739"
6) ""
13) 1) (integer) 4
2) (integer) 1639985175
3) (integer) 14434
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:1649"
6) ""
14) 1) (integer) 3
2) (integer) 1639984227
3) (integer) 61332
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:24878"
6) ""
15) 1) (integer) 2
2) (integer) 1639984227
3) (integer) 27560
4) 1) "GET"
2) "key:__rand_int__"
5) "167.220.233.137:7637"
6) ""
16) 1) (integer) 1
2) (integer) 1639983695
3) (integer) 10361
4) 1) "SET"
2) "Message_dd2_0"
3) "eyJ0eXAiOiJKV1QiLCJub25jZSI6Inp1d2hMNzhSWDJsdGZITlN1TDYyOEhpRDNrTzhWSnJXZl9CNEtVcjBFTWsiLCJhbGciOiJSUzI1NiIsIng1dCI6IkpSNGxDdzkw... (4140520 more bytes)"
5) "167.220.233.137:1166"
6) "MININT-S4MGVOU"
17) 1) (integer) 0
2) (integer) 1639983310
3) (integer) 16577
4) 1) "SET"
2) "Message_dd_2222"
3) "eyJ0eXAiOiJKV1QiLCJub25jZSI6Inp1d2hMNzhSWDJsdGZITlN1TDYyOEhpRDNrTzhWSnJXZl9CNEtVcjBFTWsiLCJhbGciOiJSUzI1NiIsIng1dCI6IkpSNGxDdzkw... (7774 more bytes)"
5) "167.220.233.137:58313"
6) "MININT-S4MGVOU"
>slowlog len
(integer) 17
>slowlog reset
OK
>slowlog len
(integer) 0

Each entry from the slow log is comprised of the following six values:

  1. A unique progressive identifier for every slow log entry.
  2. The unix timestamp at which the logged command was processed.
  3. The amount of time needed for its execution, in microseconds.
  4. The array composing the arguments of the command.
  5. Client IP address and port.
  6. Client name if set via the CLIENT SETNAME command.

参考资料

SLOWLOG GET [count]https://redis.io/commands/slowlog-get

管理 Azure Cache for Redis 的服务器负载https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices-server-load#value-sizes

【Azure Redis 缓存】Azure Cache for Redis 中如何快速查看慢指令情况(Slowlogs)的更多相关文章

  1. 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)

    问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...

  2. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis由低级别(C)升级到高级别(P)的步骤和注意事项, 及对用户现有应用的潜在影响,是否需要停机时间窗口,以及这个时间窗口需要多少的预估问题

    问题描述 由于Azure Redis的性能在不同级别表现不同,当需要升级/缩放Redis的时候,从使用者的角度,需要知道有那些步骤? 注意事项? 潜在影响?停机事件窗口? 升级预估时间? 解决方案 从 ...

  3. spring boot redis 缓存(cache)集成

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  4. 【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果

    当使用Azure Redis高级版时候,为了能更好的保护Redis的安全,启用了虚拟网路,把Redis集成在Azure中的虚拟网络,只能通过虚拟网络VENT中的资源进行访问,而公网是不可以访问的.但是 ...

  5. 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功

    问题描述 在正常使用Azure Redis的服务中,突然发现Redis 的CPU达到了100%, 正常的使用中发现性能问题严重.从Redis的门户图表中,观察到CPU, Connection,Lent ...

  6. 【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能

    问题描述 关于Azure Redis的性能问题,在官方文档中,可以查看到不同层级Redis的最大连接数,每秒处理请求的性能. 基本缓存和标准缓存 C0 (250 MB) 缓存 - 最多支持 256 个 ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】Redis连接池

    问题描述 Redis根据定价层说明,不同级别支持的连接数最多可达4万(同时),但是当短时间又大量连接请求建立的时候,Redis服务的服务压力非常大,到达100%.严重影响了高响应的要求.最严重时,经常 ...

  8. 高级运维(六):源码安装Redis缓存服务、常用Redis数据库操作指令、配置Redis主从服务器

    一.源码安装Redis缓存服务 目标: 本案例要求先快速搭建好一台Redis服务器,并测试该缓存服务器: 1> 设置变量test,值为123 2> 查看变量test的值 3> 设置计 ...

  9. 【Redis缓存机制】1.Redis介绍和使用场景

    (1)持久化数据库的缺点平常我们使用的关系型数据库有Mysql.Oracle以及SqlServer等,在开发的过程中,数据通常都是通过Web提供的数据库驱动来链接数据库进行增删改查. 那么,我们日常使 ...

随机推荐

  1. vip视频解析保存

    无广告通用:https://vip.52jiexi.top/?url= 腾讯直解 无广告解析:https://jx.lfeifei.cn/?url= 无广告解析:https://api.steak51 ...

  2. 多线程05.thread不知道的知识

    Thread thread = new Thread(); // init(null, null, "Thread-" + nextThreadNum(), 0); //init( ...

  3. appdata 文件夹

    appdata file AppData 的位置在 c:\Users\{UserName}\Appdata ,它是从 Windows Vista 开始引入的,直至今天的 Windows 7, 8, 1 ...

  4. Kafka连接器建立数据管道

    1.概述 最近,有同学留言咨询Kafka连接器的相关内容,今天笔者给大家分享一下Kafka连接器建立数据管道的相关内容. 2.内容 Kafka连接器是一种用于Kafka系统和其他系统之间进行功能扩展. ...

  5. Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)

    本文描述了 Snuba 查询语言 (SnQL). 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒 ...

  6. 随笔:关于.net core单文件AOT编译

    .Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...

  7. html中引入外部js文件,使用外部js文件里的方法

    外部js文件1: /** * 加了window.onload 后,直接引入js文件即可 * 页面资源全部加载完毕后会自动调用window.onload里的回调函数 */ window.addEvent ...

  8. Atcoder Grand Contest 034 F - RNG and XOR(FWT)

    Atcoder 题面传送门 & 洛谷题面传送门 tsc 考试前 A 的题了,结果到现在才写这篇题解--为了 2mol 我已经一周没碰键盘了,现在 2mol 结束算是可以短暂的春天 短暂地卷一会 ...

  9. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台

    ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...

  10. doxygen文件配置

    主要配置修改 整个程序配置分几个部分 Project related configuration options 项目相关,包括: 项目名 输出目录 输出语言 是否显示继承属性 是否对C.Java.F ...