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命令本身不建議設置成別名。