注意:關閉主從服務器的防火牆redis
問題一:vim
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.socket
解決二:tcp
警告:過量使用內存設置爲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,