redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)


redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)

fork耗时导致高并发请求延时

  • 产生原因

在 生成 rdb 文件和 aof 重写的时候,主进程 会 fork 子进程,而 fork 的时候,子进程需要拷贝父进程的空间内存页表,会耗费一定的时间。

一般来说,如果父进程内存有 1 个 G 的数据,那 fork 可能会耗费在 20ms 左右,如果是 10G~30G,那么就会耗费 20 * 10,甚至20 * 30,也就是几百毫秒的时间(info stats 中的 latest_fork_usec,可以看到最近一次 fork 的时长)。

在这里插入图片描述

redis 单机 qps 一般在几万,fork 可能一下子就会拖慢几万条操作的请求时长,从几毫秒变成 1 秒。

  • 优化思路

fork 耗时跟 redis 主进程的内存有关系,一般控制 redis 的内存在 10GB 以内。

AOF的阻塞问题

  • 产生原因

redis 将数据写入 AOF 缓冲区,单独开一个线程做 fsync 操作,每秒一次。另外,redis 主线程会检查两次 fsync 的时间,如果距离上次 fsync 时间超过了 2 秒,那么写请求就会阻塞,整个 redis 就被拖慢,最多会丢失 2 秒的数据。

  • 优化思路

优化硬盘写入速度,建议采用 SSD,不要用普通的机械硬盘。

主从复制延迟问题

主从复制可能会超时严重,这个时候需要良好的监控和报警机制。在 info replication 中,可以看到 master 和 slave 复制的 offset,写一个脚本监控对应的延迟量,如果延迟过多,那么就进行报警。

在这里插入图片描述

主从复制风暴问题

  • 产生原因

如果同时让多个 slave 从 master 去执行全量复制,一份大的 rdb 文件同时发送到多个 slave,会导致网络带宽被严重占用。

  • 优化思路

如果一个 master 真的要挂载多个 slave,那尽量用树状结构,不要用星型结构。

vm.overcommit_memory

  • 产生原因

0:检查有没有足够内存,没有的话申请内存失败
1:允许使用内存直到用完为止
2:内存地址空间不能超过 swap + 50%

如果是 0 的话,可能导致类似 fork 等操作执行失败,申请不到足够的内存空间。

  • 解决思路
cat /proc/sys/vm/overcommit_memory
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

redis 实例启动日志中能看到有关 vm.overcommit_memory 的提示内容

在这里插入图片描述

swapiness

  • 产生原因

使用命令 cat /proc/version 查看 linux 内核版本

如果 linux 内核版本 <3.5,那么 swapiness 设置为 0,表明系统宁愿 swap 也不会 oom killer(杀掉进程);
如果 linux 内核版本 >=3.5,那么 swapiness 设置为 1,表明系统宁愿 swap 也不会 oom killer。
  • 解决思路

保证 redis 不会被杀掉

echo 0 > /proc/sys/vm/swappiness
echo vm.swapiness=0 >> /etc/sysctl.conf

最大打开文件句柄

redis 实例启动日志中能看到有关最大打开文件句柄的提示内容

在这里插入图片描述

通过命令 ulimit -n 10032 10032 可按提示要求设置最大打开文件句柄。

tcp backlog

redis 实例启动日志中能看到有关 tcp backlog 的提示内容

在这里插入图片描述

通过命令 echo 511 > /proc/sys/net/core/somaxconn 可按提示要求设置 tcp backlog。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久违の欢喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值