文档详情

Redis 在 Linux 系统的配置优化.docx

发布:2025-05-07约8.42千字共11页下载文档
文本预览下载声明

通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优化,例如AOF和RDB的配置优化、数据结构的配置优化等,但是对于操作系统是否需要针对Redis做一些配置优化不甚了解或者不太关心,然而事实证明一个良好的系统操作配置能够为Redis服务良好运行保驾护航。

众所周知Redis的作者对于Windows操作系统并不感冒,目前大部分公司都会将Web服务器、数据库服务器等部署在Linux操作系统上,Redis也不例外。所以接下来介绍Linux操作系统如何优化Redis,包含如下七个方面。

一.内存分配控制

1.vm.overcommit_memory

Redis在启动时可能会出现这样的日志:

#?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?Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多的程序。因为申请内存后,并不会马上使用内存,这种技术叫做overcommit。如果Redis在启动时有上面的日志,说明vm.overcommit_memory=0,Redis提示把它设置为1。

vm.overcommit_memory用来设置内存分配策略,它有三个可选值,如下表所示。

vm.overcommit_memory

含义

0

表示内核将检查是否有足够的可用内存。如果有足够的可用内存,内存申请通过,否则内存申请失败,并把错误返回给应用进程

1

表示内核允许超量使用内存直到用完为止

2

表示内核决不过量的(neverovercommit)使用内存,即系统整个内存地址空间不能超过swap+50%的RAM值,50%是overcommit_ratio默认值,此参数同样支持修改

注意:本文的可用内存代表物理内存与swap之和。

日志中的Backgroundsave代表的是bgsave和bgrewriteaof,如果当前可用内存不足,操作系统应该如何处理fork。如果vm.overcommit_memory=0,代表如果没有可用内存,就申请内存失败,对应到Redis就是fork执行失败,在Redis的日志会出现:

Cannot?allocate?memory?

Redis建议把这个值设置为1,是为了让fork能够在低内存下也执行成功。

2.获取和设置

获取:

cat?/proc/sys/vm/overcommit_memory

0

设置:

echo?vm.overcommit_memory=1??/etc/sysctl.conf

sysctl?vm.overcommit_memory=1

3.最佳实践

Redis设置合理的maxmemory,保证机器有20%~30%的闲置内存。

集中化管理aof重写和rdb的bgsave。

设置vm.overcommit_memory=1,防止极端情况下,会造成fork失败。

二.swappiness

1.参数说明

swap对于操作系统来比较重要,当物理内存不足时,可以swapout一部分内存页,以解燃眉之急。但世界上没有免费午餐,swap空间由硬盘提供,对于需要高并发、高吞吐的应用来说,磁盘IO通常会成为系统瓶颈。在Linux中,并不是要等到所有物理内存都使用完才会使用到swap,系统参数swppiness会决定操作系统使用swap的倾向程度。swappiness的取值范围是0~100,swappiness的值越大,说明操作系统可能使用swap的概率越高,swappiness值越低,表示操作系统更加倾向于使用物理内存。swap的默认值是60,了解这个值的含义后,有利于Redis的性能优化。下表对swappiness的重要值进行了说明。

swapniess

策略

0

Linux3.5以及以上:宁愿OOMkiller也不用swap

Linux3.4以及更早:宁愿swap也不要OOMkiller

1

Linux3.5以及以上:宁愿swap也不要OOMkiller

60

默认值

100

操作系统会主动地使用swap

运维提示:OOM(OutOfMemory)killer机制是指Linux操作系统发现可用内存不足时,强制杀死一些用户进程(非内核进程),来保证

显示全部
相似文档