chore(deploy): 资源默认值适配 4 核 8G 共用服务器

- 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 模板、运维文档同步更新
This commit is contained in:
yml2213
2026-08-30 14:07:39 +08:00
parent 6dcdec43f1
commit 737c957bb3
4 changed files with 26 additions and 25 deletions
+10 -9
View File
@@ -33,17 +33,18 @@ DATABASE_STATEMENT_TIMEOUT_MS=15000
DATABASE_SLOW_QUERY_THRESHOLD_MS=500 DATABASE_SLOW_QUERY_THRESHOLD_MS=500
# PostgreSQL 原生慢查询日志阈值(毫秒);-1 关闭 # PostgreSQL 原生慢查询日志阈值(毫秒);-1 关闭
POSTGRES_LOG_MIN_DURATION_STATEMENT_MS=500 POSTGRES_LOG_MIN_DURATION_STATEMENT_MS=500
# PostgreSQL 容器资源与性能参数(按服务器内存调整;默认值按 2G 内存机器设置, # PostgreSQL 容器资源与性能参数。默认值按 4 核 8G 且与其他服务共用的
# 4G+ 机器可将 shared_buffers 提到 512MB、effective_cache_size 提到 2GB): # 服务器设置;数据库独占或内存更足时可上调 shared_buffers 与
POSTGRES_MEM_LIMIT=1g # effective_cache_size(后者只是规划器提示,不实际占用内存):
POSTGRES_MEM_LIMIT=1.5g
POSTGRES_CPUS=2 POSTGRES_CPUS=2
POSTGRES_SHARED_BUFFERS=256MB POSTGRES_SHARED_BUFFERS=384MB
POSTGRES_EFFECTIVE_CACHE_SIZE=1GB POSTGRES_EFFECTIVE_CACHE_SIZE=4GB
POSTGRES_WORK_MEM=8MB POSTGRES_WORK_MEM=16MB
POSTGRES_MAINTENANCE_WORK_MEM=128MB POSTGRES_MAINTENANCE_WORK_MEM=256MB
# 后端与 Web 容器限额(内存紧张的小机器可相应收紧) # 后端与 Web 容器限额(内存紧张的小机器可相应收紧)
BACKEND_MEM_LIMIT=512m BACKEND_MEM_LIMIT=768m
BACKEND_CPUS=1 BACKEND_CPUS=1.5
WEB_MEM_LIMIT=256m WEB_MEM_LIMIT=256m
WEB_CPUS=0.5 WEB_CPUS=0.5
+5 -5
View File
@@ -17,16 +17,16 @@ services:
"-c", "-c",
"log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}", "log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}",
"-c", "-c",
"shared_buffers=${POSTGRES_SHARED_BUFFERS:-256MB}", "shared_buffers=${POSTGRES_SHARED_BUFFERS:-384MB}",
"-c", "-c",
"effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-1GB}", "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4GB}",
"-c", "-c",
"work_mem=${POSTGRES_WORK_MEM:-8MB}", "work_mem=${POSTGRES_WORK_MEM:-16MB}",
"-c", "-c",
"maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-128MB}", "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-256MB}",
] ]
restart: unless-stopped restart: unless-stopped
mem_limit: ${POSTGRES_MEM_LIMIT:-1g} mem_limit: ${POSTGRES_MEM_LIMIT:-1.5g}
cpus: ${POSTGRES_CPUS:-2} cpus: ${POSTGRES_CPUS:-2}
shm_size: 512mb shm_size: 512mb
stop_grace_period: 60s stop_grace_period: 60s
+8 -8
View File
@@ -8,7 +8,7 @@ services:
postgres: postgres:
image: docker.m.daocloud.io/library/postgres:16-bookworm image: docker.m.daocloud.io/library/postgres:16-bookworm
# 开启 pg_stat_statements,便于定位生产环境累计最耗时的 SQL。 # 开启 pg_stat_statements,便于定位生产环境累计最耗时的 SQL。
# 内存类参数按 2G 内存机器给出默认值,请按服务器内存调整(见 .env.server.example)。 # 内存类参数默认按 4 核 8G 且与其他服务共用的服务器设置(见 .env.server.example)。
command: command:
[ [
"postgres", "postgres",
@@ -19,17 +19,17 @@ services:
"-c", "-c",
"log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}", "log_min_duration_statement=${POSTGRES_LOG_MIN_DURATION_STATEMENT_MS:-500}",
"-c", "-c",
"shared_buffers=${POSTGRES_SHARED_BUFFERS:-256MB}", "shared_buffers=${POSTGRES_SHARED_BUFFERS:-384MB}",
"-c", "-c",
"effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-1GB}", "effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4GB}",
"-c", "-c",
"work_mem=${POSTGRES_WORK_MEM:-8MB}", "work_mem=${POSTGRES_WORK_MEM:-16MB}",
"-c", "-c",
"maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-128MB}", "maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-256MB}",
] ]
restart: unless-stopped restart: unless-stopped
# 让 PostgreSQL 优雅关闭有足够时间完成检查点;无限制时 OOM 可能拖垮整机。 # 让 PostgreSQL 优雅关闭有足够时间完成检查点;无限制时 OOM 可能拖垮整机。
mem_limit: ${POSTGRES_MEM_LIMIT:-1g} mem_limit: ${POSTGRES_MEM_LIMIT:-1.5g}
cpus: ${POSTGRES_CPUS:-2} cpus: ${POSTGRES_CPUS:-2}
shm_size: 512mb shm_size: 512mb
stop_grace_period: 60s stop_grace_period: 60s
@@ -61,8 +61,8 @@ services:
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com} NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com}
restart: unless-stopped restart: unless-stopped
# 30s 让后端在 SIGTERM 后完成优雅关闭(HTTP 连接收尾 + 数据库连接池释放)。 # 30s 让后端在 SIGTERM 后完成优雅关闭(HTTP 连接收尾 + 数据库连接池释放)。
mem_limit: ${BACKEND_MEM_LIMIT:-512m} mem_limit: ${BACKEND_MEM_LIMIT:-768m}
cpus: ${BACKEND_CPUS:-1} cpus: ${BACKEND_CPUS:-1.5}
stop_grace_period: 30s stop_grace_period: 30s
env_file: env_file:
- .env - .env
+3 -3
View File
@@ -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 保证检查点能完整落盘 | | postgres | `mem_limit` 1.5g、`cpus` 2、`shm_size` 512mb | `shm_size` 不足会导致并行查询/大排序报错;`stop_grace_period` 60s 保证检查点能完整落盘`effective_cache_size` 只是规划器提示,不实际占用内存 |
| backend | `mem_limit` 512m、`cpus` 1 | `stop_grace_period` 30s 保证优雅关闭(HTTP 收尾 + 连接池释放)能跑完 | | backend | `mem_limit` 768m、`cpus` 1.5 | `stop_grace_period` 30s 保证优雅关闭(HTTP 收尾 + 连接池释放)能跑完 |
| web | `mem_limit` 256m、`cpus` 0.5 | Caddy 静态服务,低占用 | | web | `mem_limit` 256m、`cpus` 0.5 | Caddy 静态服务,低占用 |
| dev postgres | 同生产默认 | 仅 postgres 受限;backend/frontend 开发容器不设限,避免 tsx watch / npm install 内存波动被误杀 | | dev postgres | 同生产默认 | 仅 postgres 受限;backend/frontend 开发容器不设限,避免 tsx watch / npm install 内存波动被误杀 |