redis性能优化

redis性能优化

一、 LimintNOFILE

简单描述 :LimitNOFILE 决定了 redis 允许最大客户端连接,用于提供并发能力

如何设置 :
在 redis 的system 管理脚本 中 ,[server] 模块 添加参数

vim /usr/lib/systemd/system/redis.service
[service]
LimitNOFILE=65536

.
深入理解:
①较高的文件描述符限制可以允许 Redis 处理更多的客户端连接,从而提高其并发处理能力。
②对于高负载的应用场景,较高的文件描述符限制有助于避免因文件描述符耗尽而出现的问题。
③ 如果文件描述符的数量达到了系统的默认限制,Redis 可能会无法接受新的客户端连接,导致服务不可用。
④ 但是LimitNOFILE 也要 和 服务器的性能相匹配,不能买一个2GB 内存的服务器, 我干一个 65535 个LimitNOFILE

二、vm.overcommit_memory

.
简单描述 : 控制内核给进程分配内存空间 ;关闭日志中虚拟内存相关警告,

.
如何设置 :

vim /etc/sysctl.conf
vm.overcommit_memory=0
# 让 更改生效
sysctl -p

# 验证设置是否正确应用:
sysctl vm.overcommit_memory

.
深入理解:
①理解Linux 如何给进程分配内存空间
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最高)。

② vm.overcommit_memory设置为多少?
vm.overcommit_memory这是一个内核参数,用于控制进程分配内存时的行为。它有三个可能的值:

  • 0:默认值,内核会根据可用内存和其他因素决定是否允许进程分配超过物理内存的内存空间。
  • 1:内核总是允许进程分配超过物理内存的内存空间。
  • 2:内核不允许进程分配超过物理内存的内存空间

在实际生产环境中,通常推荐保持默认值 0。这是因为大多数情况下,按需分配内存是一个更安全的选择,可以避免不必要的内存预分配,减少对系统的压力。如果预先分配全部内存,可能会导致其他服务无法获取足够的内存资源,从而影响整体系统的稳定性。


因为 Redis 通常会预分配大量内存,尤其是当你使用 maxmemory 设置了内存限制时。如果不设置这个参数,Redis 在启动时可能会因为内存不足而失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值