Linux 性能问题很少是“某个工具不会用”,而是不知道看什么、看了不会解释、解释了不敢改。真正的工作方法是:先定义业务目标和基线,再按 CPU、内存、存储、网络、内核、容器逐层定位,最后用可回滚的变更验证收益。
本文以资深 Linux 运维 + SRE 视角重写,覆盖 USE/RED、/proc、PSI、cgroups v2、perf/eBPF、CPU/内存/IO/网络、容器与 Kubernetes、SRE 实践、调优参数、故障决策树和基准测试。
性能优化的第一原则:先测量,再假设,最后验证。没有基线的调优,往往只是把问题挪到别处。
性能工程方法论
USE 与 RED
USE(资源视角):
- Utilization:资源使用率。
- Saturation:资源饱和/排队程度。
- Errors:错误。
对每个资源(CPU、内存、磁盘、网络、文件描述符、连接数)都问这三个问题。
RED(服务视角):
- Rate:请求速率。
- Errors:错误率。
- Duration:延迟分布。
USE 找瓶颈,RED 看用户体验。两者结合,避免“CPU 很闲但用户很慢”。
症状 vs 原因
- 用户报“慢”是症状;CPU 高、IO 等待、锁竞争是可能原因。
- 不要看到 CPU 高就扩容;先确认 CPU 是否真的是瓶颈。
- 不要看到
%wa 高就换盘;先看是否有大量同步写、NFS、fsync、内存回收。
- 不要看到 load 高就加 CPU;load 包含 D 状态(不可中断睡眠),可能是 IO/NFS/内核锁。
基线、负载特征与容量
- 建立正常时段的基线:CPU、内存、IOPS、延迟、网络、连接数、错误率。
- 区分工作负载:CPU 密集、IO 密集、内存密集、网络密集、混合。
- 识别峰值/周期性/突发;容量按峰值 + 故障切换 + headroom。
- 用 SLO 定义“够快”:P50/P95/P99、成功率、饱和度。
性能分析层次
业务/SLO → 应用(代码、锁、GC、连接池) → 运行时/容器(cgroup、JVM、Go) → 系统调用/内核(syscall、调度、IO、网络) → 硬件/虚拟化(CPU、内存、磁盘、网卡、NUMA、steal)
|
从外到内定位,避免一上来就 perf 全局采样。
优化闭环
- 定义问题与目标(SLO/延迟/吞吐/成本)。
- 建立基线,复现问题。
- 分层观测,找瓶颈与证据。
- 提出假设,做单变量变更。
- 压测/灰度验证收益。
- 观察副作用(其他资源、稳定性、成本)。
- 固化配置/代码,补监控与回归测试。
Linux 性能观测基础
/proc 与 /sys
/proc/stat:CPU、上下文切换、中断、软中断。
/proc/meminfo:内存、page cache、slab、可用内存。
/proc/vmstat:页面回收、swap、THP、OOM、写回。
/proc/diskstats:块设备 IO。
/proc/net/*:TCP/UDP、snmp、netstat、conntrack。
/proc/interrupts、/proc/softirqs:中断/软中断。
/proc/pressure/*:PSI。
/sys/fs/cgroup/*:cgroup v2 资源与统计。
/sys/block/*/queue/*:IO 调度、队列、rotational、nr_requests。
/sys/class/net/*/statistics/*:网卡计数。
PSI 衡量资源不足导致任务停顿的时间比例,比利用率更接近“饱和”:
cat /proc/pressure/cpu cat /proc/pressure/memory cat /proc/pressure/io
|
输出:
some avg10=0.00 avg60=0.00 avg300=0.00 total=0 full avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
some:至少有一个任务因资源停顿。
full:所有可运行任务都停顿(CPU 没有 full)。
avg10/60/300:10s/60s/300s 滑动平均。
total:累计微秒。
PSI 是容器/Kubernetes 场景下非常有用的饱和信号:
cpu.pressure 高:CPU 争抢。
memory.pressure 高:内存回收/直接 reclaim 造成停顿。
io.pressure 高:IO 排队。
cgroup v2 中也有 cpu.pressure、memory.pressure、io.pressure。
cgroups v2
关键控制器:
| 控制器 |
关键文件 |
| cpu |
cpu.max、cpu.weight、cpu.stat |
| cpuset |
cpuset.cpus、cpuset.mems |
| memory |
memory.max、memory.high、memory.current、memory.stat、memory.events |
| io |
io.max、io.weight、io.stat |
| pids |
pids.max、pids.current |
重点指标:
cpu.stat:nr_periods、nr_throttled、throttled_usec。
memory.events:high、max、oom、oom_kill。
memory.stat:anon、file、slab、kernel_stack、pagetables、sock。
io.stat:每个设备的 rbytes/wbytes/rios/wios/dbytes/dios。
*.pressure:PSI。
perf 与 eBPF
perf stat:CPU 周期、指令、cache miss、上下文切换、page fault。
perf top:实时热点。
perf record -g + flamegraph:CPU 火焰图。
perf sched:调度延迟、迁移。
perf trace:系统调用。
perf c2c:cache line 争用。
bpftrace/BCC:内核态追踪,低开销。
ftrace:内核函数/事件追踪。
strace:用户态系统调用;开销大,短时使用。
原则:
- 先看指标,再用 tracing 定位。
- 生产采样要控制时长、频率、开销。
- 火焰图看“宽”的栈,不要只看单个热点。
CPU
关键概念
- 逻辑 CPU:
lscpu、nproc、/proc/cpuinfo。
- 超线程:同一物理核的两个逻辑 CPU 共享执行单元;CPU 密集任务可能互相拖累。
- NUMA:CPU 访问本地内存快,跨 NUMA 慢;关注
numastat、numactl。
- CFS/EEVDF:现代 Linux 调度器;关注 runqueue、调度延迟、CPU throttling。
- nice/priority:普通进程 nice 影响权重;RT 进程优先级更高,慎用。
- CPU governor:
performance/schedutil/powersave;云主机可能不可控。
- steal:虚拟化环境被宿主机抢走的时间。
关键指标
| 指标 |
说明 |
us |
用户态 CPU |
sy |
内核态 CPU |
ni |
nice 调整过的进程 |
id |
空闲 |
wa |
IO 等待(CPU 空闲但有未完成 IO) |
hi |
硬中断 |
si |
软中断 |
st |
被虚拟化偷走 |
| load average |
可运行 + 不可中断任务;不是 CPU 使用率 |
| runqueue |
可运行任务排队 |
| context switches |
上下文切换 |
| CPU throttling |
cgroup quota 用尽 |
工具
top -H -p <pid> htop mpstat -P ALL 1 pidstat -u -w -t 1 vmstat 1 sar -u 1 perf stat -p <pid> sleep 5 perf top perf record -F 99 -g -p <pid> -- sleep 30 turbostat cpupower frequency-info lscpu numactl --hardware
|
解释
- load 高但 CPU 低:可能是 D 状态(IO/NFS/内核锁)、大量线程、内存回收。
- us 高:应用计算/锁/GC/循环。
- sy 高:系统调用、网络协议栈、文件系统、驱动、容器运行时。
- si 高:网络/块设备软中断;看
/proc/softirqs、网卡队列、RPS/XPS。
- wa 高:同步 IO、fsync、NFS、内存回收;NVMe/异步 IO 下 wa 可能不高。
- st 高:宿主机超卖/邻居争抢;云厂商侧问题。
- CPU throttling:cgroup
cpu.max 限制;cpu.stat 的 nr_throttled/throttled_usec。
优化
- 减少锁竞争、无谓循环、序列化/反序列化。
- 调整线程/进程模型,避免过多上下文切换。
- 用 CPU affinity/cpuset 绑定关键服务,减少迁移。
- NUMA 绑定:
numactl --cpunodebind --membind,避免跨 NUMA。
- 合理设置 cgroup
cpu.weight/cpu.max;不要给延迟敏感服务过低 quota。
- 避免过度超线程争抢;CPU 密集服务可关闭 HT 或绑定物理核。
- 升级内核/编译器/运行时;用 perf 找热点。
- 扩容前确认不是 IO/锁/GC 导致的“假 CPU 高”。
内存
关键概念
- RSS:进程实际驻留物理内存。
- PSS:按共享页比例分摊,容器/多进程更准确。
- Anon:匿名页(堆/栈),不可直接回收。
- File/page cache:文件缓存,可回收;
Cached、Buffers。
- Slab:内核对象缓存;
SReclaimable 可回收。
- Swap:换出匿名页;延迟高,数据库通常不建议依赖。
- THP:透明大页;减少 TLB miss,但可能造成延迟抖动/内存放大。
- NUMA:跨节点访问延迟;
numastat。
- PSI memory:内存回收造成的停顿。
关键指标
free -h cat /proc/meminfo vmstat 1 sar -r 1 smem -tk slabtop numastat cat /proc/pressure/memory
|
重点:
MemAvailable:更接近“还能给应用多少内存”。
Dirty/Writeback:待写回/正在写回。
Slab/SReclaimable:内核缓存。
AnonPages:匿名页。
SwapCached、pgscan、pgsteal、pgmajfault。
oom_kill、memory.events。
OOM
- 内核 OOM killer 根据
oom_score 选择牺牲进程;oom_score_adj 可调。
- cgroup v2
memory.max 触发 cgroup OOM;memory.events 记录 oom/oom_kill。
dmesg -T | grep -i oom、journalctl -k。
- OOM 不一定是“内存泄漏”:可能是 limit 太小、page cache 太多、突发流量、内存碎片。
优化
- 找出真正的内存使用者:
smem -tk、ps_mem、cgroup memory.stat。
- 区分 page cache 与 anon;不要看到
free 低就加内存。
- 调整
vm.swappiness(降低不等于禁用)、vm.min_free_kbytes、vm.dirty_*。
- 评估 THP:数据库/延迟敏感服务常用
madvise 或关闭。
- 限制容器
memory.max,设置合理 requests/limits;避免 limit=request 过紧。
- 检查内存泄漏:RSS 持续增长、heap profile、
memleak eBPF。
- NUMA 绑定,避免跨节点分配。
- 大页(HugePages)用于特定数据库/DPDK;不是通用优化。
存储与文件系统
IO 路径
应用 read/write → 页缓存(page cache) → 文件系统(ext4/xfs/overlay/NFS) → 块层(blk-mq、IO 调度) → 设备(NVMe/SSD/HDD/云盘)
|
- 读命中 page cache 不落盘。
- 写先写 page cache,后台 writeback;
fsync 强制落盘。
- 直接 IO(O_DIRECT)绕过 page cache,数据库常用。
- 异步 IO(io_uring/AIO)提升并发。
- 云盘/网络存储的延迟和抖动与本地 NVMe 差异很大。
关键指标
iostat -x 1 iotop -o pidstat -d 1 vmstat 1 cat /proc/pressure/io
|
iostat -x 重点:
| 字段 |
含义 |
r/s / w/s |
IOPS |
rkB/s / wkB/s |
吞吐 |
r_await / w_await |
平均等待(队列 + 服务) |
aqu-sz |
平均队列深度 |
%util |
设备忙比例;NVMe/并行设备可能失真 |
rareq-sz / wareq-sz |
平均请求大小 |
注意:
%util 接近 100% 不一定是瓶颈;看 await、队列、应用延迟。
await 高可能是队列深、设备慢、文件系统/云盘抖动。
- 写放大、fsync、元数据操作(stat/create/rename)会显著影响延迟。
- NFS 的
await 包含网络/服务端延迟。
工具
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 \ --size=1G --runtime=60 --time_based --group_reporting --lat_percentiles=1 blktrace -d /dev/nvme0n1 -o trace bpftrace -e 'tracepoint:block:block_rq_issue { @[comm] = count(); }' biolatency-bpfcc biosnoop-bpfcc cachestat-bpfcc
|
优化
- 用
noatime 减少元数据写。
- 数据库用 O_DIRECT/合适 IO 调度;NVMe 常用
none/mq-deadline,HDD 可 bfq。
- 调整
vm.dirty_ratio/dirty_background_ratio,避免突发 writeback 抖动。
- 文件系统:XFS 适合大文件/高并发,ext4 通用;按业务测试。
- 定期
fstrim(SSD/云盘),确认是否支持 discard。
- 避免小文件随机写、频繁 fsync;批量/合并写。
- 监控 inode、磁盘空间、队列深度、云盘 IOPS/吞吐上限。
- NFS:调
rsize/wsize、hard/soft、nconnect,监控网络/服务端。
- 容器 overlay 写放大:热数据写 volume,不要写容器层。
网络
路径
应用 socket → 内核 TCP/IP → qdisc/网卡队列 → 驱动/网卡 → 交换机/云网络
|
关键指标
ss -s ss -lntp ss -ti nstat -az ip -s link tc -s qdisc ethtool -S eth0 ethtool -g eth0 conntrack -S cat /proc/net/softnet_stat
|
重点:
ss -s:连接数、TIME_WAIT、orphan。
ss -ti:拥塞窗口、RTT、重传、发送/接收队列。
nstat:TCP 重传、丢包、连接失败、listen overflow。
tc -s qdisc:队列 backlog、丢包。
ethtool -S:网卡丢包、错误、队列。
conntrack -S:连接跟踪插入失败/丢包。
/proc/net/softnet_stat:每 CPU backlog/dropped。
常见问题
- TIME_WAIT 多:短连接多;
tcp_tw_reuse 可缓解客户端,但不要盲目开。
- conntrack 满:
nf_conntrack: table full, dropping packet;调大 nf_conntrack_max 或减少连接。
- SYN backlog 溢出:
somaxconn、tcp_max_syn_backlog、应用 backlog。
- 网卡队列丢包:RPS/XPS、IRQ affinity、多队列、
netdev_max_backlog。
- 重传/乱序:网络质量、MTU、拥塞控制、云网络。
- DNS 慢:
resolv.conf、CoreDNS、ndots、缓存。
- MTU 问题:VXLAN/overlay/跨云路径,
ping -M do -s 验证。
优化
- 使用连接池、长连接、
SO_REUSEPORT、epoll/io_uring。
- 调整
somaxconn、tcp_max_syn_backlog、netdev_max_backlog、rmem/wmem。
- 评估拥塞控制:BBR vs cubic,按网络测试。
- 多队列网卡:IRQ affinity、RPS/XPS,避免单 CPU 软中断打满。
- 减少跨可用区/跨地域调用;用 CDN/边缘/就近接入。
- 监控 P99 延迟、重传、丢包、连接失败,不只看带宽。
中断软中断与内核
观测
cat /proc/interrupts cat /proc/softirqs mpstat -I ALL 1 cat /proc/net/softnet_stat
|
- 硬中断集中在某 CPU:IRQ affinity/irqbalance。
- 软中断(NET_RX/NET_TX)高:网络流量大、单队列、RPS 未配置。
ksoftirqd CPU 高:软中断处理不过来。
%si 高但应用 CPU 不高:网络/块设备中断/软中断瓶颈。
优化
- 开启多队列、RSS、RPS/XPS。
- 调整 IRQ affinity,让网卡中断分散到多 CPU。
- 避免单线程处理所有网络流量。
- 评估
napi/gro/tso 等 offload;不是所有场景都开。
- 容器网络(veth/overlay/eBPF)会增加软中断/转发开销,必要时用 eBPF/DPDK/智能网卡。
容器与 Kubernetes
cgroups v2
cpu.max:quota/period;quota 过低会 throttling。
cpu.weight:相对权重,不是硬上限。
memory.max/memory.high:硬限制/软限制。
io.max:IOPS/带宽限制。
pids.max:进程/线程上限。
*.pressure:PSI。
关键指标:
container_cpu_cfs_throttled_seconds_total
container_cpu_usage_seconds_total
container_memory_working_set_bytes
container_memory_rss
container_oom_events_total
container_fs_reads/writes_bytes_total
kubelet_evictions
node_pressure_*
Kubernetes 节点
requests 决定调度;limits 决定运行时上限。
- CPU limit 导致 CFS throttling;延迟敏感服务慎用低 limit。
- Memory limit 导致 OOMKilled;
memory.high 可做软限制。
SystemReserved/KubeReserved/evictionHard 保护系统。
cpuManager static policy + cpuset 用于绑核;topologyManager 用于 NUMA 对齐。
- 节点压力(MemoryPressure/DiskPressure/PIDPressure)触发驱逐。
- 监控 cgroup PSI、throttling、OOM、eviction。
容器性能反模式
- 所有容器不设 requests/limits,导致调度/隔离失效。
- CPU limit 过低,导致频繁 throttling。
- Memory limit 等于 request,突发即 OOM。
- 把热数据写容器层/overlay,导致写放大。
- 不限制日志,磁盘被日志打满。
- 节点超卖严重,PSI/steal 高。
- 用
latest/大镜像,冷启动慢。
SRE 性能实践
SLI/SLO
- 延迟:P50/P95/P99,按接口/租户。
- 吞吐:QPS、成功率。
- 饱和度:CPU throttling、PSI、队列深度。
- 错误预算驱动容量/优化优先级。
观测
- Metrics:RED/USE、PSI、cgroup、节点、应用。
- Logs:结构化、采样、关联 trace。
- Traces:跨服务延迟分解。
- Profiles:perf/eBPF/pprof 持续剖析。
- Events/audit:变更、驱逐、OOM、重启。
告警
- 告警基于症状:延迟、错误率、SLO 燃尽。
- 资源告警作为辅助:饱和度、PSI、磁盘/inode、证书。
- 避免“CPU > 80%”这类无行动告警。
- 告警要有 runbook、owner、升级路径。
容量与压测
- 用真实流量模型压测,不用单一
ab 数字。
- 关注 P99、协调遗漏(coordinated omission)、冷启动。
- 预留故障切换容量和 headroom。
- 压测环境与生产硬件/网络/内核/配置一致。
- 变更前做性能回归;变更后看 SLO。
事故与复盘
- 性能事故也要时间线、影响、根因、行动项。
- 区分“容量不足”“代码回归”“配置错误”“依赖故障”。
- 复盘后补监控、压测、容量模型、runbook。
工具速查
CPU/进程
top -H -p <pid> htop mpstat -P ALL 1 pidstat -u -w -t 1 ps -eo pid,ppid,stat,pcpu,pmem,comm --sort=-pcpu | head perf stat -p <pid> sleep 5 perf top perf record -F 99 -g -p <pid> -- sleep 30
|
内存
free -h vmstat 1 sar -r 1 smem -tk slabtop numastat cat /proc/meminfo cat /proc/pressure/memory
|
磁盘/IO
iostat -x 1 iotop -o pidstat -d 1 df -hT df -i lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,ROTA,SCHED cat /proc/pressure/io fio ...
|
网络
ss -s ss -lntp ss -ti nstat -az ip -s link tc -s qdisc ethtool -S eth0 conntrack -S mtr -rw host tcpdump -i any -nn port 443
|
追踪
strace -f -T -e trace=network,file -p <pid> perf trace -p <pid> bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm] = count(); }' biolatency-bpfcc tcpconnect-bpfcc runqlat-bpfcc offcputime-bpfcc
|
容器/系统
systemd-cgtop systemctl status <service> journalctl -u <service> -f journalctl -k -f cat /proc/pressure/*
|
调优参数
sysctl 常用
# 文件描述符 fs.file-max = 2097152 fs.nr_open = 2097152
# 内存/写回 vm.swappiness = 10 vm.dirty_background_ratio = 5 vm.dirty_ratio = 15 vm.min_free_kbytes = 65536 vm.max_map_count = 262144
# 网络 net.core.somaxconn = 4096 net.ipv4.tcp_max_syn_backlog = 8192 net.core.netdev_max_backlog = 16384 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_congestion_control = bbr net.core.default_qdisc = fq
# conntrack net.netfilter.nf_conntrack_max = 1048576
|
注意:
- 不要复制网络上的“万能 sysctl”;按业务/内核/云环境测试。
tcp_tw_reuse 只对客户端有效,服务端短连接另有方案。
swappiness=0 不是“禁用 swap”,仍可能回收。
- 改之前记录基线,改之后验证延迟/吞吐/稳定性。
systemd
[Service] LimitNOFILE=65535 LimitNPROC=65535 TasksMax=4096 MemoryMax=2G CPUQuota=200% IOWeight=100
|
CPU
cpupower frequency-info cpupower frequency-set -g performance tuned-adm list tuned-adm profile throughput-performance
|
- 云主机/容器可能无法直接调 governor。
performance 省延迟但耗电/发热;schedutil 更平衡。
- 不要盲目关超线程;按负载测试。
磁盘
- NVMe:
none/mq-deadline;HDD:bfq/mq-deadline。
noatime、nodiratime(谨慎)。
fstrim 定期执行。
- 数据库按厂商建议设置
O_DIRECT、fsync、WAL。
网络
- 多队列/RPS/XPS/IRQ affinity。
SO_REUSEPORT、连接池、keepalive。
- 拥塞控制按网络测试;BBR 不一定适合所有场景。
- 云网络注意带宽/包速率/连接数上限。
故障排查决策树
load 高但 CPU 不高
uptime vmstat 1 ps -eo state,pid,ppid,comm | awk '$1 ~ /D/' cat /proc/<pid>/stack iostat -x 1
|
可能:
- D 状态 IO/NFS/内核锁。
- 内存回收/直接 reclaim。
- 大量线程/上下文切换。
- 虚拟化 steal。
CPU 高
top -H mpstat -P ALL 1 pidstat -u -t 1 perf top
|
区分:
- us 高:应用计算/锁/GC。
- sy 高:syscall/网络/文件系统/驱动。
- si 高:软中断/网络。
- st 高:宿主机争抢。
内存高/OOM
free -h smem -tk slabtop cat /proc/meminfo cat /proc/pressure/memory dmesg -T | grep -i oom cat /sys/fs/cgroup/.../memory.events
|
区分:
- page cache 可回收。
- anon 泄漏/堆增长。
- slab 内核缓存。
- cgroup limit/OOM。
- THP/碎片。
IO 慢
iostat -x 1 pidstat -d 1 cat /proc/pressure/io biolatency-bpfcc
|
区分:
- 设备饱和/队列深。
- fsync/小文件/元数据。
- 写回/dirty 比例。
- 云盘 IOPS/吞吐上限。
- NFS/网络存储。
网络慢/丢包
ss -s ss -ti nstat -az tc -s qdisc ethtool -S eth0 conntrack -S mtr -rw host
|
区分:
- 应用连接池/端口耗尽。
- TIME_WAIT/conntrack。
- 网卡队列/软中断。
- 网络丢包/重传/MTU。
- DNS。
容器异常
systemd-cgtop cat /sys/fs/cgroup/.../cpu.stat cat /sys/fs/cgroup/.../memory.events kubectl describe pod kubectl top pod
|
区分:
- CPU throttling。
- memory limit/OOM。
- IO 限制。
- pids 限制。
- 节点压力/驱逐。
基准测试
原则
- 明确目标:延迟、吞吐、并发、容量。
- 环境一致:CPU/内存/磁盘/网络/内核/配置。
- 预热、稳态、多轮;报告 P50/P95/P99,不只看平均。
- 避免协调遗漏:闭环压测要按预期延迟发压。
- 监控被测系统和压测端,避免压测端先瓶颈。
- 一次只改一个变量。
工具
sysbench cpu --threads=4 run
sysbench memory --threads=4 run
fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k \ --numjobs=4 --size=1G --runtime=60 --time_based --group_reporting
iperf3 -s iperf3 -c <server> -P 8 -t 30
wrk -t4 -c100 -d30s --latency http://host/
|
指标
- 延迟:P50/P95/P99/P999。
- 吞吐:QPS、MB/s、IOPS。
- 错误率、超时。
- 资源:CPU/内存/IO/网络/PSI。
- 稳定性:长时间运行、GC、内存增长。
优化原则与反模式
原则
- 先测量,后优化。
- 先找瓶颈,再谈参数。
- 一次只改一个变量。
- 保留基线、回滚方案。
- 优化要验证业务 SLO,不只跑分。
- 关注副作用:其他资源、稳定性、成本。
- 配置即代码,变更可审计。
- 容量和性能是持续过程,不是一次性调参。
反模式
- 盲目抄 sysctl。
- 看到 CPU 高就加机器。
- 看到 free 低就加内存。
- 看到
%util 100% 就换盘。
- 只优化平均延迟,不看 P99。
- 压测环境与生产不一致。
- 压测端先成为瓶颈。
- 只压不监控,或只监控不压。
- 调优后不做回归/灰度。
- 把性能问题归因于“代码慢”,没有证据。
- 忽略容器 cgroup/节点压力。
- 忽略虚拟化 steal/邻居噪声。
生产检查清单
观测
容量
调优
SRE
参考资料