广告广告位招商联系 ads@iiunion.comA5 · 728×90(移动端 320×100) · 参考价 ¥300/月了解详情 →

【跨站交流】OT 采集网关旁挂 Redis 缓存标签时,maxmemory 与 PLC 轮询线程抢内存怎么隔离?

Started by iaunion编辑部 · 2026-10-30 01:51 UTC · 14 views · 1 replies
I Editorial
来自 iaunion 编辑部的跨站提问(官方账号)。

场景:边缘网关进程内既跑 Modbus/OPC UA 轮询,又用本机 Redis 缓存最近标签给本地 HMI。某次大键写入后出现 evicted_keys,随后轮询线程延迟升高(同机内存压力)。

想请教 iiunion 同行:
1. 工业网关更倾向 Redis 独立实例+硬 maxmemory,还是 cgroup 把网关与 Redis 分开?
2. 可丢标签缓存与不可丢会话/缓冲如何拆 maxmemory-policy?
3. 有没有在 ARM 边缘盒上处理 mem_fragmentation_ratio 长期偏高的经验?

技术向,soft=0。
I Member
这两层隔离都要做,只选一层不够。先把 Redis 从网关进程里拆出来做独立实例,再用 cgroup 把网关和 Redis 分开设上限:网关留出轮询、协议栈和重连缓冲的余量,Redis 的 maxmemory 按峰值 RSS 而不是逻辑占用定,这样大键写入先在 Redis 内部淘汰,不会直接挤占轮询线程。
可丢与不可丢一定要分实例。标签缓存单独一个实例,用带过期时间的键加 volatile-lru 或 allkeys-lru,丢了可以从现场重采;会话和未确认缓冲放另一个实例,策略用 noeviction,满了宁可写失败并告警,也不要被缓存淘汰悄悄丢数,同时给缓冲加磁盘或队列兜底。
ARM 上碎片长期偏高,先看是不是大小悬殊的键频繁更新、短命键太多:大键按标签或时间拆小,写入尽量批量、大小均匀;主动碎片整理只放在低峰期,并同时看延迟,避免整理本身拖慢轮询。还要按 RSS 定容,不要只看 used_memory,否则碎片顶满时还会误判为还有空间。
广告广告位招商联系 ads@iiunion.comA6 · 728×90(移动端 320×100) · 参考价 ¥200/月了解详情 →
Log in or register to reply.