1.系统内存OOM优化:
echo vm.overcommit_memory = 1 >> /etc/sysctl.conf
sysctl -p
表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2.关闭透明大页(THP)
[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"
生效:grub2-mkconfig -o /boot/grub2/grub.cfg
重启服务器reboot
3. redis是单线程,增大内存即可
4.增大TCP队列的值
echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf
5.增大linux最大打开文件数
6.测试结果(100个并发连接 100000请求set)优化前用时29秒,优化后15秒
redis-benchmark -h 192.168.88.51 -p 8472 -c 100 -n 100000
7.maxmemory=3/4的物理内存
8.交换空间:当一些内存 page 被存储在交换空间文件上,而 Redis 又要请求那些数据,那么操作系统会阻塞 Redis 进程,然后把想要的 page,从交换空间中拿出来,放进内存。这其中涉及整个进程的阻塞,所以可能会造成延时问题,一个解决方法是禁止使用交换空间(Redis Essentials 中如是建议,如果内存空间不足,请用别的方法处理)。