dcoekr 启动 redis 三个警告的解决办法

1,警告的内容和大概意思

1,关于 TCP 连接数

  1. 内容:WARNING: The TCP backlog setting of 511 cannot be enforced because
    /proc/sys/net/core/somaxconn is set to the lower value of 128
  2. 意思:大概就是 tcp 连接数设置为 128 太小了

2,关于 overcommit_memory 的值设置

  1. 内容: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
  2. 意思:大概是 overcommit_memory 的值设置为0时 在低内存条件下,后台保存可能会失败

3,关于 THP 支持

  1. 内容: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
  2. 意思:大概是内核中启用了透明大页面(THP)支持。 这将导致Redis的延迟和内存使用问题

2,解决的方法

1,修改配置文件 vim /etc/sysctl.conf, 写入下面两个内容(注意是宿主机)

net.core.somaxconn=551   # 这里的数据根据生产的需要和电脑的性能进行调整 必须 大于等于 551
vm.overcommit_memory=1   

2,保存之后执行 sysctl -p 使得修改生效

3,修改配置文件 vim /etc/rc.local,写入下面的内容

echo never > /sys/kernel/mm/transparent_hugepage/enabled

4,保存之后,赋予文件执行权限,并使得配置生效

chmod +x /etc/rc.local
source /etc/rc.local

3,重新启动一个 docker 容器

1,笔者这边采用 docker-compose 的方式启动,docker-compose.yml 配置文件如下

version: '3.1'
services:

  master:
    image: redis
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - ./redis.conf:/etc/redis.conf
      - ./data:/data
    command: redis-server /etc/redis.conf

2,查看日志文件发现 后面的两个警告都没了,但是第一个警告还存在,我们进入 docker 容器查看原因

docker exec -it redis bash
cat /proc/sys/net/core/somaxconn 

3,我们发现容器的这个值还是 128,也就是说修改宿主机并没有同步改变容器的这个值

4,由于 /proc/sys/net/core/somaxconn 这个文件是只读的,笔者这边选择使用特权容器强行修改该值,修改 docker-compose.yml 如下

version: '3.1'
services:

  master:
    image: redis
    container_name: redis
    privileged: true  # 启动特权模式
    ports:
      - 6379:6379
    volumes:
      - ./redis.conf:/etc/redis.conf
      - ./data:/data
    command:          # 多个命令同时执行
      - /bin/bash 
      - -c 
      - |                 
        echo 551 > /proc/sys/net/core/somaxconn
        redis-server /etc/redis.conf

5,删除日志文件,重启 docker 容器

docker-compose down
docker-compose up -d

6,我们在去看启动之后的日志文件,没有 waring,没有 error,有强迫症的我感觉世界都清净了

原文地址:https://www.cnblogs.com/lovling/p/12532549.html