我是靠谱客的博主 跳跃柚子,最近开发中收集的这篇文章主要介绍阿里云redis有些key无法写入_redis服务器cpu100%的原因和解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先引起cpu100%可能的几大原因:

1.redis连接数过高
2.数据持久化导致的阻塞
3.主从存在频繁全量同步
4.value值过大
5.redis慢查询

为了模拟redis服务器cpu100%,临时买了一台阿里云ecs,并把那天清空前的redis备份还原到服务器上。下面我们按照顺序逐个排查,

redis连接数过高?

redis的默认链接数是10000,我们并没有更改这个值,前面提到了web的承载量是1600左右,所有可以排除

数据持久化导致的阻塞?

大家知道redis是可以持久化的,而redis持久化会采取LZF算法进行压缩,这种方式会减少磁盘的存储大小,而通过这种方式是需要消耗cpu的,我们看下redis的配置

6250d453255ae45381350c6a28928772.png

rdbcompression yes 表示压缩算法是打开的

还有3个关键的参数,这里解释一下:

save 900 1 //表示每15分钟且至少有1个key改变,就触发一次持久化
save 300 10 //表示每5分钟且至少有10个key改变,就触发一次持久化
save 60 10000 //表示每60秒至少有10000个key改变,就触发一次持久化

因为redis持久化的动作会记录日志,我们首先找出出问题的时间段里的持久化内容大小

bb58142f76988fcd82a15e001ac97d82.png

也才75M,看起来不会是它了,为了确保,我批量的高频次写入redis进行验证(这里代码就不贴了),直接看实验结果,数据量大概是上面的4倍

3d3be953f57b3027150307ce0e57e3e5.png

写入的过程我实时的观察cpu运作情况(实验的服务器是单核的,所有直接看阿里云的监控页):

d40fa8fb0b55ee9e1d1a005a81b4c605.png

得出结论:毫无压力,所有这项也排除

主从存在频繁全量同步

因为我们是单服务器,没有做主从所以直接排除

value值过大

先看一下当时cpu时redis的key和存储量情况

63314c977339e363e90d295a8b4aad15.png

462万多的key才使用900MB左右的内容,平均一个key才0.2kb左右,基本不可能,但是抱着严谨的态度还是决定模拟写入大的value值,测试之前现进行清空,然后写了一个数据读写脚本(这里就不展示代码了):

090f3c8d2089019a88100c87dab6da18.png

使单个key平均300KB左右提升了100多倍,cpu毫无压力,所有这个问题也可以排除。

redis慢查询

相信大家看到这里已经知道结论了,就是慢查询的问题。

7bcfd36f4da4217d4b1e61b2219248f9.png

一个高频访问的网页程序请求redis使用keys命令,导致每次访问接近2秒,当2秒内访问超过服务器的最高承载量时,后面请求全部需要排队,导致大量的超时(504)...

看了一下官方对keys命令的说明,已经进行警告生产环境要慎用,会产生性能问题:

4d92a2d27128c89626d07d3e8b22f93d.png
原文链接:redis服务器cpu100%的原因和解决方案_数据库_weixin_44753686的博客-CSDN博客

最后

以上就是跳跃柚子为你收集整理的阿里云redis有些key无法写入_redis服务器cpu100%的原因和解决方案的全部内容,希望文章能够帮你解决阿里云redis有些key无法写入_redis服务器cpu100%的原因和解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(109)

评论列表共有 0 条评论

立即
投稿
返回
顶部