redis服务器性能优化
1、系统内存OOM优化
Redis会占用非常大内存,所以通常需要关闭系统的OOM,方法为将“/proc/sys/vm/overcommit_memory”的值设置为1(通常不建议设置为2)
也可以使用命令sysctl设置,如:sysctl vm.overcommit_memory=1,但注意一定要同时修改文件/etc/sysctl.conf,执行“sysctl -p”,以便得系统重启后仍然生效。
可选值:0、1、2。
0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存
# cat /proc/sys/vm/overcommit_memory
0
# echo vm.overcommit_memory = 1 >> /etc/sysctl.conf
# sysctl -p
2、关闭透明大页(THP)
透明大页(THP)管理和标准/传统大页(HP)管理都是操作系统为了减少页表转换消耗的资源而发布的新特性。这二者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。有两种关闭方法:
方法1:设置/etc/default/grub文件,在系统启动是禁用。
修改
[root@redis01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@redis01 ~]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
生效
[root@redis01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6fdccda7f03241d0901c5b21f3d96fd9
Found initrd image: /boot/initramfs-0-rescue-6fdccda7f03241d0901c5b21f3d96fd9.img
done
重启后检查
[root@redis01 ~]# reboot
[root@redis01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@redis01 ~]#
方法2:设置/etc/rc.local文件
[root@redis01 ~]# cat /etc/rc.local
### close THP ###
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
[root@redis01 ~]# chmod +x /etc/rc.d/rc.local
[root@redis01 ~]# reboot
[root@redis01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
3、增大TCP队列的值
此参数是指:已完成三次握手的TCP连接队列,默认值511,但是Linux系统内核参数socket最大连接的值默认是128,对应文件/proc/sys/net/core/somaxconn,当系统并发量大且客户端连接缓慢时,应该将两个值进行参考设置。
建议将/proc/sys/net/core/somaxconn的值设置为2048, 如果重启生效,需要在/etc/sysctl.conf中设置: net.core.somaxconn = 2048 执行sysctl -p生效
[root@redis01 ~]# cat /proc/sys/net/core/somaxconn
128
[root@redis01 ~]# echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf
[root@redis01 ~]# sysctl -p
vm.overcommit_memory = 1
net.core.somaxconn = 2048
4、增大linux最大打开文件数
[root@redis01 ~]# cat /etc/security/limits.conf
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
需要重启生效
[root@redis01 ~]# ulimit -n 65535
复制代码