Skip to content

Увеличение shared memory для контейнера СУБД-КС

Увеличение в Docker

При недостаточной величине размера «shared memory» возможны ошибки следующего содержания:

... could not resize shared memory segment "/PostgreSQL.1585716443..

Решение: переопределить параметр "ShmSize"/"shmSize" для текущего контейнера в файле конфигурации /var/lib/docker/containers/.../hostconfig.json - для ПО контейнеризации Docker.

При редактировании значения параметра, будьте внимательны (сделайте копию), так как при нарушении формата json контейнер может не запуститься. Значение параметра указывается в байтах.

256 МБ = 25610241024 = 268435456

512 МБ = 51210241024 = 536870912

1024 МБ (1 Гб) = 102410241024 = 1073741824

2048 МБ (2 Гб) = 204810241024 = 2147483648

4096 МБ (4 Гб) = 409610241024 = 4294967296

Для развернутого инстанса СУБД pgsqlks-15.13 порт 5434, контейнер которого создан с параметром -shm=1024 MB, необходимо увеличить этот параметр до 2048 MB.

  1. Определите размещение hostconfig.json для pgsqlks-15.13_5434 (измените первую строку!), и сделайте его копию в каталог /tmp. Затем остановите СУБД-КС и ПО контейнеризации docker.
bash
cont_name="pgsqlks-15.13_5434"
cont_id="$(docker inspect --format "{{lower .Id}}" ${cont_name})"
TMPDIR=`mktemp -d /tmp/ksdocker.XXXXXXXXXX`
cp "/var/lib/docker/containers/${cont_id}/hostconfig.json" "/${TMPDIR}"

systemctl stop ${cont_name}
systemctl stop docker
  1. Отредактируйте файл конфигурации hostconfig.json , а именно замените значение "ShmSize":1073741824 на "ShmSize":2147483648.
bash
nano "/var/lib/docker/containers/${cont_id}/hostconfig.json"
  1. Запустите Docker и затем СУБД-КС/
bash
systemctl start docker.service
systemctl start ${cont_name}

Временное, быстрое решение

Расширить раздел /dev/shm для текущего контейнера без его перезапуска. После перезапуска СУБД-КС значение вернется на то, которое было указано при создании контейнера.

Пример: Для развернутого инстанса СУБД pgsqlks-15.13 порт 5434, контейнер которого создан с параметром -shm=1 GB, необходимо увеличить этот параметр до 2GB.

bash
docker exec -ti pgsqlks-15.13_5434 bash -c "mount -o remount,size=2g -t shm /dev/shm"
docker exec -ti pgsqlks-15.13_5434 bash -c "df -h"

Увеличение в Podman

При недостаточной величине размера "shared memory" возможны ошибки следующего содержания:

... could not resize shared memory segment "/PostgreSQL.1585716443..

Решение: переопределить параметр "ShmSize"/"shmSize" для текущего контейнера в базе конфигурации BoldDB для ПО контейнеризации Podman. Метод тестировался на «podman version 4.3.1».

При редактировании значения параметра, будьте внимательны (сделайте копию), так как при нарушении формата json контейнер может не запуститься. Значение параметра указывается в байтах.

256 МБ = 25610241024 = 268435456

512 МБ = 51210241024 = 536870912

1024 МБ (1 Гб) = 102410241024 = 1073741824

2048 МБ (2 Гб) = 204810241024 = 2147483648

4096 МБ (4 Гб) = 409610241024 = 4294967296

Пример: Для развернутого инстанса СУБД pgsqlks-15.13 порт 5434 контейнер которого создан с параметром -shm=1024 MB, необходимо увеличить этот параметр до 2048 MB.

Изменение размера раздела /dev/shm без пересоздания контейнера возможно правкой базы BoldDB, которая располагается в /var/lib/containers/storage/libpod/bolt_state.db.

  1. Определите id и текущий размер ShmSize контейнера pgsqlks-15.13_5434 (измените первую строку!).
bash
cont_name="pgsqlks-15.13_5434"
echo "id контейнера: $(podman inspect --format "{{.Id}}" ${cont_name})"
echo "ShmSize контейнера: $(podman inspect --format "{{.HostConfig.ShmSize}}" ${cont_name})"
  1. Сделайте копию bolt_state.db во временный каталог.
bash
TMPDIR=`mktemp -d /tmp/kspodman.XXXXXXXXXX`
cp "/var/lib/containers/storage/libpod/bolt_state.db" "/${TMPDIR}"
  1. Скачайте boltbrowser, и откройте им базу /var/lib/containers/storage/libpod/bolt_state.db на редактирование.
bash
wget -O /opt/boltbrowser.linux64 https://keysystems.ru/files/web/Scripts/PG/boltbrowser.linux64 --no-check-certificate
chown root:root /opt/boltbrowser.linux64
chmod 770 /opt/boltbrowser.linux64
/opt/boltbrowser.linux64 /var/lib/containers/storage/libpod/bolt_state.db
  1. Откройте ветку ctr-<id-сконтейнера>-config, нажмите "e-редактирование" , затем найдите и измените значение shmSize.

Выйдите из менеджера boltbrowser нажав "q-выход".

boltbrowser

  1. Перезапустите СУБД-КС.
bash
systemctl restart ${cont_name}

Временное, быстрое решение

Расширить раздел /dev/shm для текущего контейнера без его перезапуска. После перезапуска СУБД-КС значение вернется на то, которое было указано при создании контейнера.

Пример: Для развернутого инстанса СУБД pgsqlks-15.8 порт 5434, контейнер которого создан с параметром -shm=1 GB, необходимо увеличить этот параметр до 2GB.

bash
podman exec -ti pgsqlks-15.8_5434 bash -c "mount -o remount,size=2g -t shm /dev/shm"
podman exec -ti pgsqlks-15.8_5434 bash -c "df -h"

© 2003—2026 ООО «Кейсистемс». Все права защищены.