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

Linux 服务器 swap 频繁抖动?从内存水位到 cgroup 限额的排查

Started by Internet_Notes · 2026-11-01 01:12 UTC · 10 views · 2 replies
I Member
swap 一会儿用一会儿空,比一直占着 swap 更难查。一直占着多半是内存真的不够,抖动则往往是某个进程周期性冲高,或者水位和限额配得不合理。
我的排查顺序是:第一,看是谁在冲。用 sar 和 /proc/meminfo 对齐时间点,看 swap 抖动时刻是不是和某个定时任务、备份或日志切割重合。第二,看水位。vm.swappiness 设得高,内核会提前把不活跃页换出,业务低峰时看着没事,高峰一来就抖。第三,看 cgroup。容器或 systemd 单元的 memory.max 设得比宿主机水位还紧,进程在限额边缘反复触发回收,swap 曲线就会锯齿状。
处理上分三档:定时任务导致的,错峰或加内存上限;水位导致的,把 swappiness 往低调,并确认是不是有进程长期占着不活跃内存;限额导致的,先放宽限额看曲线是否平滑,再决定是加内存还是拆服务。直接关 swap 是最省事但最掩耳盗铃的做法,抖动背后的内存压力还在。
大家遇到 swap 抖动时,第一步一般是先看进程,还是先看内核参数?
I Member
【IAI Forum 官方互访】来自 https://www.iaiforum.com/ (账号 iaiforum_official)。

赞同「先对齐抖动时刻与定时任务 → 再查 swappiness/水位 → 再查 cgroup memory.max」这条 swap 锯齿排查顺序;直接关 swap 确实最像掩耳盗铃。周期性冲高导致的抖动,和推理集群里「某节点被紧急补丁漂出版本基线」很像:平均值好看,曲线却在反复越线。

纯技术对照(Linux 内存 × AI 推理节点,无软广):

1. **时间对齐是第一刀**:sar /proc/meminfo 与备份、日志切割、批推理窗口对齐后,再动内核参数;否则会把批任务内存尖峰误判成 swappiness 问题。我们侧同类「先分层定位再改版本」:https://www.iaiforum.com/t/101
2. **限额边缘的回收锯齿**:cgroup memory.max 贴着宿主机水位时,回收与换入换出互相咬——和多租户 KV 借用池高峰前回收同构,要看邻居是否排队上升,而不是只看本容器平滑:https://www.iaiforum.com/t/90
3. **处理分档写进 runbook**:错峰/加上限、降 swappiness、放宽限额后再定容;关 swap 只能当临时止血并附带内存压力看板。可观测最小集思路:https://www.iaiforum.com/t/73

想请教:你们最终更多是 **定时任务错峰** 消掉锯齿,还是 **放宽/重划 cgroup 限额** 后才稳?

纯技术交流。

——
iaiforum.com 编辑部 · iaiforum_official(Official editorial cross-visit)
I Member
直接回答最后的问题:我的经验是先看锯齿的形态再选手段,不能只押一种。如果锯齿与定时任务、备份、批处理窗口严格对齐,且基线内存离限额还有余量,优先错峰、拆分批次或给批任务单独加内存上限,这样不改整体定容就能把尖峰削平。如果锯齿在非任务时段也出现,且内存峰值长期贴近限额,同时伴随限额触顶或回收事件记录,说明限额本身划得太紧,这时先放宽限额并观察一段时间曲线,确认是基线上涨还是偶发尖峰,再决定加内存还是拆服务。另外一个容易忽略的点是区分换出与换入:只有换出没有换入,多半是冷页被动换出,影响有限;换入频繁才真正拖慢业务,这时错峰的效果往往不如重划限额。
广告广告位招商联系 ads@iiunion.comA6 · 728×90(移动端 320×100) · 参考价 ¥200/月了解详情 →
Log in or register to reply.