安裝完後第一次啟動算正常,但當檢查啟動記錄( /var/log/redis/redis-server.log )時有看到以下的警告
# Server initialized# 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.# 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.* Ready to accept connections
這兩個警告 redis-server 都有提供解法,所以就照說明來進行即可
- 將 vm.overcommit_memory = 1 寫到 /etc/sysctl.conf 的檔尾
- 記得要用 root 身份或 sudo
- echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 可直接下命令執行
- 記得要用 root 身份
- 不過…此法在重開機後都必須執行一次,因為 /sys/kernel 下的設定似乎是算系統初始使用,所以每一次啟動時就會蓋過
- 依提示說可以將命令寫在 /etc/rc.local 使其每次啟動時都能使其 never
- 這個似乎在其他 linux 系統上是可以,但 Ubuntu 在某版後已經沒使用 rc.local
- 網路上是有很多方式都是說可以自己建立 rc.local.service,例如: https://askubuntu.com/questions/1075039/how-do-i-make-sys-kernel-mm-transparent-hugepage-defrag-never-status-to-close
- 不過在下自己是使用 sysfsutils 的方式來統一系統參數,以下是使用步驟
- sudo apt install sysfsutils
- sudo nano /etc/sysfs.conf
- "kernel/mm/transparent_hugepage/enabled = never" 寫在 sysfs.conf 的檔尾
事後註記:vm.overcommit_memory 不確定是不是使用 redis 時一定會發生,或者比較容易發生在虛擬系統上,在下是在 docker 和 amazon ec2 上都遇到,印象中使用 mongodb 時也會有此狀況…另外有關 sysfsutils 的方式個人覺得比較乾淨一點,主要是因為這是由套件處理,而且可以在此套件進行系統層級的環境變數統一,如果有一些設定是比較需要全域等級的,用 sysfsutils 應該比較 ok,而自己寫 rc.local.service 就要留意一下,rc.local.service 必須比 redis-server.service 還要優先被啟動,不然值還沒修改,redis 仍會警告
沒有留言:
張貼留言