一、系统配置
1.1、ulimit
对Linux操作系统来说,每一个Redis客户端连接,都会消耗一个文件描述符,系统默认的open files是1024,而Redis默认配置“maxclients”允许最大10000个客户端连接,在Redis内部最多会使用32个文件句柄,所以Redis建议将open files的值设置为10032个:
# 临时设置:
# ulimit -Sn 10032
1.2、TCP backlog
TCP backlog是已连接但未进行accept处理的SOCKET队列大小。Redis的默认值是511,而Linux系统的默认值只有128:
# 临时修改:
# echo 511 > /proc/sys/net/core/somaxconn
# 永久修改:
# echo "net.core.somaxconn = 511" >> /etc/sysctl.conf
# sysctl -p
1.3、overcommit_memory
overcommit_memory是系统的内存分配策略,默认值是0,即在有足够的可用内存时,内存申请通过,否则申请失败。这在低可用内存环境下可能导致BGSAVE
或BGREWRITEAOF
失败,所以Redis建议将该值设置为1,即允许超量使用内存直到用完为止:
# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
# sysctl -p
1.4、swappiness
当物理内存不足时,可以临时使用由硬盘提供的swap分区。对于高吞吐、高并发的Redis来说,磁盘IO将会成为系统瓶颈,所以将swappiness设置为0,即使OOM killer也不使用swap:
# 临时设置:
# echo 0 > /proc/sys/vm/swappiness
# 永久设置:
# echo "vm.swappiness = 0" >> /etc/sysctl.conf
# sysctl -p
1.5、THP
为了给需要获得大量内存的应用程序快速分配内存,Linux内核增加了THP(大页内存)特性,支持2MB大页内存分配。这将会导致Redis重写期间消耗更多内存,Redis建议禁用此特性:
# 临时设置:
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
二、Redis配置项
2.1、通用配置
配置项 | 说明 | 默认值 | 可选值 |
---|---|---|---|
bind | Redis运行绑定的地址 | 127.0.0.1 | IP地址 |
port | Redis监听的TCP端口号。设置为0时,不监听TCP端口 | 6379 | 0-65535 |
unixsocket | 监听的unix套接字 | 空 | 自定义的套接字文件 |
unixsocketperm | 套接字文件的权限 | 700 | Linux文 |