hopeless-dream

导航

redis服务器性能优化

1、系统内存OOM优化

 vm.overcommit_memory

 

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 10240
* hard noproc 10240
* soft nofile 65535
* hard nofile 65535 
需要重启生效
[root@redis01 ~]# ulimit -n

 

5、设置密码requirepass和masterauth

requirepass用于客户端连接时的认证,masterauth用于slave向master请求复制数据时的认证。

注意事项:
    (1)密码要复杂
    (2)masterauth不能王姐,且通过明文传输

6、将危险命令使用rename-command设置为空或别名

注意事项:
    (1)此配置不支持config set动态进行。
    (2)config命令本身不建议设置成别名。

 7、使用非root用户启动,使用非默认端口

posted on 2020-02-09 11:49  hopeless-dream  阅读(1009)  评论(0编辑  收藏  举报