redis内存管理

佐手、 提交于 2020-04-17 08:16:55

【推荐阅读】微服务还能火多久?>>>

目录

 

一、内存统计

二、内存划分

三、内存消耗

 

四、缓冲内存

          普通客户端缓冲区

          slave客户端缓冲区

  pubsub客户端缓冲区


一、内存统计

可以在 lua中自定义命令。

# Memory
used_memory:33805895736
used_memory_human:31.48G
used_memory_rss:42316582912
used_memory_rss_human:39.41G
used_memory_peak:44346475840
used_memory_peak_human:41.30G
total_system_memory:338519248896
total_system_memory_human:315.27G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:200000000000
maxmemory_human:186.26G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.25
mem_allocator:jemalloc-4.0.3

二、内存划分

内存碎片是操作系统分配给的内存和实际使用的内存的差值。

例如 存了一个string类型的key。

第一次set一个key value为5byte,第二次set 的value为10byte。当再次set 一个5byte的value时,是会分配给10byte,这是由于redis SDS数据结构的特性决定的。总之申请的可能比使用的多一点。

三、内存消耗

 

缓冲区内存主要是在redis-cli 执行命令所需要的内存,占用比最大的还是对象内存,其大小取决于数据规模。

四、缓冲内存

输出缓冲区配置

     

          普通客户端缓冲区

查看客户端缓冲区

127.0.0.1:6379> client list
id=178784 addr=127.0.0.1:55911 fd=62 name= age=2422 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

其中有几个关键  qbuf=0 qbuf-free=32768 缓冲区参数,输出缓冲区的大小obl=0 oll=0,omem是输出缓冲区的内存。

查看输出缓冲区内存不为0的session

redis-cli -p 6379 client list|grep -v "omem=0"

  slave客户端缓冲区

主要作用就是同步主节点的写操作,或者是主从同步。

 


对slave缓冲区客户端的这个参数就比较记忆犹新了。因为之前主从同步的时候老是会出现TIMEOUT。

之前百思不得其解,维护人员也说不清楚何因?

主从复制一般涉及到两个变量:

1、codis-server/redis默认配置中repl-timeout的时间为60s,当复制数据的时间超过60s时,codis-server/redis master就会认为连接超时主动断开连接,也就是Connection with master lost报错。

2、复制数据占用服务器资源的大小client-output-buffer-limit参数就决定了客户端输出缓冲区内存使用量,默认client-output-buffer-limit slave 256mb 64mb 60

127.0.0.1:6379> config get client-output-buffer-limit
1) "client-output-buffer-limit"
2) "normal 0 0 0 slave 1073741824 268435456 120 pubsub 536870912 134217728 60"
127.0.0.1:6379> 

可以看到slave缓冲区的hard limit设定为1024MB,soft limit设定为256MB,softsecond设定为120s,之后同步的时候就很少有timeout的情况,因为之前的设定是默认的。

127.0.0.1:6379> config set client-output-buffer-limit "slave 536870912 134217728 120"

该参数调整使得主从同步变快了,但是当数据同步完成后最好将配置修改为原配置,避免占用服务器资源过高引起其他问题。

这次redis 内存居高不下 我想和调整这个参数可能有关系。

参考:https://baijiahao.baidu.com/s?id=1604054459547563109&wfr=spider&for=pc 

输入缓冲区 (发送命令)

    pubsub客户端缓冲区

发布订阅并暂时并未涉及。暂时不谈。

 

当输入缓冲区大于1G时一般会把session干掉,一般不会有问题。

 

 

发布了180 篇原创文章 · 获赞 55 · 访问量 13万+
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!