注意:關閉主從服務器的防火牆
問題一:
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
解決一:
這個錯誤大概是說somaxconn
的值128
設置過小,從/proc/sys/net/core/somaxconn
這個路徑也可大概知道這個值的設置是關於網絡連接中某個最大值的限定設置,此值表示網絡連接的隊列大小,在配置文件redis.conf
中的“tcp-backlog 511
”就配置在高並發環境下的最大隊列大小,此值受限於系統的somaxconn
與tcp_max_syn_backlog
這兩個值,所以應該把這兩個內核參數值調大,具體解決方法如下:
$ vim /etc/sysctl.conf $ net.core.somaxconn = 20480 #最大隊列長度,應付突發的大並發連接請求,默認為128 $ net.ipv4.tcp_max_syn_backlog = 20480 #半連接隊列長度,此值受限於內存大小,默認為1024 $ sysctl -p #使參數生效
問題二:
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
解決二:
警告:過量使用內存設置為0!在低內存環境下,后台保存可能失敗。為了修正這個問題,
請在/etc/sysctl.conf 添加一項 'vm.overcommit_memory = 1' ,
然后重啟(或者運行命令'sysctl vm.overcommit_memory=1' )使其生效。
vm.overcommit_memory不同的值說明:
0 表示檢查是否有足夠的內存可用,如果是,允許分配;如果內存不夠,拒絕該請求,並返回一個錯誤給應用程序。
1 允許分配超出物理內存加上交換內存的請求
2 內核總是返回true
redis的數據回寫機制分為兩種
同步回寫即SAVE命令。redis主進程直接寫數據到磁盤。當數據量大時,這個命令將阻塞,響應時間長
異步回寫即BGSAVE命令。redis 主進程fork一個子進程,復制主進程的內存並通過子進程回寫數據到磁盤。
由於RDB文件寫的時候fork一個子進程。相當於復制了一個內存鏡像。當時系統的內存是4G,而redis占用了
近3G的內存,因此肯定會報內存無法分配。如果 「vm.overcommit_memory」設置為0,在可用內存不足的情況
下,就無法分配新的內存。如果 「vm.overcommit_memory」設置為1。 那么redis將使用交換內存。
$ vim /etc/sysctl $ vm.overcommit_memory = 1 #末尾追加 $ sysctl -p #參數生效 注:使用交換內存並不是一個完美的方案。最好的辦法是擴大物理內存。
[root@redis ~]# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf [root@redis ~]# sysctl -p
問題三:
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
解決三:
`Transparent Huge Pages (THP)`告警,這是一個關於透明內存巨頁的話題。簡單來說內存可管理的最小
單位是page,一個page通常是4kb,那1M內存就會有256個page,CPU通過內置的內存管理單元管理page表
記錄。Huge Pages就是表示page的大小已超過4kb了,一般是2M到1G,它的出現主要是為了管理超大內存。
個人理解上TB的內存。而THP就是管理Huge Pages的一個抽象層次,根據一些資料顯示THP會導致內存鎖
影響性能,所以一般建議關閉此功能。
“/sys/kernel/mm/transparent_hugepage/enabled”有三個值,如下:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
####
# always 盡量使用透明內存,掃描內存,有512個 4k頁面可以整合,就整合成一個2M的頁面
# never 關閉,不使用透明內存
# madvise 避免改變內存占用
$ vim /etc/rc.local
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled #在開機腳本里追加此命令
問題四:
Error condition on socket for SYNC: Connection refused
解決四:
將redis的主服務器的bind修改為 bind 0.0.0.0,然后重啟服務即可
問題五:
Error reply to PING from master: ‘-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
解決五:
在配置文件修改主服務器的protected_mode設為no,