diff --git a/.env.sample b/.env.sample index 577d0b4..76f439e 100644 --- a/.env.sample +++ b/.env.sample @@ -23,10 +23,14 @@ WEB_PORT=3010 SERVER_HTTP_PORT=3001 # easyai-server 后端 HTTP 端口 -NODE_MAX_OLD_SPACE_SIZE=1536 -# easyai-server V8 heap 上限,单位 MB MALLOC_ARENA_MAX=2 # 限制 glibc native heap arena,降低 sharp/libvips 场景下 RSS 膨胀 +MALLOC_TRIM_THRESHOLD_=131072 +# glibc 更积极 trim 空闲 top chunk,降低 native RSS 高水位 +MALLOC_MMAP_THRESHOLD_=131072 +# 较大的 native 分配更倾向 mmap,释放后更容易归还 OS +MALLOC_TOP_PAD_=131072 +# 降低 trim 后额外保留的 heap padding SHARP_CACHE_ENABLED=false # 默认关闭 sharp/libvips 全局 cache;需要开启时再配置 SHARP_CACHE_* 参数 SHARP_CONCURRENCY=1 diff --git a/README.md b/README.md index f5005e1..a7d0cb9 100644 --- a/README.md +++ b/README.md @@ -101,9 +101,10 @@ Windows 下使用 `update.ps1`,功能与 Linux 版一致: ### 2026.06.24 -1. **主服务 sharp/native 内存护栏**:`easyai-server` 默认关闭 sharp/libvips cache,并将 sharp 并发限制为 1;同时设置 `MALLOC_ARENA_MAX=2`,降低图片处理和大 Buffer 场景下 native RSS 持续膨胀风险。 -2. **生图 base64 输出收敛**:模型返回的 base64 图片会先上传到 OSS,返回对象和 raw/debug 响应中不再长期保留大 base64 字符串。 -3. **重启要求**:该内存护栏必须在新进程启动时生效,更新后需执行 `docker compose up -d easyai-server` 或重建并重启主服务容器。 +1. **主服务 sharp/native 内存护栏**:`easyai-server` 默认关闭 sharp/libvips cache,并将 sharp 并发限制为 1;同时设置 `MALLOC_ARENA_MAX=2`、`MALLOC_TRIM_THRESHOLD_=131072`、`MALLOC_MMAP_THRESHOLD_=131072`、`MALLOC_TOP_PAD_=131072`,降低图片处理和大 Buffer 场景下 native RSS 持续膨胀风险。 +2. **重 native 操作隔离**:遮罩合并、alpha 反转等 sharp/raw 操作改为一次性子进程执行,处理完成后由 OS 回收子进程 native heap,避免主服务 `[heap]` 被撑大。 +3. **生图 base64 输出收敛**:模型返回的 base64 图片会先上传到 OSS,返回对象和 raw/debug 响应中不再长期保留大 base64 字符串。 +4. **重启要求**:该内存护栏必须在新进程启动时生效,更新后需执行 `docker compose up -d easyai-server` 或重建并重启主服务容器。 ### 2026.06.22 diff --git a/docker-compose.yml b/docker-compose.yml index c62e8b8..346cbcc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -73,6 +73,9 @@ services: - CONFIG_DB_MONGO_USERNAME=${MONGO_INITDB_ROOT_USERNAME} - CONFIG_DB_MONGO_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD} - MALLOC_ARENA_MAX=${MALLOC_ARENA_MAX:-2} + - MALLOC_TRIM_THRESHOLD_=${MALLOC_TRIM_THRESHOLD_:-131072} + - MALLOC_MMAP_THRESHOLD_=${MALLOC_MMAP_THRESHOLD_:-131072} + - MALLOC_TOP_PAD_=${MALLOC_TOP_PAD_:-131072} - SHARP_CACHE_ENABLED=${SHARP_CACHE_ENABLED:-false} - SHARP_CONCURRENCY=${SHARP_CONCURRENCY:-1} # Redis配置,队列缓存,不会配置的话保持默认即可