Redis 内存使用情况查看

梦莱1年前技术文章437

内存情况查看

1、MEMORY STATS

--连接 redis
redis-cli

--执行 MEMORY STATS命令查询内存使用详情
 MEMORY STATS

Redis实例的内存开销主要由两部分组成:

· 业务数据的内存开销,该部分一般作为重点分析对象。

· 非业务数据的内存开销,例如主备复制的积压缓冲区、Redis进程初始化消耗的内存等

MEMORY STATS 各个参数含义,内存数值的单位为字节

1) "peak.allocated"//Redis进程自启动以来消耗内存的峰值。2) (integer) 794923123) "total.allocated"//Redis使用其分配器分配的总字节数,即当前的总内存使用量。4) (integer) 793077765) "startup.allocated"//Redis启动时消耗的初始内存量。6) (integer) 455825927) "replication.backlog"//复制积压缓冲区的大小。8) (integer) 335544329) "clients.slaves"//主从复制中所有从节点的读写缓冲区大小。10) (integer) 1726611) "clients.normal"//除从节点外,所有其他客户端的读写缓冲区大小。12) (integer) 11910213) "aof.buffer"//AOF持久化使用的缓存和AOF重写时产生的缓存。14) (integer) 015) "db.0"//业务数据库的数量。16) 1) "overhead.hashtable.main"//当前数据库的hash链表开销内存总和,即元数据内存。2) (integer) 1443) "overhead.hashtable.expires"//用于存储key的过期时间所消耗的内存。4) (integer) 017) "overhead.total"//数值=startup.allocated+replication.backlog+clients.slaves+clients.normal+aof.buffer+db.X。18) (integer) 7927361619) "keys.count"//当前Redis实例的key总数20) (integer) 221) "keys.bytes-per-key"//当前Redis实例每个key的平均大小,计算公式:(total.allocated-startup.allocated)/keys.count。22) (integer) 1686259223) "dataset.bytes"//纯业务数据占用的内存大小。24) (integer) 3416025) "dataset.percentage"//纯业务数据占用的内存比例,计算公式:dataset.bytes*100/(total.allocated-startup.allocated)。26) "0.1012892946600914"27) "peak.percentage"//当前总内存与历史峰值的比例,计算公式:total.allocated*100/peak.allocated。28) "99.767860412597656"29) "fragmentation"//内存的碎片率。30) "0.45836541056632996"

2、MEMORY USAGE

--执行MEMORY USAGE命令查询指定Key消耗的内存(单位为字节)
MEMORY USAGE
127.0.0.1:6379> MEMORY USAGE kkk
(integer) 47

3、MEMORY DOCTOR

--执行MEMORY DOCTOR命令获取内存诊断建议
MEMORY DOCTOR

MEMORY DOCTOR会从以下维度为Redis实例的提供内存诊断建议,您可以根据诊断建议制定相应的优化

intempty=0; /* Instance is empty or almost empty. */intbig_peak=0; /* Memory peak is much larger than used mem. */inthigh_frag=0; /* High fragmentation. */inthigh_alloc_frag=0;/* High allocator fragmentation. */inthigh_proc_rss=0; /* High process rss overhead. */inthigh_alloc_rss=0; /* High rss overhead. */intbig_slave_buf=0; /* Slave buffers are too big. */intbig_client_buf=0; /* Client buffers are too big. */intmany_scripts=0; /* Script cache has too many scripts. */

4、info

--info 查看简介
info

used_memory:894216 #Redis分配器分配给Redis的内存。例如,当Redis增加了存储数据时,需要的内存直接从分配器分配给它的内存里面取就可以了,也就是直接从used_memory取。而Redis分配器分配给Redis的内存,是从操作系统分配给Redis的内存里面取的(单位是字节)

used_memory_human:873.26K #以人类可读格式显示Redis消耗的内存

used_memory_rss:2691072 #操作系统分配给Redis的内存。也就是Redis占用的内存大小。这个值和top指令输出的RES列结果是一样的。RES列结果就表示Redis进程真正使用的物理内存(单位是字节)

used_memory_peak:914160 #Redis的内存消耗峰值(单位是字节)

used_memory_peak_human:892.73K #以人类可读的格式返回Redis的内存消耗峰值

used_memory_lua:35840 #Lua引擎所使用的内存大小(单位是字节)

mem_fragmentation_ratio:3.01 # used_memory_rss和used_memory之间的比率

mem_allocator:jemalloc-3.6.0 #在编译时指定的,Redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc

 理想情况下,used_memory_rss的值应该只比used_memory稍微高一点。

 rss >used,且两者的值相差较大时,表示存在(内部或者外部的)内存碎片。内存碎片的比率可以通过mem_fragmentation_ratio的值看出;

 used>rss时,表示Redis的部分内存被操作系统换出到交换空间,在这种情况下,操作可能会产生明显的延迟。

used_memory #是你的Redis实例中所有key及其value占用的内存大小;

used_memory_rss #是操作系统实际分配给Redis进程的内存。这个值一般是大于used_memory的,因为Redis的内存分配策略会产生内存碎片。

used_fragmentation_ratio #就是内存碎片的比率,正常情况下是1左右,如果大于1比如1.8说明内存碎片很严重了

相关文章

MySQL运维实战(2.2)忘记密码如何处理

如果忘记了一个普通用户的密码,可以使用管理员账号登录,修改其他用户的密码。但是如果所有管理员账号的密码都忘记了,应该怎么处理呢?如果忘记root密码,可以使用skip-grant-tables参数启动...

spark配置任务日志(Client模式& Cluster模式)

在Spark中,日志级别可以通过log4j.properties或log4j.xml文件来配置。对于spark-submit命令启动的应用程序,可以通过以下两种方式来修改日志级别:对于Client模式...

MongoDB的MMAPv1存储引擎

 在MongoDB 3.0之前,默认存储引擎为MMAPv1。从MongoDB 4.0开始,MMAPv1存储引擎开始被遗弃。MMAPv1是基于内存映射文件的原始存储引擎。一、journal1、将数据写入...

CDH实操--CDH集成flink 1.13.6(二)

CDH实操--CDH集成flink 1.13.6(二)

一、编译flink1、下载flink1.13.6源码包wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.13.6/flink...

podman相关使用

Podman介绍Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进...

SonarQube 代码质量平台

SonarQube 代码质量平台

官网:https://www.sonarqube.org/SonarQube 是一个开源的代码质量管理系统。可以对代码进行自动审查,检测代码中的错误、漏洞和代码味道。它可以与您现有的工作流程集成,以实...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。