ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

虚拟化资源池实施调优:超分比、缓存策略与热迁移故障复现

虚拟化资源池实施调优:超分比、缓存策略与热迁移故障复现

简介:面向虚拟化实施与运维岗位的技术人员,这份资料围绕 VMware 与 Citrix 两类平台在项目落地过程中容易出现的问题,整理个人实施经验与常见故障的解决思路,适合正在搭建、调试或维护虚拟化环境的中初级工程师对照排查。内容不局限于单一产品操作,而是把实施阶段可能遇到的配置异常、环境兼容与运行维护问题归入问题—原因—处理方法的脉络,便于读者按现象定位环节、理解处置逻辑,并沉淀为可复用的排错清单。压缩包约 15.45MB,以 zip 形式提供,便于集中留存和随取随查。目前已有 502 人学习,说明其在虚拟化实施群体中具备一定参考价值。读者可从中获得两类主流虚拟化平台的问题处理经验、常见故障的应对思路以及实施过程中的检查视角,用于缩短排查时间、减少重复试错。

1. 从一次上线两周后的性能告警说起

某高校实验室把二十多台物理服务器整合成虚拟化资源池,第一批虚机上线第二周,问题集中爆发:数据库写入延迟从 3ms 涨到 40ms,热迁移卡在 90% 不动,备份窗口从 1 小时拉长到 4 小时。单看每一条都不像虚拟化软件本身的缺陷,真正的原因散落在超分比、内存回收、存储缓存策略和网桥参数这四处。这套方案要解决的就是这类“硬件没问题、软件也没报错,但业务就是慢”的实施期问题,适合正在做资源池整合的运维、需要交一份完整虚拟化方案的学生,以及要把老系统往虚机上搬的开发者。下面按需求、架构、实现、避坑、验收的顺序,把每个环节的判断依据和可抄的配置都摊开。

2. 需求梳理与选型:用故障清单倒推架构

虚拟化实施最容易翻车的地方,是把选型当成一次技术选美,先定平台再想业务。我习惯反过来做:先把“上线后可能出什么问题”列成清单,再拿清单去筛技术栈。这样选出来的东西不一定最时髦,但每一项都有对应的故障场景兜底。这一章把负载画像、技术栈边界、基线采集三件事讲透,后面所有配置都建立在这三件事之上。

2.1 从业务负载反推虚拟化形态

不是所有机器都该被虚拟化。判断标准只有两条:这台机器的资源曲线是不是长期贴着上限,以及它能不能容忍几十微秒的调度抖动。编译节点看着吃 CPU,但峰值过后就闲着,适合塞进池子;关系型数据库 CPU 利用率常年 60% 以上,又是随机小 IO 加 fsync,塞进去就是给自己找事。

我一般会先做一张负载画像表,把待迁移的机器按特征归档,再决定每类负载落在哪个资源池、给多少超分比。这张表是后面所有容量规划的依据,别嫌麻烦,填一遍能省掉后面三个月的扯皮。

负载类型CPU 特征IO 特征是否适合虚拟化建议超分比
教学实验机 / 桌面云均值低、峰值突发随机小 IO适合1:6
Web / API 服务平稳、多核利用率低顺序读写为主适合1:4
CI 编译节点长时间满载大量临时文件适合但需限流1:2
关系型数据库稳态高、对 steal 敏感随机写 + fsync谨慎,缓存需独享1:1
日志检索 / 时序库中等高吞吐顺序写存储需单独规划1:2

这张表里“建议超分比”不是拍脑袋,它的口径是物理核数与 vCPU 总数的比值。1:4 意味着四个 vCPU 抢一个物理核,只有在负载均值低于 25% 时才安全。表里最容易被忽略的是 CI 编译节点,它看着像 Web 服务,实际会把宿主机 CPU 打满,必须配合后面的 cgroup 限流一起用。

还有一类负载要单独拎出来:本身就是虚机的机器。有些业务跑在别人提供的云主机上,再往下虚拟化一层,%steal会叠加,延迟抖动完全不可控。这类机器的超分比一律按 1:1 处理,能物理部署就别虚拟化。

2.2 技术栈选型与边界

选型不是选单个软件,是把 hypervisor、管理接口、存储、网络四层拼成一套能自洽的组合。拼错的典型症状是:hypervisor 选得挺对,结果存储走的是宿主机页缓存,一掉电数据全丢;或者网络用了复杂方案,结果没人会排查。

层次常见候选取舍要点
Hypervisor裸金属型 / 宿主型裸金属型没有宿主操作系统这一层开销,IO 路径短,生产优先;宿主型适合单机开发和演示
管理接口libvirt + virsh / 平台化编排小规模用 libvirt 足够,配置透明、可版本化;超过几十台再考虑编排层
存储本地 LVM / NFS / 分布式块存储本地 LVM 延迟最低但不支持迁移;共享存储支持迁移但引入网络延迟
网络Linux Bridge / OVS单 VLAN 用 Bridge 够;需要 VLAN tag、流表和端口安全再上 OVS

我的默认组合是:裸金属 KVM + libvirt + 本地 LVM 做系统盘 + 共享存储做数据盘 + Linux Bridge 起步。这套组合的好处是每一层都能用系统自带工具查,virsh、iostat、brctl、tcpdump全在标准镜像里,出事的时候不用等厂商。

提示:选型时把“谁来排查”写进文档。如果团队里没人碰过 OVS 流表,就别为了 VLAN 隔离上 OVS,Linux Bridge 加 vlan 子接口一样能做,出问题时看ip -d link就够。

2.3 实施前的基线采集

虚拟化上线前必须留一份物理机基线,否则上线后性能下降,你连“原来是多少”都说不清,只能靠感觉吵架。这份基线要在业务迁移前采集,采集完存两份,一份进文档,一份留在机器上。

#!/usr/bin/env bash # host-baseline.sh —— 在物理机上执行,采集虚拟化上线前的基线数据 set -euo pipefail OUT="/var/log/baseline-$(hostname)-$(date +%F).log" { echo "===== CPU =====" lscpu | grep -E 'Model name|Socket|Core|Thread|NUMA node\(s\)' # steal 高说明这台物理机本身是别人的虚机,超分要比常规更保守 grep -E '^cpu ' /proc/stat | awk '{print "steal_ticks="$9}' echo "===== 内存 =====" free -m awk '/MemTotal|MemAvailable|SwapTotal/ {print}' /proc/meminfo echo "===== 磁盘 =====" # ROTA=1 机械盘,ROTA=0 固态盘,调度器选择完全不同 lsblk -d -o NAME,SIZE,ROTA,TYPE,MODEL for q in /sys/block/sd*/queue /sys/block/nvme*/queue; do [ -d "$q" ] || continue echo "$q scheduler=$(cat "$q/scheduler" 2>/dev/null)" echo "$q nr_requests=$(cat "$q/nr_requests" 2>/dev/null)" done echo "===== 网卡 =====" for i in $(ls /sys/class/net | grep -v '^lo$'); do echo "--- $i ---" ethtool -i "$i" 2>/dev/null | head -3 # 队列数决定了后面多队列能开多大,队列不足是网络丢包的常见伏笔 ethtool -l "$i" 2>/dev/null | tail -n +2 ip -d link show "$i" | grep -E 'mtu|qdisc' done } | tee "$OUT" echo "基线已写入 $OUT"

脚本里三处判断值得单独说。ROTA字段决定 IO 调度器:机械盘用mq-deadline保证请求不饿死,固态盘直接none,让块层少做一次排序。ethtool -l看的是网卡硬件队列数,很多板载网卡默认只开 1 个队列,虚机多播流量一上来就丢包,问题在虚拟化层查半天查不出来。mtu要提前记,后面配网桥和隧道时,MTU 不一致导致的分片是排查成本最高的一类故障。

基线采完,还要定一个可量化的验收前提:同样负载下,虚拟化后的关键指标下降不超过 10%。这个数字写进方案里,验收时才有得谈。

3. 总体架构设计:三层资源池与四个模块的职责

物理机整合成池子,架构上要划清楚四件事谁负责:计算、存储、网络、管理。划不清的后果是每出一次故障,三拨人互相说是对方的问题。下面按层拆,每一层给出关键参数和配置样例,参数值都来自前一张负载画像表。

3.1 计算层:超分比、CPU 亲和性与 NUMA 对齐

计算层最容易犯的错是把超分比设成一个全局值。正确做法是按资源池分:教学池 1:6,Web 池 1:4,数据库池 1:1,池子之间用不同的宿主机集群隔离,避免一台机器上既有 1:1 又有 1:6 的负载互相干扰。

超分比定完,还要处理 NUMA。物理机有两个 NUMA 节点时,虚机的 vCPU 如果跨节点分布,内存访问会有一半走远端,延迟翻倍。我一般会把虚机 vCPU 数量限制在单个 NUMA 节点的核数以内,并用绑核把 emulator 线程和 vCPU 一起钉死。

# 查看宿主机 NUMA 拓扑,确认每个节点的 CPU 范围 numactl --hardware # 把 web-01 的 vCPU 与 emulator 线程绑定到同一 NUMA 节点(节点 1,物理核 8-15) for v in 0 1 2 3; do virsh vcpupin web-01 "$v" $((8 + v)) done virsh emulatorpin web-01 8-11 # 校验绑定结果,确认没有 CPU 落在跨节点范围 virsh vcpupin web-01 virsh emulatorpin web-01

vcpupin的第二个参数是 vCPU 编号,第三个是物理 CPU 编号;emulatorpin管的是 QEMU 主线程和 IO 线程,不绑的话它可能在任意核上跳,和 vCPU 抢 cache。numactl --hardware要先跑一遍拿到节点划分,不同机型差别很大,别照抄网上的核号。

绑核的代价是失去调度弹性,所以只给数据库和延迟敏感的虚机绑,Web 池不绑。这个取舍要写进设计文档,否则后面有人给所有虚机都加绑核,宿主机反而跑不满。

3.2 存储层:三种形态与缓存策略的搭配

存储层按用途分三种形态:系统盘用本地 LVM,数据盘用共享存储,临时盘用本地目录。分开的理由很直接——系统盘重装频繁、不需要迁移,本地盘最快;数据盘要跟着虚机迁移,必须共享;临时盘丢了无所谓,本地目录最省事。

缓存策略是这一层最关键的参数,配错了轻则性能腰斩,重则掉电丢数据。

cache 模式写入路径掉电安全性适用场景
none直通后端,O_DIRECT取决于后端存储生产默认,数据库必选
writeback先写宿主机页缓存宿主机掉电可能丢可重建数据、测试环境
writethrough同步写后端安全对延迟不敏感的归档盘
unsafe宿主机缓存且忽略 flush不保证只用于临时编译盘

把虚机磁盘从默认的writeback改成none,是数据库延迟从 40ms 降到 8ms 的那一步。改法是编辑虚机 XML:

<!-- 生产数据盘:绕过宿主机页缓存,直接落到共享存储 --> <disk type='network' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/> <source protocol='iscsi' name='iqn.2024-01.local:storage/data-01'/> <target dev='vdb' bus='virtio'/> <iotune> <total_iops_sec>20000</total_iops_sec> <read_iops_sec>8000</read_iops_sec> <write_iops_sec>12000</write_iops_sec> </iotune> </disk>

cache='none'配合io='native'走 Linux 原生异步 IO,避免 QEMU 自己的线程池成为瓶颈。discard='unmap'让虚机里的 TRIM 能透传到后端,否则 qcow2 或精简置备的卷只会涨不会缩。iotune是防单台虚机把存储池打满的关键,IOPS 上限按后端存储的实测能力除以虚机数量再打七折来定,宁可先紧后松。

注意:cache='none'要求后端存储自己有掉电保护。如果后端是单机 NFS 且没开 sync,等于把丢数据风险从宿主机转移到了存储端,别以为改了参数就安全了。

3.3 网络层:桥接、VLAN 与多队列

网络设计的目标是让虚机之间、虚机与物理网络之间的转发路径尽可能短。起步用 Linux Bridge,需要隔离时在桥上打 VLAN tag,需要吞吐时开多队列。

# 创建网桥并挂物理口,物理口不配 IP,只做二层转发 ip link add name br0 type bridge ip link set br0 up ip link set eth0 master br0 # 关闭 STP,避免虚机刚启动时端口处于 listening 状态导致业务连接超时 ip link set br0 type bridge stp_state 0 forward_delay 0 # MTU 必须与物理口一致,否则跨网桥的 9000 字节帧会被分片 ip link set eth0 mtu 9000 ip link set br0 mtu 9000 # 网卡多队列开到 8,队列数不超过 vCPU 数,避免中断在少数核上堆积 ethtool -L eth0 combined 8 # 虚机网卡侧同样开多队列,队列数与 vCPU 匹配 virsh edit web-01 # <driver name='vhost' queues='4'/>

stp_state 0这一条经常被跳过,代价是虚机启动后前 30 秒网络不通,业务侧看到的是“虚机起来了但服务连不上”,很容易误判成虚机没启动。多队列两边都要开:宿主机物理口开、虚机 vNIC 也开,只开一边等于没开,中断还是全部落到 CPU0。

VLAN 隔离用 Bridge 的 vlan 子接口做,命令简单,排查也直观,ip -d link show就能看到 tag。OVS 的流表方案功能更强,但没有专人维护就是黑匣子,出问题时连包走到哪一跳都不知道。

3.4 管理层:监控埋点与阈值

管理层不追求大而全,只做一件事:把“虚机变慢”这件事拆成能定位到具体层的指标。我在每个宿主机上固定采集四个指标,阈值写死,超了自动告警。

指标采集方式预警阈值处置动作
CPU 就绪等待%steal+%wait采样持续 5 分钟 > 5%下调超分比或迁移虚机
内存气球回收率balloon 统计 / 分配量回收 > 20%扩容或迁移
存储 awaitiostat -x> 20ms 持续 10 分钟改缓存策略或限流
网络重传率ss -s/netstat -s> 0.5%查队列与 MTU

这四个指标的共同点是:都能直接对应到前三个章节里的某个参数。就绪等待对应超分比,气球回收对应内存配置,await 对应 cache 模式和 iotune,重传率对应多队列和 MTU。指标和参数一一挂钩,排查时不用再猜。

4. 典型问题的落地实现:四类高频故障的处理配置

这一章把实施期最常见的四类故障拆成可执行的配置。每一条都按“看什么现象、动哪个参数、改完怎么验证”的顺序写,参数值给出取值依据,别直接抄数字。

4.1 CPU 就绪等待高:先降超分再谈限流

现象是虚机内进程响应忽快忽慢,宿主机top里%wa不高但%sy偏高。根因通常是超分比超过负载均值,多个 vCPU 抢同一个物理核,就绪队列排不上。

处理分两步。第一步把超分比从 1:4 调到 1:3,观察一周。第二步对确实吃 CPU 的虚机加 cgroup 限流,防止单台打满宿主机。

# 限制 ci-node-01 最多使用 4 个物理核的算力 # vcpu_period 单位微秒,quota/period 即核数上限 virsh schedinfo ci-node-01 --set vcpu_period=100000 --set vcpu_quota=400000 # 查看当前限制是否生效 virsh schedinfo ci-node-01 # 宿主机侧确认单台虚机的 CPU 占用 virsh domstats ci-node-01 --cpu-total

vcpu_quota设为period的 4 倍,表示这台虚机最多用满 4 个核。这个值不能低于业务正常峰值的 1.3 倍,否则限流本身就成了瓶颈。限流只解决“一台虚机拖垮整个宿主机”,不解决整体超分过高,两个手段要一起用。

验证方式很简单:改完跑一轮同样的业务压测,宿主机%steal应该降到 2% 以内,虚机内 P99 延迟波动幅度明显收窄。如果 steal 没降,说明问题不在 CPU,去看存储 await。

4.2 存储 IO 抖动:缓存模式与调度器一起改

现象是虚机内iostat的await间歇性飙到 50ms 以上,但宿主机磁盘利用率只有 30%。这类抖动多半是两个原因叠加:虚机磁盘用了writeback缓存,宿主机内存回收时批量回写造成毛刺;加上机械盘调度器用了none,请求乱序。

# 宿主机侧:机械盘改 mq-deadline,固态盘保持 none echo mq-deadline > /sys/block/sda/queue/scheduler # 持久化,重启后依然生效 cat > /etc/udev/rules.d/60-io-scheduler.rules <<'EOF' # 机械盘用 deadline 保证请求不饿死,固态盘交给硬件自己排 ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline" ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none" EOF # 虚机侧:确认磁盘缓存已改为 none,并检查 discard 是否透传 virsh dumpxml db-01 | grep -A2 '<driver name'

调度器的选择依据只有rotational一个字段,机械盘必须mq-deadline,固态盘用none减少一层排序开销。udev 规则里用KERNEL=="sd[a-z]"通配,nvme 设备单独写一条,因为 nvme 的队列机制和 SCSI 完全不同,套同一个调度器反而变慢。

改完验证看两个数:宿主机iostat -x 1的await是否稳定在 10ms 以内;虚机内同样的压测,await的最大值是否从 50ms 降到 15ms 以内。如果抖动还在,就要看共享存储链路了,用ping -M do -s 8972测 MTU,分片问题会直接反映成 IO 超时。

4.3 热迁移卡在 90%:脏页收敛与带宽设置

现象最典型:virsh migrate跑到 90% 停住,进度条不动,几分钟后超时失败。原因是虚机内存脏页产生速率超过了迁移带宽,源端刚传完的页又被改了,永远追不上。

# 实时迁移:限制带宽、开压缩、开自动收敛,最后用 post-copy 兜底 virsh migrate --live --verbose \ --bandwidth 800 \ --comp-methods lz4 \ --auto-converge \ --post-copy \ db-01 qemu+ssh://10.0.0.12/system # 迁移过程中另开窗口观察脏页速率 virsh domjobinfo db-01 --completed --keep-completed

--bandwidth单位是 MiB/s,取值是迁移专网带宽的 60%,留出余量给心跳和存储流量。--comp-methods lz4对文本类内存压缩比能到 2:1,代价是源端多耗一点 CPU。--auto-converge在脏页追不上时自动降 vCPU 频率,让虚机“慢下来”以便追上,业务会感知到短暂变慢但不中断。--post-copy是最后手段:先切过去再按需拉页,切换瞬间完成,但源端内存会被释放。

注意:--post-copy期间源端一旦宕机,虚机无法回滚,只剩半个内存镜像。生产上只在迁移窗口内开,迁移完成立刻关,别写进默认配置。

验证迁移是否健康,看domjobinfo里的dirty-rate和memory-bps两个值,前者必须小于后者的一半,否则下次还会卡。如果长期不达标,说明这台虚机内存写入太频繁,考虑把它绑到同一台宿主机上不迁移,或者改用存储层双活方案。

4.4 网络丢包:队列、MTU 和桥参数三处一起查

现象是虚机内ping网关丢包 1%~3%,ss -s看到重传率偏高,业务侧表现为长连接偶发断开。这类问题在虚拟化层查,90% 落在三处:网卡队列不足、MTU 不一致、网桥转发延迟。

# 1. 宿主机物理口和网桥 MTU 必须完全一致 ip link set eth0 mtu 9000 ip link set br0 mtu 9000 ip link show | grep -E 'eth0|br0' # 2. 网卡队列数与 vCPU 匹配,中断分散到多核 ethtool -L eth0 combined 8 grep eth0 /proc/interrupts | head -8 # 3. 关掉网桥的 STP,消除启动期 30 秒黑洞 ip link set br0 type bridge stp_state 0 forward_delay 0 # 4. 虚机 vNIC 开多队列,queue 数与 vCPU 数一致 virsh edit web-01 # <interface type='bridge'> # <source bridge='br0'/> # <model type='virtio'/> # <driver name='vhost' queues='4'/> # </interface>

顺序不能乱:先确认 MTU 一致,再看队列,最后看桥参数。MTU 不一致时,大包会被分片,表现为“小包通、大包丢”,很容易误判成防火墙问题。队列看/proc/interrupts里的分布,如果所有中断都集中在 CPU0,说明多队列没生效,检查ethtool -l和 vNIC 的queues是否都改了。

验证方法是虚机内跑ping -f -s 1400 -c 10000打满带宽,丢包率应该低于 0.1%,重传率低于 0.2%。达不到就继续往上查物理交换机端口,虚拟化层能做的到此为止。

5. 避坑清单:五个现场最容易翻车的点

下面五条都是我踩过或者看别人踩过的。共同特征是:现象看着像业务问题,根因全在虚拟化配置里,而且配置本身不报错。

现象一:虚机时钟越走越慢,一天差出十几秒。原因不是 NTP 没配,而是虚机时钟源用了默认的 HPET 模拟,定时器中断在虚拟化下被延迟。解决是把时钟源改成kvm-clock,并在虚机 XML 里加<timer name='hpet' present='no'/>、<timer name='kvmclock' present='yes'/>。改完在虚机内用chronyc tracking看 offset,应该稳定在 1ms 以内。NTP 在虚机里要保留,但它是兜底,不是主手段。

现象二:qcow2 镜像只涨不缩,磁盘用了三周从 20G 涨到 80G。原因是discard没透传,虚机里删文件后后端不知道。解决是在磁盘 driver 里加discard='unmap',虚机内挂载/etc/fstab加discard选项或者每周跑一次fstrim -av。注意后端存储必须支持精简置备才有意义,落到不支持 TRIM 的存储上,这个参数只是让 QEMU 多做一次无用功。

现象三:热迁移显示成功,业务侧却断了 3 秒。原因是迁移过程中虚机网卡的 MAC 地址表没有及时刷新,交换机还往旧宿主机转发。解决有两个方向:迁移命令加--live保证状态同步,同时在虚机内配置 gratuitous ARP,或者干脆把迁移窗口放在业务低峰。查证方法是迁移后立刻在虚机内arping -c 3 -I eth0 <网关>,能收到回应说明表已刷新。

现象四:宿主机free显示还有 40G 可用,虚机却报 OOM。原因是 KSM 内存页合并和气球回收叠加,宿主机看到的“可用”里有一部分是被合并的只读页,一旦虚机写入就会触发写时复制,瞬间吃掉大量内存。解决是关掉 KSM 或者在数据库虚机上禁用气球驱动,<memballoon model='none'/>。KSM 只适合桌面云这类大量相同镜像的场景,跑数据库是纯负担。

现象五:打完快照后性能直接腰斩。原因是快照链过长,每次读都要从最上层往下回溯,链深超过 3 层延迟就明显。解决是限制快照链深度,超过三层就做块合并(virsh blockcommit),并且绝不在数据库虚机上长期保留快照。日常备份用存储层快照而不是 qcow2 内部快照,前者不增加 IO 路径。

这五条的共性,是把“虚拟化配置”当成一次性工作。实际上每个参数都对应一个具体的故障场景,改之前想清楚它在防什么,比记住命令本身重要。

6. 验收与答辩:用故障复现清单证明方案真的落地

验收这一步最容易被做成走过场:虚机起来了、能 ping 通、业务能登录,就算完成。这种验收挡不住任何问题。我习惯的做法是准备一份“故障复现清单”,把第 4 章里的四类问题逐条复现一遍,能在 30 分钟内定位并修复,才算这套方案站得住。

验收项复现方法通过标准
CPU 超分过载池内同时跑满 3 台编译虚机%steal< 5%,业务 P99 延迟涨幅 < 20%
存储 IO 抖动单台虚机 fio 随机写打满 iotune 上限其余虚机await波动 < 5ms
热迁移收敛对写入频繁的虚机做实时迁移迁移在 90 秒内完成,业务无连接中断
网络大包转发虚机内ping -f -s 1400打满丢包 < 0.1%,重传率 < 0.2%
掉电数据安全强制关闭宿主机后重启数据盘无 fsck 错误,事务无丢失

这张表的价值在于每一项都能当场演示。答辩或者交付评审时,不用讲架构图讲半小时,直接跑一遍清单,每一项都有数字,评审的人自己就能判断这套方案靠不靠谱。

清单之外还要准备一份“参数变更记录”。虚拟化实施过程中改过的每一个参数——超分比、cache 模式、调度器、队列数——都要记下来:改之前是什么、为什么改、改完指标变成多少。这份记录在出问题的时候是救命的东西,因为半年后没人记得当初为什么把某台虚机的cache设成了writeback。

答辩时经常被问的一个问题是“这套方案和直接用现成平台有什么区别”。我的回答固定是:现成平台给的是默认值,方案给的是每个默认值背后的判断依据。默认值在测试环境能跑,在真实负载下大概率要调,调的依据就是第 2 章的负载画像和第 3 章的阈值表。把这两样东西摆出来,比讲功能列表有说服力得多。

从那以后我每次做虚拟化实施,都强制走一遍“先采基线、再定超分、改完复现”的流程,哪怕项目再小也不跳。跳过基线的那次,上线后性能下降被业务方质疑了两周,最后翻出物理机时代的监控截图才说清楚——那种被动,不如提前花两个小时采一遍数据。希望这套结构能帮到你,照着填自己的参数就能交出一份站得住的方案。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进