Generated by Answer me with HTML 0.5.7 · 2026-10-23 11:18 · ★ Star on GitHub
内存调优已落地
网关加分配器参数、看门狗放宽阈值,体验零中断
做了什么
- 网关加三个 glibc 分配器参数,下次重启生效,当前不中断。
- hy-memory 看门狗阈值 350 改 450,冷却 20 改 45 分钟,立即生效。
- 顺手修掉一个配置死键:阈值从 .env 读不到的老 bug。
- 全部有备份,一条命令回滚。
改动清单
| 项目 | 改前 | 改后 | 生效时机 |
|---|---|---|---|
| 网关 MALLOC_ARENA_MAX | 无,默认 16 | 4 | 下次网关重启 |
| 网关 TRIM_THRESHOLD | 无,128 KB | 65536 | 下次网关重启 |
| 网关 MMAP_THRESHOLD | 无,动态上浮 | 131072 锁定 | 下次网关重启 |
| 看门狗阈值 | 350 MB | 450 MB | 已生效 |
| 看门狗冷却 | 20 分钟 | 45 分钟 | 已生效 |
| hy-memory MMAP 阈值 | 无 | 131072 | 下次看门狗重启 |
- 网关参数写在 systemd drop-in,升级不会覆盖。
- 看门狗参数写在 .env,脚本启动即读。
为什么这么取值
数据
| 默认 unset 碎片 | 645 |
|---|---|
| ARENA_MAX=4 碎片 | 499 |
| ARENA_MAX=2 碎片 | 449 |
| 档位 | 内存 | 吞吐 | 选择理由 |
|---|---|---|---|
| 2 | -30 % | -8 % | hy-memory 在用,单用途进程无所谓 |
| 4 | -22 % | -1.5 % | 网关选它,吞吐代价在噪声内 |
| 默认 | 基准 | 基准 | 2 核可开到 16 个 arena,碎片最多 |
- 阈值 450 的依据:历史 78 次触发的中位是 376 MB,最高 507 MB。
- 定 450 后只有超过它的才重启,按历史数据约少八成重启。
- 冷却 45 分钟防连跳,10 月 21 日曾出现 3 分钟内两次重启。
验证结果
- systemd 合并环境
- 三个 MALLOC 键全在
- 看门狗干跑
- threshold=450MB cooldown=45min
- 脚本语法
- compile ok
- 冒烟测试
- 8 线程计算正确
- crontab
- 已回简为 --quiet-ok
- drop-in 已被 systemd 接受,
systemctl show能看到三个键。 - 显式传参优先级仍高于 .env,已反向验证。
- 网关当前进程还是老的,PID 2543795,未重启。
预期收益与代价
网关碎片预期下降max 22 %
hy-memory 重启次数预期下降max 80 %
体验中断max 0 次
可用内存变化max -290 MB 上限占用
- 网关 530 MB 里预计能省 80 到 120 MB,取决于碎片占比。
- hy-memory 重启变少,冷缓存重建次数跟着少。
- 代价是 hy-memory 允许长到 450 MB,可用余量从 719 MB 降到约 430 MB。
- 内存无硬上限,真跑满会走 2 GB swap,不会直接 OOM。
还剩一步
网关重启才能吃到新参数
旧进程 PID 2543795 仍是默认分配器。在会话内重启会被 Hermes 拦截,需要从外部 shell 执行下面这条,建议放在凌晨 4:30 这类空档,耗时数秒。
systemctl --user restart hermes-gateway- 回滚方式:删掉 drop-in 目录里的 malloc.conf 后 daemon-reload,或还原备份里的四份文件。
- 备份位置 /root/backups/mem_tune_20261023/。