性能基线是什么
性能问题最难的部分是说不清正常是什么样。基线把固定指标按固定频率以固定格式落盘,出问题时可以对比历史水位,而不是凭感觉判断。基线不追求指标全面,追求口径稳定、开销低、能长期保留。
基本信息
| 场景 | 需要长期掌握机器性能水位与容量趋势 |
|---|---|
| 目标 | 可对比、低成本、可长期保留的指标记录 |
| 工具链 | sysstat 自带 sar 历史数据 + 自建采集脚本 + 定时任务 + 轮转 |
| 采集频率 | 日常巡检 1-5 分钟一次足够,容量趋势可放宽到 5-15 分钟 |
典型使用场景
- 容量规划:用一周到一月的负载与磁盘水位趋势判断何时扩容,而不是等告警触发
- 故障对比:把事故时段与正常时段的数据摆在一起,快速排除资源打满这类猜测
- 变更验证:上线新版本后对比同时间段的资源消耗,量化性能回归
- 多机横向比较:同类节点用同一套指标采集,一眼看出偏高的那台
- 审计与复盘:保留历史数据,支撑事后复盘与容量报表
采集脚本示例
采集脚本示例
# /usr/local/bin/perf-snap.sh —— 每分钟落一行,字段口径固定
#!/bin/bash
TS=$(date -Is)
L=$(awk '{print $1" "$2" "$3}' /proc/loadavg)
M=$(free -m | awk '/Mem/{print $3"/"$2}')
D=$(df -h /data | awk 'NR==2{print $5}')
X=$(iostat -xz 1 2 | awk '/^(sd|nvme|vd)/ {print $1":"$(NF-1)}' | tr '\n' ' ')
echo "$TS load=$L mem=$M data=$D io=[$X]" >> /var/log/perf-baseline.log上线与核对
上线与核对
crontab -e
# * * * * * /usr/local/bin/perf-snap.sh
# 轮转:/etc/logrotate.d/perf-baseline 中 rotate 30 与 compress
sar -f /var/log/sa/sa13 | head # 对照 sysstat 自带的历史数据
tail -n 5 /var/log/perf-baseline.log # 确认字段与时间戳格式基线指标清单
| 指标 | 来源 | 关注点 |
|---|---|---|
| 负载 | /proc/loadavg 或 uptime | 与逻辑核数对比,长期高于核数说明排队 |
| 内存 | free -m 的 used 与 available | available 才是可用量,buff/cache 不等于被占用 |
| 磁盘水位 | df -h 关键挂载点 | 看增长速率而非当前值,超 80% 要提前规划 |
| iowait 与 await | iostat -x | await 持续升高说明磁盘成为瓶颈 |
| 连接数 | ss -s | 突增可能来自业务增长,也可能是扫描 |
基线指标控制在 6 项以内:负载、内存 available、关键盘水位、iowait、磁盘 await、连接数,指标越多越难长期维护。
sysstat 默认已按分钟颗粒度记录 sar 数据在 /var/log/sa/ 下,先评估现成能力再决定是否自建脚本,避免重复采集。
追加型日志必须配轮转,否则采集脚本本身会变成磁盘写满的成因。