目录

查询缓冲区

查询系统内存

大数据集

内存碎片


延迟问题检查完了,部署运行过程中的Redis还应该去检查可能的内存问题,因为Redis是一个基于内存的键值对数据存储服务器,里面所有的数据都是保存在内存中的,也就是说,当服务器重启时,里面的数据都会全部被清空。虽然RDB或AOF持久化会帮我们把数据写入到磁盘,以供数据库备份或是故障后的恢复,但如果运行过程中内存使用不合理,可能会导致OOM等问题。

查询缓冲区

首先我们可以检查下客户端的查询缓冲区,使用命令:

bin/redis-cli INFO MEMORY|egrep "used_memory_human|maxmemory_human"

used_memory表示当前Redis分配的内存空间,单位是字节,这里面包括了客户端的查询缓冲区,随着缓冲区内存使用的增长,used_memory的值也会变大。maxmemory表示最大内存空间限制,默认值是0,表示的是没有限制。我们可以使用CONFIG SET MAXMEMORY命令来设置这个内存限制。如果在Redis运行过程中发现这个used_memory远远大于maxmemory的话,证明缓冲区莫名增长很大。

此时我们之前配置的maxmemory_policy内存淘汰策略就开始起作用了,例如默认的noeviction,意思是不淘汰键,在内存满时,再进行新键的创建时,会直接返回OOM错误。

查询系统内存

上面这种方式是检查Redis实例的使用内存是否超过了配置的maxmemory,另外我们还可以查询redis-server进程的系统内存,使用命令

bin/redis-cli INFO MEMORY |grep used_memory_rss_human

查看:

大数据集

如果redis-server进程占用了太多的内存,可能的原因是很大的数据集导致的内存占满,进一步的我们可以使用命令

bin/redis-cli INFO MEMORY | egrep "used_memory_dataset| used_memory_dataset_perc"

查看:

如果used_memory_dataset_percset_perc指标大于90%,那么就是大数据集导致的内存问题,这时候我们就应该去查找Redis中的内存占用很大的键,一个很简单的方法就是直接使用命令

bin/redis-cli –bigkeys

来查找:

总的来说,我们比较关注的是客户端查询缓冲区,这部分内存包括在了used_memory中,如果发现used_memory比maxmemory大得多,就证明缓冲区出现了异常。判断Redis是否发生了out-of-memory问题,还可以从些指标的关系中判断:

used_memory – slave_output_buffer_size – AOF_buffer_size的值是否超过了maxmemory,(从实例和AOF重写这些都知道吧。)如果想要模拟下缓冲区OOM问题,可以首先使用命令

bin/redis-benchmark -q -d 1024000 -n 10000 -r 2500 -t set

往Redis中导入大量的数据,之后你再用INFO MEMORY命令查看内存信息,会发现used_memory_human的值增大,甚至比maxmemory大(前提你的maxmemory不是设置为0)。之后再继续往Redis里写数据,发生OOM问题,Redis进程被杀死(可以在redis-server进程日志中看到输出“killed”)。

内存碎片

最后,因为多次频繁的写入数据和删除数据等操作,Redis会在内存中留下很大碎片,这个可以用命令

bin/redis-cli INFO MEMORY|grep mem_fragmen

查看:

如果发现内存碎片率大于1.5,那么可以用命令

bin/redis-cli MEMORY PURGE

进行释放内存碎片。

Redis故障检查:内存问题相关推荐

  1. Redis故障检查:延迟测量

    目录 网络延迟测量 固有延迟 往返延迟 检查CPU利用率 检查持久化操作 Redis的故障检查,上一篇日志总结到的是找出一些慢查询操作,也就是这些查询花费了很长的时间才能完成,但是这个慢操作识别只记录 ...

  2. Redis 数据结构与内存管理策略(上)

    Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...

  3. redis持久化、内存优化、过期、LRU内存

    为什么80%的码农都做不了架构师?>>>    1.过期(expire命令) 设置了失效时间的元素,对于DEL/SET/GETSET/*STORE这些会删除或者重新设置元素的命令,如 ...

  4. 简述计算机软件故障排查,主板故障检查维修的常用方法哪些如何排查主板故障...

    主板故障检查维修的常用方法哪些如何排查主板故障 那得看主板的故障是什么~原因有很多,比如机器的板才不好,时间长会让主板变型~电源的质量不好,会烧坏主板,也有主板自身出现问题的,总之原因很多. 检查的方 ...

  5. 使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)

    2011-05-27 20:19 290人阅读 评论(0) 收藏 举报 microsoftdebuggingstructureoutputimagefile 必先利其器之一:使用PageHeap.EX ...

  6. 挑战Redis单实例内存最大极限,“遭遇”NUMA陷阱!

    我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小.然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理 ...

  7. 如何自动检查内存泄漏和句柄耗尽

    如何自动检查内存泄漏和句柄耗尽 1. 背景 当程序的子模块数量和规模扩大之后,在开发阶段,系统长时间允许后经常会碰到下面一些bug: 内存泄漏.随着时间允许,系统可用的内存越来越少,最后kernel ...

  8. Redis进阶之内存模型

    转载自   Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时, ...

  9. 使用valgrind检查内存问题

    作者:gfree.wind@gmail.com 博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net    本文的copyleft归gfree ...

最新文章

  1. 好书速递 | FPGA原理和结构
  2. 德约科维奇横扫纳达尔夺冠 加冕澳网七冠王
  3. 通过PSO实现不同函数的目标值计算和搜索
  4. keras 多个显卡
  5. pycharm连接到gitee的操作
  6. pbr 多出口_结合BFD基于PBR的多出口流量转发的控制与备份
  7. php 调用memcache,Windows下的Memcache安装(php调用)
  8. 【自然框架】之通用权限(四):角色表组
  9. WX微信小程序路由API使用
  10. tensorflow出现报错AttributeError: module ‘tensorflow.python.keras.backend‘ has no attribute ‘get_graph‘
  11. 《一》Java EE
  12. 阿里云java面试_20个高级Java面试题汇总
  13. Linux下Qt5: QMediaRecorder的问题,以及使用QCamera相关类进行摄像头视频采集
  14. matlab字符串中的换行符,如何在MATLAB中的子图中显示文本/字符串行?
  15. 《LwIP协议栈源码详解——TCP/IP协议的实现》移植综述
  16. Unity Shader - Secondary Maps (Detail Maps) Detail Mask 第二部分贴图(细节贴图)
  17. 用 Python 计算 Hurst 指数并预测市场趋势
  18. 什么是同源策略,为什么浏览器要使用同源策略
  19. ARM Cortex-A 系列处理器天梯图
  20. 黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

热门文章

  1. 《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”
  2. python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧
  3. 用友研究院院长吕建伟:阿里云正在从IBM商业模式走向AWS商业模式
  4. 坚持正确的研发项目管理转型之路
  5. 计算机毕业设计之 [含论文+源码等]基于java+ssh+mysql实现的共享自行车租赁|出租管理系统
  6. 弘康人寿:这样投保理赔时更容易!
  7. 【饭谈】领导问你:如何保证质量? 你要怎么回答? (第二篇)
  8. CN_@物理层@信噪比@分贝单位@奈奎斯特定理@香农公式@常用编码方式(曼彻斯特编码/差分曼彻斯特编码)波形图
  9. GOIP网关未注册到网络正在搜寻网络解决方法鼎信通达UC2000
  10. 《Improving speech recognition by revising gated recurrent units》