1. 先说清楚:这篇 RH442 系列笔记想解决什么问题
很多做 Linux 运维的朋友一听到 RHCA,第一反应就是“那是架构师考的,离我太远”。直到我自己开始啃 RH442 这门课,才发现它其实非常落地。RH442 的全称是性能调优:Linux,它不教你背命令,也不要求你记住一堆内核参数的默认值,它真正训练的是“面对一台变慢的服务器,你怎么用系统自带的观测手段,一步步定位瓶颈,再做出有依据的调整”。这门课挂在 RHCA 体系里,但它解决的问题,是每个搞生产环境的人每天都会遇到的。
这篇是我 RHCA 备考系列的第 5 篇,前几篇把课程框架、工具方法论、CPU 子系统的调优思路过了一遍。这篇我打算完整复盘自己搭出来的一个虚拟内存故障实验,把从现象到定位、再到调优和验证的整条链路摊开讲。之所以选“swap 抖动”这个场景,是因为它太典型了:系统 load 很高,CPU 却不忙,内存看似还剩一大半,可应用就是慢得离谱。这种问题靠“看 top 猜答案”基本猜不中,必须沿着指标一层层往下摸。
如果你也想考 RHCA,或者你正在处理生产环境里“说不上哪里卡”的疑难杂症,这篇应该能给你一条可以照着走的思路。我已经把实验环境、排查命令、调优前后对照都记录下来,你可以直接拿去复现,也可以把这套方法移植到你自己的服务器上。
1.1 RH442 到底在训练什么能力
RH442 给我最大的冲击,是它不鼓励“改参数式调优”。很多人遇到服务器慢,第一反应是上网搜“Linux 性能优化十大参数”,然后照着 sysctl.conf 一顿改。课程反复强调的是另一套逻辑:先定义问题,再量化问题,然后用工具缩小范围,最后才动手改配置。换句话说,大部分性能问题不是靠某个神奇参数解决的,而是靠把“现象”翻译成“指标”,再用指标锁定“子系统”和“进程”。
课程里我印象很深的一个词是基线。调优前不留下基线数据,改完以后拿什么对比?凭感觉说“好像快了一点”,这在生产环境里是站不住脚的。RH442 的考试和实验都要求你先记录系统当前状态,再操作,再验证结果。这个习惯听起来简单,实际做起来特别考验耐心,但它恰恰是专业和业余的分水岭。
还有一个训练点是“知道工具看哪一层”。top 看整体负载,vmstat 看 CPU、内存、IO 的瞬时水位,pidstat 能按进程拆,perf 能往内核热点里钻,sar 负责拉长时间看趋势。工具本身不值钱,值钱的是你拿到一串数字后,能不能判断出问题出在哪个方向。这篇复盘的 swap 实验,就是一次完整的“指标翻译”过程。
1.2 为什么把这次实验单独写成第 5 篇
按照学习进度,第 5 篇正好进入内存子系统与虚拟内存管理的主题。RH442 的官方课程里,内存部分远不止 free 和 top 里的那两行,它会讲到页缓存、匿名页、回收机制、swap 设备、NUMA 亲和性,还有 systemd/cgroup 对资源的约束。这些知识点分开看都不难,但组合在一起,就会出现我接下来要复现的这种“看起来内存够用,实际上 swap 疯狂抖动”的诡异现象。
这个案例的根因落在一个很容易被忽略的点上:进程被 systemd 服务单元限制在一个过低的 MemoryMax 里。物理机内存再大,cgroup 这一层已经把进程的“可分配上限”卡死了,内核只能不停地把匿名页换到 swap。这正好把 RH442 涉及的几个重点串起来了:cgroup v2 的层次结构、memory.max 的回收逻辑、swap 参数的作用边界,以及调优后如何验证。
我把实验完整跑了一遍,过程中还踩了几个坑,比如误以为 vm.swappiness 是万能开关,比如一开始没排查 tuned profile 是否和手工参数冲突。这些经验写在文档里往往只有一句话,真正自己踩一遍才记得住。所以我决定把这第 5 篇写成一份带完整排查链路的记录,而不是知识点罗列。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基线环境与工具集合:我的调优实验台长什么样
既然是复现问题,环境就不能太随意。RH442 的学习环境最好能贴近真实服务器,但又不至于复杂到干扰判断。我最终用了 RHEL 9.3 的虚拟机,4 个 vCPU、8 GiB 内存、系统盘放在 virtio-scsi 控制器下,swap 单独划了一个 4 GiB 的分区。虚拟化层选 KVM,因为这样 CPU 型号和内存布局都稳定,不容易出现云主机上常见的 CPU steal 干扰。
2.1 实验环境的搭建细节
我建议你用一台干净的最小化安装系统来做这类实验,不要装桌面环境,也不要装一堆乱七八糟的监控代理。最小化系统带来的好处是:出问题时,你看到的现象几乎都能归因到目标服务上,不会被其他进程搅浑。磁盘方面,我特意把 swap 放在独立分区,而不是用一个 swap 文件,这样在做内存压力测试时,读写路径更接近传统物理服务器。
虚拟机的内存大小不用太大,8 GiB 足够。为了让“物理内存有富余但进程 swap 抖动”的现象能够出现,需要留出足够的空闲内存,否则系统整体内存不足导致的 swap 和 cgroup 限制导致的 swap 会混在一起,很难讲清楚。我另外给虚拟机开了 2 个 NUMA node 的拓扑,不过实际排查过程中 NUMA 并没有成为瓶颈,倒是后面验证阶段需
