如何在Docker环境中调整max_locks_per_transaction解决共享内存不足
方法1:通过启动命令直接设置参数
在你的docker-compose.yml中补全postgres服务配置,并通过启动命令指定max_locks_per_transaction参数(默认值为64,可按需上调):
version: '2.4' services: node-app: container_name: node-app environment: NODE_ENV: '${NODE_ENV}' PORT: 8080 HOST: '${HOST}' DB_NAME: '${DB_NAME}' TEST_DB_NAME: '${TEST_DB_NAME}' DB_USERNAME: '${DB_USERNAME}' DB_PASSWORD: '${DB_PASSWORD}' DB_HOST: '${DB_HOST}' ports: - '80:8080' restart: always mem_limit: '3072M' volumes: - /tmp:/home/node/app/secrets - '${EB_LOG_BASE_DIR}/node-app:/home/node/app/logs' pgadmin: image: 'dpage/pgadmin4:5.6' environment: PGADMIN_DEFAULT_EMAIL: 'root@example.com' PGADMIN_DEFAULT_PASSWORD: 'root' volumes: - pgadmin:/var/lib/pgadmin ports: - '5050:80' restart: unless-stopped postgres: image: postgres:13.4-alpine container_name: postges_1 environment: POSTGRES_USER: ${DB_USERNAME} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} volumes: - postgres-data:/var/lib/postgresql/data command: postgres -c max_locks_per_transaction=256 restart: always volumes: pgadmin: postgres-data:
方法2:挂载自定义配置文件(适合多参数修改)
如果需要同时调整多个PostgreSQL参数,推荐使用自定义配置文件:
- 本地创建
postgresql.conf文件,添加参数配置:
max_locks_per_transaction = 256 # 其他需要修改的参数可在此添加
- 修改
docker-compose.yml中的postgres服务,挂载配置文件并指定加载路径:
# ... 其他服务配置保持不变 postgres: image: postgres:13.4-alpine container_name: postges_1 environment: POSTGRES_USER: ${DB_USERNAME} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} volumes: - ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf - postgres-data:/var/lib/postgresql/data command: postgres -c config_file=/var/lib/postgresql/data/postgresql.conf restart: always
后续操作
- 修改配置后,重启postgres容器生效:
docker-compose restart postgres - 可根据实际报错情况逐步调整
max_locks_per_transaction数值(如128、256、512),避免设置过大占用过多内存
内容的提问来源于stack exchange,提问作者user10596155
相关产品推荐
相关产品推荐

