Redis使用Swap,但系统可用内存充足

最近生产环境遇到一个很奇怪的问题,系统内存32G,redis使用8G左右,剩余的内存都被系统cache使用,从表面上看系统可用内存有20G左右。但是系统运行过程中,redis时不时会用到swap,而且在AOF重写期间swap使用量更是突增(mem_fragmentation_ratio 值低于1)导致redis性能严重下降。

然后搜索网上的各种资料,调整redis参数,主要做了以下几个部分:

1、调整/ proc/sys/vm/swappiness

2、调整 no-appendfsync-on-rewrite yes,减少AOF重写时的IO争用

3、添加最大内存限制 maxmemory 24gb

4、手动释放cache echo 1 > /proc/sys/vm/drop_caches,释放后系统过一段时间又会占满

以上操作完成后,仍然没有效果。

然后采取临时手段,在备机上将swap分区禁用,暂时解决问题,主机仍然保留现场继续查问题(这期间调整auto-aof-rewrite-percentage 300,减少重写频率)。

最后查看到关于NUMA的资料,结合生成环境系统分析,确认存在内存分配策略问题的这种可能性。

大概的原因如下:

在多核CPU的环境下,numa采用对CPU和内存分组的方式管理资源,每个CPU分组对应1个内存分组,在默认策略情况下,CPU使用自己组内的内存空间,若新进程申请内存时,没有足够的空闲内存,则可能用到swap空间,而不去其他CPU组申请内存。

这里有一个简单的验证方法:

1、手工释放cache echo 1 > /proc/sys/vm/drop_caches

2、numactl –hardware 查看每个CPU分组中空余内存大小是否基本一致,若出现某个组free很小,其他组明显大于该组,则可能是内存策略分配引起的问题。

注意:这里看到的free是不含cache部分占用的内存,所以要先释放一下cache

解决办法:

1、redis AOF重写时不再使用到swap,重写基本在1分钟左右完成(故障期间长达30分钟)

2、sar -b 查看IO,每秒写入量和tps均有明细下降

3、redis内存碎片指数 mem_fragmentation_ratio 一直保持大于1

Original: https://www.cnblogs.com/Before/p/10112272.html
Author: lzc_jack
Title: Redis使用Swap,但系统可用内存充足

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612208/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • LDD3第三章学习笔记

    思维导图 需求 实现一个设备/dev/scull,这个设备能用dd, cp, cat和Shell的IO重定向功能操作。 设备号 Linux用主次两个设备号去唯一的表示一个设备。其中…

    Linux 2023年6月7日
    087
  • Linux基础入门笔记

    Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统,是一…

    Linux 2023年6月14日
    058
  • 杨辉三角的变形—牛客网

    杨辉三角的变形_牛客题霸_牛客网 (nowcoder.com) #include using namespace std; int main() { //这个树的偶数规律为 -1 …

    Linux 2023年6月13日
    0116
  • 005 Linux 命令三剑客之-sed

    grep:数据查找定位 awk:数据切片,数据格式化,功能最复杂 *sed:数据修改 三剑客各有所长,就从锅碗瓢盆一一开始吧! [En] The three swordsmen h…

    Linux 2023年5月27日
    080
  • Postfix发送邮件时报错“libmysqlclient.so.18: cannot open shared object file: No such file or directory”

    在一台Linux服务器上使用postfix发送邮件时遇到上面错误: sendmail.postfix: error while loading shared libraries: …

    Linux 2023年5月27日
    079
  • 【抄】Shell正则表达式

    shell 正则语法基础 copy from: https://man.linuxde.net/docs/shell_regex.html 正则表达式的分类 基本的正则表达式(Ba…

    Linux 2023年5月28日
    096
  • TCP三次握手与四次挥手

    什么是三次握手? 一般情况下,连接是由客户端向服务端发起的。 第一次,客户端发送一个TCP数据报并将SYN同步位置为1,表示要建立连接,此时客户端会从CLOSED状态变为SYN_S…

    Linux 2023年6月8日
    095
  • 性能测试

    一.性能测试概述 性能测试概念: 性能测试是指通过特定方式,对被测系统按照一定策略施加压力,获取系响应时间、TPS、资源利用率等性能指标,以期保证生产系统的性能能够满足用户需求的过…

    Linux 2023年6月6日
    084
  • Bash编程中对字符串的操作

    Bash的字符串操作 String="Hello World" #获取字符串长度,获取字符长度的变量调用应该使用${},这里大括号是必须的 #例1-1 echo…

    Linux 2023年6月13日
    0101
  • Vmware部署Linux无人值守安装Centos7系统

    Linux – 无人值守安装服务 需求分析 – 使用光盘镜像来安装 Linux 系统的方式; 坦白讲, 该方法适用于只安装少量 Linux 系统的情况, 如果生产环境中…

    Linux 2023年6月13日
    0103
  • 【设计模式】Java设计模式-单例模式

    【设计模式】Java设计模式 – 单例模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🌝分享学习心得,欢迎指正,大家一起学习…

    Linux 2023年6月6日
    0137
  • CH343芯片应用—Windows驱动安装与使用

    CH343属于沁恒第三代USB转串口芯片系列的单串口型号,基于经典版CH340芯片完成技术革新,实现USB转高速异步串口,支持最高6Mbps串口波特率。芯片支持使用厂商提供的VCP…

    Linux 2023年6月7日
    090
  • 在linux里部署OA项目环境

    1.首先要实现linux可以从windows系统里把文件拖到linux里 ①挂载光盘 [root@localhost ~]# mkdir /mnt/cdrom //创建挂载点 [r…

    Linux 2023年6月13日
    0114
  • Centos7最小化安装报错There are no enabled repos. Run “yum repolist all” to see the repos you have.解决办法

    原因是缺少CentOS-Base.repo文件,因为我这台机器wget也不能用,所以我是下载到本地sftp上去的,传输的时候一定要在root用户下,否则会无法启动传输 这是报错的完…

    Linux 2023年6月7日
    097
  • 基于LNMP快速简单搭建wordpress平台

    一、WordPress 简介 WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当…

    Linux 2023年6月7日
    095
  • 使用URL快捷方式提高效率

    阅文时长 | 0.9分钟字数统计 | 1453.6字符主要内容 | 1、引言&背景 2、URL格式基本格式介绍 3、附录:Hotkey详细参数 4、拓展:收藏夹中的URL格…

    Linux 2023年6月14日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球