From 737c957bb3017eafa46383061e890c9ad7df2351 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sun, 30 Aug 2026 14:07:39 +0800 Subject: [PATCH] =?UTF-8?q?chore(deploy):=20=E8=B5=84=E6=BA=90=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E9=80=82=E9=85=8D=204=20=E6=A0=B8=208G=20?= =?UTF-8?q?=E5=85=B1=E7=94=A8=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - postgres mem_limit 1.5g/shared_buffers 384MB/effective_cache_size 4GB/work_mem 16MB/maintenance_work_mem 256MB - backend mem_limit 768m、cpus 1.5;web 保持不变 - 生产与开发编排、env 模板、运维文档同步更新 --- .env.server.example | 19 ++++++++++--------- docker-compose.dev.yml | 10 +++++----- docker-compose.yml | 16 ++++++++-------- docs/数据库SQL约束与运维.md | 6 +++--- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/.env.server.example b/.env.server.example index f104c82f..c4f0e8d6 100644 --- a/.env.server.example +++ b/.env.server.example @@ -33,17 +33,18 @@ DATABASE_STATEMENT_TIMEOUT_MS=15000 DATABASE_SLOW_QUERY_THRESHOLD_MS=500 # PostgreSQL 原生慢查询日志阈值(毫秒);-1 关闭 POSTGRES_LOG_MIN_DURATION_STATEMENT_MS=500 -# PostgreSQL 容器资源与性能参数(按服务器内存调整;默认值按 2G 内存机器设置, -# 4G+ 机器可将 shared_buffers 提到 512MB、effective_cache_size 提到 2GB): -POSTGRES_MEM_LIMIT=1g +# PostgreSQL 容器资源与性能参数。默认值按 4 核 8G 且与其他服务共用的 +# 服务器设置;数据库独占或内存更足时可上调 shared_buffers 与 +# effective_cache_size(后者只是规划器提示,不实际占用内存): +POSTGRES_MEM_LIMIT=1.5g POSTGRES_CPUS=2 -POSTGRES_SHARED_BUFFERS=256MB -POSTGRES_EFFECTIVE_CACHE_SIZE=1GB -POSTGRES_WORK_MEM=8MB -POSTGRES_MAINTENANCE_WORK_MEM=128MB +POSTGRES_SHARED_BUFFERS=384MB +POSTGRES_EFFECTIVE_CACHE_SIZE=4GB +POSTGRES_WORK_MEM=16MB +POSTGRES_MAINTENANCE_WORK_MEM=256MB # 后端与 Web 容器限额(内存紧张的小机器可相应收紧) -BACKEND_MEM_LIMIT=512m -BACKEND_CPUS=1 +BACKEND_MEM_LIMIT=768m +BACKEND_CPUS=1.5 WEB_MEM_LIMIT=256m WEB_CPUS=0.5 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 84c890cb..d1b8d618 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -17,16 +17,16 @@ services: "-c", "log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}", "-c", - "shared_buffers=${POSTGRES_SHARED_BUFFERS:-256MB}", + "shared_buffers=${POSTGRES_SHARED_BUFFERS:-384MB}", "-c", - "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-1GB}", + "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4GB}", "-c", - "work_mem=${POSTGRES_WORK_MEM:-8MB}", + "work_mem=${POSTGRES_WORK_MEM:-16MB}", "-c", - "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-128MB}", + "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-256MB}", ] restart: unless-stopped - mem_limit: ${POSTGRES_MEM_LIMIT:-1g} + mem_limit: ${POSTGRES_MEM_LIMIT:-1.5g} cpus: ${POSTGRES_CPUS:-2} shm_size: 512mb stop_grace_period: 60s diff --git a/docker-compose.yml b/docker-compose.yml index 61e2fb1c..482bc4cf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: postgres: image: docker.m.daocloud.io/library/postgres:16-bookworm # 开启 pg_stat_statements,便于定位生产环境累计最耗时的 SQL。 - # 内存类参数按 2G 内存机器给出默认值,请按服务器内存调整(见 .env.server.example)。 + # 内存类参数默认按 4 核 8G 且与其他服务共用的服务器设置(见 .env.server.example)。 command: [ "postgres", @@ -19,17 +19,17 @@ services: "-c", "log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}", "-c", - "shared_buffers=${POSTGRES_SHARED_BUFFERS:-256MB}", + "shared_buffers=${POSTGRES_SHARED_BUFFERS:-384MB}", "-c", - "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-1GB}", + "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4GB}", "-c", - "work_mem=${POSTGRES_WORK_MEM:-8MB}", + "work_mem=${POSTGRES_WORK_MEM:-16MB}", "-c", - "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-128MB}", + "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-256MB}", ] restart: unless-stopped # 让 PostgreSQL 优雅关闭有足够时间完成检查点;无限制时 OOM 可能拖垮整机。 - mem_limit: ${POSTGRES_MEM_LIMIT:-1g} + mem_limit: ${POSTGRES_MEM_LIMIT:-1.5g} cpus: ${POSTGRES_CPUS:-2} shm_size: 512mb stop_grace_period: 60s @@ -61,8 +61,8 @@ services: NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com} restart: unless-stopped # 30s 让后端在 SIGTERM 后完成优雅关闭(HTTP 连接收尾 + 数据库连接池释放)。 - mem_limit: ${BACKEND_MEM_LIMIT:-512m} - cpus: ${BACKEND_CPUS:-1} + mem_limit: ${BACKEND_MEM_LIMIT:-768m} + cpus: ${BACKEND_CPUS:-1.5} stop_grace_period: 30s env_file: - .env diff --git a/docs/数据库SQL约束与运维.md b/docs/数据库SQL约束与运维.md index b62d1f8c..78f3a4c0 100644 --- a/docs/数据库SQL约束与运维.md +++ b/docs/数据库SQL约束与运维.md @@ -41,12 +41,12 @@ ORDER BY query_start; ## 容器资源限制 -Compose 对 postgres 与各服务已配置资源限额,默认值按 2G 内存机器设置,均可在 `.env` 覆盖(见 `.env.server.example` 的 `POSTGRES_*` / `BACKEND_MEM_LIMIT` / `WEB_MEM_LIMIT` 等): +Compose 对 postgres 与各服务已配置资源限额,默认值按 4 核 8G 且与其他服务共用的服务器设置,均可在 `.env` 覆盖(见 `.env.server.example` 的 `POSTGRES_*` / `BACKEND_MEM_LIMIT` / `WEB_MEM_LIMIT` 等): | 服务 | 限额 | 说明 | | --- | --- | --- | -| postgres | `mem_limit` 1g、`cpus` 2、`shm_size` 512mb | `shm_size` 不足会导致并行查询/大排序报错;`stop_grace_period` 60s 保证检查点能完整落盘 | -| backend | `mem_limit` 512m、`cpus` 1 | `stop_grace_period` 30s 保证优雅关闭(HTTP 收尾 + 连接池释放)能跑完 | +| postgres | `mem_limit` 1.5g、`cpus` 2、`shm_size` 512mb | `shm_size` 不足会导致并行查询/大排序报错;`stop_grace_period` 60s 保证检查点能完整落盘;`effective_cache_size` 只是规划器提示,不实际占用内存 | +| backend | `mem_limit` 768m、`cpus` 1.5 | `stop_grace_period` 30s 保证优雅关闭(HTTP 收尾 + 连接池释放)能跑完 | | web | `mem_limit` 256m、`cpus` 0.5 | Caddy 静态服务,低占用 | | dev postgres | 同生产默认 | 仅 postgres 受限;backend/frontend 开发容器不设限,避免 tsx watch / npm install 内存波动被误杀 |