Как исправить предупреждение «Redis должен быть перезапущен после отключения THP» в Windows 10? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть файл docker-compose.yml.Когда я запускаю это, я получаю предупреждение «Redis должен быть перезапущен после отключения THP».

Ниже мой docker-compose.yml:

version: '3'
services:
  myapp:
    # container_name: myapp
    restart: always
    build: .
    ports:
      - '52000:52000'
      # - '8080:8080'
    #   - '4300:4300'
    #   - '4301:4301'
    command: ["./wait-for-it.sh", "redis:6379", "--", "npm", "start"]
    links:
      - redis
      - mongo
  mongo:
    # container_name: myapp-mongo
    image: 'mongo:latest'
    ports:
      - '28107:28107'
      # - '27017:27017'
  redis:
    # container_name: myapp-redis
    # restart: always
    image: 'redis:4.0.11'
    # command: ["redis-server", "--appendonly", "yes"]
    ports:
      - '6379:6379'

Ниже мои журналы:

redis_1  | 1:C 24 Sep 10:21:09.224 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 24 Sep 10:21:09.236 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 24 Sep 10:21:09.236 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1  | 1:M 24 Sep 10:21:09.239 * Running mode=standalone, port=6379.
redis_1  | 1:M 24 Sep 10:21:09.239 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1  | 1:M 24 Sep 10:21:09.239 # Server initialized
mongo_1  | 2019-09-24T10:21:10.304+0000 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
redis_1  | 1:M 24 Sep 10:21:09.239 # 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.
redis_1  | 1:M 24 Sep 10:21:09.239 * Ready to accept connections

1 Ответ

1 голос
/ 25 сентября 2019

# ВНИМАНИЕ: в вашем ядре включена поддержка прозрачных огромных страниц (THP).Это создаст проблемы с задержкой и использованием памяти в Redis.Чтобы устранить эту проблему, выполните команду 'echo never> / sys / kernel / mm / transparent_hugepage / enabled' от имени пользователя root и добавьте ее в свой файл /etc/rc.local, чтобы сохранить настройку после перезагрузки.Redis должен быть перезапущен после отключения THP.

Из-за ошибки вы можете использовать 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' на хосте докера, чтобы решить вашу проблему.

Но я знаю, что вы в Windows &не может получить доступ к hyper-v MobyLinuxVM, поэтому вы должны использовать обходной путь следующим образом:

docker-compose.yaml:

version: '3'
services:
  redis:
    image: 'redis:4.0.11'
    ports:
      - '6379:6379'
    depends_on:
      - helper
    sysctls:
      - net.core.somaxconn=511
  helper:
    image: alpine
    command: sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
    privileged: true

Выше сначала будет запущен вспомогательный контейнер, которыйустановит never для /sys/kernel/mm/transparent_hugepage/enabled, так как все контейнеры будут использовать одно и то же ядро ​​хоста, так что ваш контейнер redis, запускаемый позже, также выиграет от этого, см. следующий журнал выполнения:

PS E:\abc> docker-compose up
Starting abc_helper_1 ... done
Recreating 29ea8bfaeafc_abc_redis_1 ... done
Attaching to abc_helper_1, abc_redis_1
redis_1   | 1:C 25 Sep 15:38:17.822 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1   | 1:C 25 Sep 15:38:17.822 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1   | 1:C 25 Sep 15:38:17.822 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1   | 1:M 25 Sep 15:38:17.822 * Running mode=standalone, port=6379.
redis_1   | 1:M 25 Sep 15:38:17.823 # Server initialized
redis_1   | 1:M 25 Sep 15:38:17.823 * DB loaded from disk: 0.000 seconds
redis_1   | 1:M 25 Sep 15:38:17.823 * Ready to accept connections
...