共享内存容量规划
API7 网关数据面节点使用多个 NGINX 共享内存区(lua_shared_dict)在 worker 之间共享状态。大多数共享内存区用作缓存:写满后会淘汰最近最少使用的条目,节点仍可正常运行。但少数共享内存区中的数据会随部署规模增长且不会被淘汰。一旦写满,后续写入会被直接丢弃且不会显示明显错误。本文介绍需要规划容量的共享内存区、可容纳的数据量,以及如何根据实际场景调整大小。
需要规划容量的共享内存
API7 控制台会监控以下共享内存区,因为其中的数据无法通过缓存淘汰机制恢复。写满后会持续丢失数据,而不是只发生一次缓存未命中,因此问题更难排查。
| 共享内存区 | 默认值 | 存放内容 | 写满时的表现 |
|---|---|---|---|
prometheus-metrics-advanced | 128 MB | 每条 Prometheus 时间序列(约 1 KB) | 指标停止更新,仪表盘和告警出现断点 |
kubernetes / nacos / consul | 各 64 MB | 每个已发现服务一个条目(其节点列表) | 新增或变更的上游节点无法解析 |
api-calls-for-portal | 64 MB | 每个开发者门户 API 调用维度一个计数器 | 门户统计数据偏低 |
tracing_buffer | 32 MB | 待上报的 SkyWalking 链路追踪片段 | 链路追踪 Span 被丢弃 |
其余所有共享内存区(限流计数器、EWMA 负载均衡状态、各类缓存等)都能自行淘汰或重置,无需调整。
备注
上述默认值旨在覆盖绝大多数部署场景。仅当你的规模超出下文所述容量,或希望在小规模部署上回收内存时,才需要调整。显式设置的值始终优先于默认值。