zoukankan      html  css  js  c++  java
  • 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,有强迫症的我感觉世界都清净了

  • 相关阅读:
    安装pip
    Jmeter查看吞吐量
    maven打包为jar文件时,解决scope为system的jar包无法被打包进jar文件的解决方案。
    spring cloud unavailable-replicas
    IDEA实用插件
    spring-mvc项目整合jetty实现单war包自启动webapp
    集成多数据源支持和REDIS后只有一个配置能起作用的处理。
    spring整合redis缓存,以注解(@Cacheable、@CachePut、@CacheEvict)形式使用
    基于spring的aop实现多数据源动态切换
    安装Oracle11gR2先决条件检查失败的详细解决处理过程
  • 原文地址:https://www.cnblogs.com/lovling/p/12532549.html
Copyright © 2011-2022 走看看