首页/系统/Linux 运维命令速查/场景:性能巡检基线怎么建
性能与监控48 条

场景:性能巡检基线怎么建

稳定的性能管理靠基线不是靠感觉:固定指标 + 固定频率 + 可视化;给出采集脚本与关键指标清单。

Linux 运维命令速查系统更新于 2026-10-13

性能基线是什么

性能问题最难的部分是说不清正常是什么样。基线把固定指标按固定频率以固定格式落盘,出问题时可以对比历史水位,而不是凭感觉判断。基线不追求指标全面,追求口径稳定、开销低、能长期保留。

基本信息

场景需要长期掌握机器性能水位与容量趋势
目标可对比、低成本、可长期保留的指标记录
工具链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 与 availableavailable 才是可用量,buff/cache 不等于被占用
磁盘水位df -h 关键挂载点看增长速率而非当前值,超 80% 要提前规划
iowait 与 awaitiostat -xawait 持续升高说明磁盘成为瓶颈
连接数ss -s突增可能来自业务增长,也可能是扫描
基线指标控制在 6 项以内:负载、内存 available、关键盘水位、iowait、磁盘 await、连接数,指标越多越难长期维护。
sysstat 默认已按分钟颗粒度记录 sar 数据在 /var/log/sa/ 下,先评估现成能力再决定是否自建脚本,避免重复采集。
追加型日志必须配轮转,否则采集脚本本身会变成磁盘写满的成因。

易错点

  • 指标口径前后不一致(换脚本、换字段顺序)会让历史数据不可比,上线前先定好 schema 并写进脚本注释
  • 采集脚本自身会引入开销:iostat -xz 1 2 会阻塞 1 秒,脚本必须控制耗时与并发,别把基线做成新负载
  • 只看平均值会漏掉尖峰,定时采集天然平滑瞬时峰值,秒级问题仍需专门的高频采样手段
  • 基线数据长期不轮转不归档最终会吃满磁盘,轮转与归档策略要和采集脚本一起上线

数据来源与参考

  • procps-ng / sysstat 文档
  • man 5 crontab

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌