Опция shm_size Docker в app.yml

Возможно ли сделать параметр shm_size опцией в app.yml? Сегодня я столкнулся с этой ошибкой при попытке выполнить vacuum analyze:

ERROR: could not resize shared memory segment

Система пыталась увеличить использование разделяемой памяти до 1 ГБ, но не смогла, так как по умолчанию установлено только 512 МБ. Этот параметр, похоже, находится в скрипте запуска, но было бы удобно иметь возможность настраивать его в файле .yml (возможно, закомментированным по умолчанию).

Вы можете передать пользовательские аргументы Docker для переопределения значений по умолчанию, используя --docker-args.

По-моему, это будет выглядеть примерно так: ./launcher start app --docker-args "--shm-size=1024m"

7 лайков

К сожалению, это не сработало при моей попытке. Возможно, контейнер нужно пересобрать, чтобы увеличить размер разделяемой памяти? Мне пришлось изменить значение в зашитых в код участках скрипта запуска, а затем пересобрать контейнер, чтобы изменения действительно вступили в силу.

Скорее всего, это не сохранится после обновлений или пересборки — вам придется вручную менять это каждый раз.

1 лайк

Какие команды вы выполнили? Вам обязательно нужно пересобрать контейнер, чтобы опция --shm-size вступила в силу.

2 лайка

Сначала я просто остановил контейнер, затем запустил команду запуска лаунчера с этим параметром. После этого я вручную отредактировал параметр --shm-size внутри самого скрипта лаунчера и пересобрал контейнер. Тогда значение применилось корректно. Если вы переопределяете параметр в командной строке при пересборке контейнера, не будет ли изменение потеряно, если вы выполните обновление/пересборку через интерфейс /admin/upgrade? Вот почему я подумал, что лучше сделать это полем в app.yml — тогда оно будет сохраняться при пересборках и обновлениях кода.

1 лайк

Хм, вижу, что это может быть полезно. @sam, что ты думаешь об этом?

1 лайк

Однако это не пересобирает контейнер, поэтому это безопасно.

Разве у нас уже нет этого согласно:

docker_args: .... в вашем yaml-файле.

Не уверен. Переписывает ли это сам файл лаунчера? Я вижу три места, где опция прописана жестко:

Тогда нужно это исправить, но исправление представляет собой очень-очень сложный bash-скрипт. Не стесняйтесь попробовать.

Наша функция получения аргументов Docker должна отвечать за shm-size: обрабатывать переопределения пользователя и устанавливать значение по умолчанию.

2 лайка

Привет @Ghan

Пока (для целей тестирования, см. оговорку ниже) вы можете изменить это напрямую через Docker после сборки контейнера следующим образом:

  • Отредактируйте файл /var/lib/docker/containers/$CONTAINER_ID/hostconfig.json напрямую.
  • Например, измените значение ShmSize в файле выше.
  • Остановите и перезапустите контейнер.

В нашем файле hostconfig контейнера Docker это выглядит так:

"ShmSize":536870912,

Надеюсь, это поможет.

Оговорка: Некоторые пользователи писали, что необходимо остановить службу Docker перед изменением hostconfig.json (иначе изменения будут перезаписаны). Однако я сам этого не проверял. Очевидно, что решение через launcher лучше :slight_smile:

Кто знает, какое сейчас решение для увеличения shm_size?

Редактирование: Похоже, это всё ещё зашито в коде.

Соответствующая тема: