forked from wangbo/easyai
perf(redis): 优化 Redis 配置并添加资源限制
- 为 Redis 添加 ./data/redis:/data 持久化挂载 - 在 redis.conf 中设置 maxmemory 2gb 限制内存使用 - 禁用 RDB 快照,启用 appendfsync everysec 避免 OOM - 在 docker-compose.yml 中为 Redis 添加 mem_limit: 2g 和 memswap_limit: 2g - 为 MongoDB 添加 --wiredTigerCacheSizeGB 1.5 和 mem_limit: 2500m - 为 easyai-server 添加 mem_limit: 2200m 内存限制 - 更新 README.md 文档说明 Redis 资源护栏和迁移步骤
This commit is contained in:
parent
42ef68857d
commit
0aebe62f70
29
README.md
29
README.md
@ -99,6 +99,35 @@ Windows 下使用 `update.ps1`,功能与 Linux 版一致:
|
||||
|
||||
## 重要更新记录:
|
||||
|
||||
### 2026.06.22
|
||||
|
||||
1. **Redis 资源护栏**:Redis 增加 `./data/redis:/data` 持久化挂载、`maxmemory 2gb`、`appendfsync everysec`,并禁用 RDB 快照,避免队列历史膨胀后占满内存和容器写层。
|
||||
2. **Mongo/主服务内存限制**:Mongo 增加 `--wiredTigerCacheSizeGB 1.5` 和容器内存限制,`easyai-server` 增加内存限制,避免 8G 机器上 Redis/Mongo/Node 相互挤压触发 OOM。
|
||||
3. **升级前置要求**:如果线上 Redis 之前没有 `/data` volume,先完成 Redis request-limit 队列历史清理,再迁移 Redis 数据目录,最后重建 Redis 容器。
|
||||
|
||||
#### Redis 数据迁移与重启步骤
|
||||
|
||||
执行前建议先做云盘快照或外部备份。磁盘空间紧张时,不要直接在当前机器上 `BGSAVE` 或复制大体积 Redis 文件。
|
||||
|
||||
```bash
|
||||
cd ~/easyai
|
||||
|
||||
# 1. 先通过后台 ModelRuntime 运维接口或后端启动清理逻辑清理 request-limit 历史:
|
||||
# - trim bull:request_limit_*:events 到小长度
|
||||
# - 只清 completed/failed,不删除 waiting/active/delayed
|
||||
|
||||
# 2. 确认 Redis 内存已经下降后,再准备新的持久化目录
|
||||
mkdir -p ./data/redis
|
||||
|
||||
# 3. 如果旧 Redis 数据在容器写层,先按实际容器内 /data 内容迁移到宿主机目录
|
||||
docker cp redis:/data/. ./data/redis/
|
||||
|
||||
# 4. 更新配置后重建关键容器
|
||||
docker compose up -d redis mongo easyai-server
|
||||
```
|
||||
|
||||
迁移后验收建议:Redis `used_memory_human < 2G`,`bull:request_limit_*:events` 长度维持在小窗口,24 小时内无 OOM。
|
||||
|
||||
### 2026.3.20
|
||||
|
||||
1. **新增 Agent 记忆服务(AMS)模块**:新增 `agent-memory`(Agent 长期记忆)容器,复用 `easyai-pgvector` 数据库(需 pgvector 扩展),用于支持 Agent 对话记忆、向量召回与反馈能力。
|
||||
|
||||
@ -67,6 +67,7 @@ services:
|
||||
- ./data/tmp:/tmp
|
||||
# - ./data/backend/pm2.config.js:/app/pm2.config.js
|
||||
restart: unless-stopped
|
||||
mem_limit: 2200m
|
||||
environment:
|
||||
# MongoDB配置,用户管理,不会配置的话保持默认即可
|
||||
- CONFIG_DB_MONGO_URI=mongodb://172.21.0.3:27017
|
||||
@ -189,6 +190,8 @@ services:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
|
||||
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
|
||||
command: [ "mongod", "--wiredTigerCacheSizeGB", "1.5" ]
|
||||
mem_limit: 2500m
|
||||
volumes:
|
||||
# - /usr/local/mongo/data:/data/db
|
||||
- mongo_data:/data/db # 使用docker volume存储数据,提高性能,避免兼容性问题
|
||||
@ -210,7 +213,10 @@ services:
|
||||
restart: always
|
||||
volumes:
|
||||
- ./redis.conf:/etc/redis/redis.conf # 挂载本地 redis.conf
|
||||
- ./data/redis:/data # 持久化 Redis AOF/RDB,避免落到容器写层
|
||||
command: [ "redis-server", "/etc/redis/redis.conf" ] # 让 Redis 读取配置文件
|
||||
mem_limit: 2g
|
||||
memswap_limit: 2g
|
||||
# ports:
|
||||
# - ${REDIS_PORT+${REDIS_PORT}:6379}
|
||||
# read_only: true
|
||||
|
||||
17
redis.conf
17
redis.conf
@ -15,16 +15,15 @@ daemonize no
|
||||
#pidfile /data/dockerData/redis/run/redis6379.pid
|
||||
#默认为no,redis持久化,可以改为yes
|
||||
appendonly yes
|
||||
dir /data
|
||||
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能 # 增加到300秒,或设为0禁用
|
||||
timeout 300
|
||||
# 服务器系统默认配置参数影响 Redis 的应用
|
||||
maxclients 10000
|
||||
# 减少到60秒,更快检测连接问题
|
||||
tcp-keepalive 60
|
||||
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
# 禁用 RDB 快照,避免小内存机器上 fork bgsave 触发 OOM;生产保留 AOF。
|
||||
save ""
|
||||
# 按需求调整 Redis 线程数
|
||||
tcp-backlog 511
|
||||
# 设置Redis副本实例是否为只读模式
|
||||
@ -34,14 +33,13 @@ replica-read-only no
|
||||
# 设置Redis最大内存达到时的数据淘汰策略
|
||||
# noeviction:当内存达到最大限制时,Redis不会自动删除任何键,这可能导致进一步的操作失败,直到手动干预 # 当内存不足时,删除最近最少使用的键
|
||||
# maxmemory-policy allkeys-lru
|
||||
maxmemory 2gb
|
||||
maxmemory-policy noeviction
|
||||
# 设置数据库数量,这里设置为16个数据库
|
||||
databases 16
|
||||
# 启用 AOF, AOF常规配置
|
||||
appendonly yes
|
||||
# 改为由操作系统决定何时同步,减少I/O压力
|
||||
appendfsync no
|
||||
no-appendfsync-on-rewrite no
|
||||
# AOF 常规配置
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite yes
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
# 慢查询阈值
|
||||
@ -71,4 +69,3 @@ zset-max-ziplist-entries 128
|
||||
zset-max-ziplist-value 64
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user