redis 告警参数优化

redis 告警参数优化

针对redis服务器TCP backlog、overcommit_memory、THP三个参数优化的说明

操作系统:CentOS Linux release 7.6.1810 (Core)

一、TCP backlog

1、告警信息
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

这句话的翻译大概就是:对一个高负载的环境来说tcp设置128这个值

2、参数解释

对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接。当三次握手成功后,我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了。每一个处于监听(Listen)状态的端口,都有自己的监听队列,监听队列的长度。

somaxconn定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128

3、修改overcommit_memory的值
  • 设置somaxconn的值为512(系统重启后失效)
echo 1024 > /proc/sys/net/core/somaxconn
  • 永久生效修改方式

进入/etc/sysctl.conf文件中,添加net.core.somaxconn = 1024,重启之后,警告就会消失;该方法的优点是无论以后如何重启redis服务都不会再报该错误,缺点是不能立即生效,必须重启redis服务。

执行“sysctl -p”生效

二、overcommit_memory

1、告警信息
 WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect

这个警告的意思是:

overcommit_memory设置为0!后台保存可能在低内存条件下失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”,以使其生效。

2、参数解释

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

  • 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

  • 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

  • 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

3、修改overcommit_memory的值
  • 直接设置overcommit_memory的值为1(直接生效,不用重启redis)
echo 1 > /proc/sys/vm/overcommit_memory
  • 进入/etc/sysctl.conf文件中,添加vm.overcommit_memory=1,重启之后,警告就会消失;该方法的优点是无论以后如何重启redis服务都不会再报该错误,缺点是不能立即生效,必须重启redis服务。

    执行“sysctl -p”生效

三、THP

1、告警信息
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

这个警告的意思是:

你使用的是透明大页,可能导致redis延迟和内存使用问题。执行echo never > /sys/kernel/mm/transparent_hugepage/enabled修复该问题。

2、参数解释

Linux kernel在2.6.38内核增加了THP特性,支持大内存页(2MB)分配,默认开启。当开启时可以加快fork子进程的速度,但fork操作之后,每个内存也由原来的4KB变为2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询,例如简单的incr命令也会出现在慢查询中。因此redis日志中建议将此特性进行禁用

3、修改THP
  • 直接设置transparent_hugepage/enabled的值为never(直接生效,不用重启redis)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • 永久生效修改方式

    在/etc/rc.local中追加 echo never > /sys/kernel/mm/transparent_hugepage/enabled。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值