IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 你应该了解Redis性能边界 -> 正文阅读

[大数据]你应该了解Redis性能边界

## 前言

之前线上发生一次redis cpu 使用率高的问题,导致服务雪崩。今天来复盘下。

#### 环境信息

redis:一主两从三哨兵

客户端java:部署在k8s

## 复盘

早上告警群,收到告警,redis cpu使用率百分之90多,随后部署在k8s的JAVA服务,健康检查失败,k8s杀死pod,开始重启。至于为什么会这也,我们下一篇文章在进行分析。

### 排查redis

连接进redis查看现在redis给的建议

```

latency doctor

```

Warning: Using a password with ‘-a’ or ‘-u’ option on the command line interface may not be safe.

Dave, I have observed latency spikes in this Redis instance. You don’t mind talking about it, do you Dave?

1. command: 100 latency spikes (average 106ms, mean deviation 6ms, period 168501.73 sec). Worst all time event 147ms.

I have a few advices for you:

- Check your Slow Log to understand what are the commands you are running which are too slow to execute. Please check http://redis.io/commands/slowlog for more information.

- Deleting, expiring or evicting (because of maxmemory policy) large objects is a blocking operation. If you have very large objects that are often deleted, expired, or evicted, try to fragment those objects into multiple smaller objects.

- I detected a non zero amount of anonymous huge pages used by your process. This creates very serious latency events in different conditions, especially when Redis is persisting on disk. To disable THP support use the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’, make sure to also add it into /etc/rc.local so that the command will be executed again after a reboot. Note that even if you have already disabled THP, you still need to restart the Redis process to get rid of the huge pages already created.

可以看到redis的建议有大量的慢日志,我们通过redis的命令查看redis的慢日志

```

slowlog get 5

```

此命令会输出redis当中的慢日志,我们这里的问题是因为使用了`keys`和`keys+*`.

keys的时间复杂度是O(N),N为执行该命令下的数据库的key的数量.

Redis的命令执行是单线程的,同一时间只能执行单个命令。单一长时间命令会堵塞后续。(可以通过debug sleep 0.1100ms 模拟执行长时间命令)。

我们的问题是因为redis大量使用了keys和keys*导致,redis cpu飙高。

所以优化掉慢日志上面的命令,使用scan代替keys从业务设计层面解决,redis命令时间为O(N)的。

如果你们是其他的redis 的问题,通过上面的命令还没有找到问题的,可以试试以下方式

### redis火焰图

对redis 进程进行采样

```

perf record -g --pid $(pgrep redis-server) -F 999 – sleep 60

```

使用 *perf report*显示信息

```

perf report -g “graph,0.5,caller”

```

转换成火焰图

```

git clone https://github.com/brendangregg/FlameGraph

cd FlameGraph

perf script > redis.perf.stacks

./stackcollapse-perf.pl redis.perf.stacks > redis.folded.stacks

./flamegraph.pl redis.folded.stacks > redis.svg

```

然后查看火焰图的调用栈。

## 了解Redis性能边界

![](https://cdn.jsdelivr.net/gh/filess/img10@main/2022/04/27/1651057247907-7f6eb800-5723-41ab-9666-4a89b88c9e25.png)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:12:55  更:2022-04-29 12:14:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:16:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码