某台4核16G Linux云主机白天稳定,夜间把并发从8提高到32后,吞吐没有按比例增加,接口P99从120ms跃升到1.8s,任务还会“卡几秒再继续”。free -h仍显示数GiB可用,dmesg也没有OOM记录。尤其当应用混用文件缓存、匿名堆和swap时,free显示的空闲并不等于可无停顿使用的内存。运维者容易先怪CPU,但“还有内存却持续停顿”更可能来自气球驱动回收、swap换入换出或cgroup限额触发的内存回收抖动。排查应把回收、缺页和压测放到同一时间轴,不能只看free值。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:hhost(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
气球驱动回收膨胀气球设备后,会迫使客户机缩页:干净页缓存可直接丢弃,匿名页通常要写入swap;swap不足时才可能逼近cgroup v2的memory.max并触发OOM。系统也会按memory.high或水位渐进回收。因此“宿主机物理内存紧张”“客户机缓存被主动回收”“租户硬限触顶”可能同时发生,客户机的free值不能代替宿主机视角。

进行内存硬限核验时,要沿/proc/self/cgroup找到当前控制组,检查memory.max、memory.high、memory.current和memory.events,并与free -h、/proc/meminfo的MemAvailable交叉比对。前者决定还能否继续分配,后者只描述当前可见内存。若memory.events里的high或max持续增加,说明限额回收正在发生;oom、oom_kill增加则表示硬限已触顶。还要区分瞬时峰值与持续压力:单次high增长只说明触碰阈值,连续增长且业务同步变慢才更值得关注。
不过,气球回收不能单独证明宿主机超售,因为气球会在硬限之前缩缓存。客户机侧先确认的是有效内存被压缩、停顿是否与回收同步;最终结论仍需平台侧承诺量、宿主机利用率和邻居回收数据佐证。
先让服务预热5分钟,固定输入、连接数和到达率,每10秒采集一次vmstat、/proc/vmstat与PSI,再把并发从8、16、32逐级提高到64,每档保持10分钟。缺页速率采样应记录major fault、pgmajfault、pswpin和pswpout的每秒增量。major fault上升可能只是文件mmap,不能直接当作swap;只有换页、memory.pressure的full与延迟尖峰同步,才更像回收停顿。采样窗口应跨过至少两个业务周期并重复三轮,避免把定时任务、备份或日志刷盘造成的短时缺页误判为超售。

为排除并发压测失真,分别做固定并发和固定到达率测试,同时记录吞吐、P95/P99、上下文切换、运行队列与I/O等待。线程过多会把排队误判成内存停顿,冷缓存也会抬高缺页。预热后若run queue增长而缺页平稳,应先查调度或下游阻塞;若major fault、swap流量和PSI full一起抬升,再追查回收。
可用ServLlama辅助编排固定请求集和并发档位,但每轮只改一个变量。最后按“cgroup事件PSI缺页/换页延迟尖峰”对齐时间戳,归因于硬限、气球回收或swap抖动。连续多轮都在同一负载拐点复现,才可判为疑似有效内存被压缩;宿主机是否超售仍需平台证据确认。
气球驱动回收不是删除客户机内存,而是宿主机扩张气球并占用页面,迫使客户机内核回收内存。气球目标持续高于可用内存时,回收会先清页缓存,再触及匿名页、swap,甚至进入直接回收。此时 free 未必很低,缺页、回收等待和尾延迟却已上升,所以气球状态、guest free、宿主机 available、PSI 与业务延迟必须放在同一时间轴观察。
缺页速率采样应按固定窗口计算增量,并区分 minor fault 与 major fault:前者表示无需磁盘 I/O 的缺页,后者往往意味着要从磁盘或 swap 补页,瞬时尖峰不足以定论。应在空闲、稳定负载、气球逐级加压时各采样数分钟,同时记录 pswpin/pswpout、pgscan/pgsteal、PSI memory some avg10/avg60。若 major fault、swap 与 P99 持续同步升高,才更像真实争抢。
内存回收抖动常表现为内存曲线锯齿、页缓存清空后又被读回,直接回收占用 CPU,吞吐忽高忽低。它可能源于工作集超过规格,也可能源于同宿主机其他租户,需结合气球大小、宿主机指标和同规格对照机判断。

内存硬限核验不能只看 free -m。应读取 cgroup 的 memory.max、memory.high、memory.current、memory.stat,核对限制、占用、file/anon 构成和回收计数,再查宿主机 NUMA、balloon target、swap 配置及 OOM 日志。配置上限不等于物理保障;容器限制正常时,宿主机气球膨胀仍会回收实例页面。
压测常把排队误判为变慢。并发压测失真多由客户端与被测服务同机、闭环模型自动降速或协调遗漏造成;服务端 swap 会减少完成请求,固定并发反而掩盖 offered load 下降。应统一缓存基线,预热后固定请求模型与连接数,记录实际发送速率、错误率、P50/P99、回收和缺页速率,至少重复三轮。
可执行检查清单:①记录规格、承诺内存和 cgroup 硬限;②在空闲及负载下连续采样 free、PSI、swap、缺页和回收计数;③按固定增量扩张气球,每级稳定 3~5 分钟并对齐延迟;④用同规格对照机复测,区分工作集过大与宿主机争抢;⑤若 major fault、swap、P99 同步抬升且对照机正常,则确认实例侧存在持续回收压力,再升级工单。
最终不要用单一内存百分比下结论:只有“回收增强缺页与 swap 上升尾延迟抖动”形成因果链,并经对照实验验证,才有依据归因于内存超售;否则盲目扩容只会掩盖问题。