Увеличение 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.8 порт 5434, контейнер которого создан с параметром -shm=1024 MB
, необходимо увеличить этот параметр до 2048 MB.
- Определите размещение
hostconfig.json
для pgsqlks-15.8_5434 (измените первую строку!), и сделайте его копию в каталог/tmp
. Затем остановите СУБД-КС и ПО контейнеризации docker.
cont_name="pgsqlks-15.8_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
- Отредактируйте файл конфигурации
hostconfig.json
, а именно замените значение "ShmSize":1073741824 на "ShmSize":2147483648.
nano "/var/lib/docker/containers/${cont_id}/hostconfig.json"
- Запустите Docker и затем СУБД-КС/
systemctl start docker.service
systemctl start ${cont_name}
Временное, быстрое решение
Расширить раздел /dev/shm
для текущего контейнера без его перезапуска. После перезапуска СУБД-КС значение вернется на то, которое было указано при создании контейнера.
Пример: Для развернутого инстанса СУБД pgsqlks-15.8 порт 5434, контейнер которого создан с параметром -shm=1 GB
, необходимо увеличить этот параметр до 2GB
.
docker exec -ti pgsqlks-15.8_5434 bash -c "mount -o remount,size=2g -t shm /dev/shm"
docker exec -ti pgsqlks-15.8_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.8 порт 5434 контейнер которого создан с параметром -shm=1024 MB
, необходимо увеличить этот параметр до 2048 MB.
Изменение размера раздела /dev/shm
без пересоздания контейнера возможно правкой базы BoldDB, которая располагается в /var/lib/containers/storage/libpod/bolt_state.db
.
- Определите id и текущий размер ShmSize контейнера pgsqlks-15.8_5434 (измените первую строку!).
cont_name="pgsqlks-15.8_5434"
echo "id контейнера: $(podman inspect --format "{{.Id}}" ${cont_name})"
echo "ShmSize контейнера: $(podman inspect --format "{{.HostConfig.ShmSize}}" ${cont_name})"
- Сделайте копию
bolt_state.db
во временный каталог.
TMPDIR=`mktemp -d /tmp/kspodman.XXXXXXXXXX`
cp "/var/lib/containers/storage/libpod/bolt_state.db" "/${TMPDIR}"
- Скачайте boltbrowser, и откройте им базу
/var/lib/containers/storage/libpod/bolt_state.db
на редактирование.
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
- Откройте ветку ctr-<id-сконтейнера>-config, нажмите "e-редактирование" , затем найдите и измените значение
shmSize
.
Выйдите из менеджера boltbrowser нажав "q-выход".
- Перезапустите СУБД-КС.
systemctl restart ${cont_name}
Временное, быстрое решение
Расширить раздел /dev/shm
для текущего контейнера без его перезапуска. После перезапуска СУБД-КС значение вернется на то, которое было указано при создании контейнера.
Пример: Для развернутого инстанса СУБД pgsqlks-15.8 порт 5434, контейнер которого создан с параметром -shm=1 GB
, необходимо увеличить этот параметр до 2GB
.
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"