美文网首页
redis的内存占用过高问题

redis的内存占用过高问题

作者: 生不悔改 | 来源:发表于2023-07-02 14:48 被阅读0次

起因

最近用于做日志消息队列的redis,突然挂了,也不能说是挂了,但是就是redis不起作用了,写入无法写入,读取无法读取,但是redis还是运行着的。就像突然罢工一样。打开日志:


image.png

当时登录redis所在的服务器,发现redis占用的内存已经有5个G了,就这样僵住了。后面我尝试重启redis,redis打出的日志是:


image.png
然后redis就卡在这卡住了,我观察日志,发现redis提示vm的一个参数overcommit_memory现在的值是0,需要设置成1。
后面上网查询资料得:

参数overcommit_memory的三种取值:
0 – Heuristic overcommit handling. 缺省值,它允许overcommit,但过于明目张胆的overcommit会被拒绝,比如malloc一次性申请的内存大小就超过了系统总内存。Heuristic的意思是“试探式的”,内核利用某种算法猜测你的内存申请是否合理,它认为不合理就会拒绝overcommit。
1 – Always overcommit. 允许overcommit,对内存申请来者不拒。
2 – Don’t overcommit. 禁止overcommit。

如果设置为0,申请的内存无法满足时(根据内部算法),则会触发OOM。
如果设置为1,申请的内存无法满足时(根据内部算法),部分会触发OOM,部分触发重启。
如果设置为2,申请的内存无法满足时,则禁止分配。那阈值是多少,由内部算法决定。它是通过内核参数vm.overcommit_ratio或vm.overcommit_kbytes间接设置的,公式如下:
【CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap】
overcommit_ratio默认为50,如有特殊需求,可以自己修改。

解决

1.修改参数overcommit_memory方法:

1、编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
2、sysctl vm.overcommit_memory=1
3、echo 1 > /proc/sys/vm/overcommit_memory

2.增加redis的消息消费,尽量避免redis的消息积压

后面我了解到,公司内部接入到我自己部署的这套分布式日志系统的系统太多,导致日志产生的速度太快,而我在plumelog服务端配置的消费日志消息是每秒钟消费2000条,这个消费的速度明显太慢,最后为了避免redis的消费积压,我将plumelog服务端配置的消费日志消息是每秒钟消费10000条,然后观察中发现,redis的内存慢慢降下来了,整个分布式日志服务系统又恢复了。

相关文章

  • Redis 配置过期自动删除策略

    Redis操作是基于内存的,大小有限。当内存不足或占用过高时,需要自动放弃一些未到期的数据Redis 默认 的生效...

  • redis内存优化的探索和实践

    1,redis如何管理内存结构 redis内存模型: 【used_memory】:Redis内存占用中最主要的部分...

  • 【实践】golang pprof 实战-CPU,heap,all

    目录 前言实验准备获取“炸弹”使用 pprof排查 CPU 占用过高排查内存占用过高排查频繁内存回收排查协程泄露排...

  • 记一次windows服务器的问题处理

    服务器是要讲内存的规划的,如果规划的不合理就会有诸如cpu过高,内存占用过高的问题。我们线上有一台机器,内存8G,...

  • 内存泄露和内存优化

    内存泄露和内存优化 对于Android来说,每一个APP的内存是有限的。你过你的内存出现问题:泄露,长期占用过高,...

  • Redis 内存

    Redis 占用内存的大小 使用 redis-cli 登录到 Redis Server,执行 info 命令, ...

  • linux 内存cache的释放

    线上服务器出现了, 内存占用过高, 导致服务器卡顿的情况。 出现问题时的内存占用情况如下图: 通过上图可以看到, ...

  • 如何查看redis占用内存大小

    如何查看redis占用内存大小 redis缓存固然高效,可是它会占用我们系统中宝贵的内存资源,特别是当我们的项目运...

  • 内存占用率高问题排查

    1、内存过高的原因 1、造成服务器内存占用过高只有两种情况:内存溢出或内存泄漏 (1)内存溢出:程序分配的内存超出...

  • iOS 内存占用情况探究 - Flutter

    探究目的: Flutter Module 与iOS混合开发目前最棘手的问题就是Flutter占用内存过高的情况,在...

网友评论

      本文标题:redis的内存占用过高问题

      本文链接:https://www.haomeiwen.com/subject/ulyfudtx.html