使用sar命令深入分析Linux系统性能

在Linux系统运维和性能调优工作中,sar(System Activity Reporter) 是系统管理员不可或缺的工具之一。作为sysstat工具包的核心组件,sar能提供全面的系统性能历史数据,帮助您诊断CPU、内存、磁盘和网络等关键资源的瓶颈。与实时监控工具不同,sar的独特价值在于能回溯历史性能数据,让您能在故障发生后分析原因,这在生产环境问题排查中至关重要。

本文将深入解析sar命令的使用方法,涵盖数据收集机制、关键性能指标解读、实际应用案例及最佳实践,帮助您全面掌握这一强大的性能分析工具。


目录#

  1. sar工作原理与数据收集机制
  2. 安装与配置sysstat
  3. 核心功能与使用场景
  4. 综合实战案例
  5. 最佳实践与技巧
  6. 结论
  7. 参考文献

一、sar工作原理与数据收集机制#

sar通过周期性采集系统快照工作,由两个核心组件构成:

  1. 数据收集器(sadc)
    定时收集系统指标并存入二进制文件(默认位置/var/log/sa/saXX,XX为日期)
  2. 报告生成器(sar)
    解析二进制数据生成人类可读报告

📅 数据保存规则

  • 每10分钟收集一次(可通过cron调整)
  • 每日数据存储在/var/log/sa/saDD(DD=日期)
  • 每月数据汇总在/var/log/sa/sarXX

二、安装与配置sysstat#

安装步骤#

# Ubuntu/Debian
sudo apt update && sudo apt install sysstat
 
# RHEL/CentOS
sudo yum install sysstat
sudo systemctl enable --now sysstat

关键配置(/etc/sysstat/sysstat.conf#

HISTORY=30    # 保留30天数据
COMPRESSAFTER=15 # 15天后压缩历史数据
SADC_OPTIONS="-S DISK" # 监控所有磁盘

三、核心功能与使用场景#

3.1 CPU性能分析#

# 查看当天CPU使用率(每10分钟一个点)
sar -u 
 
# 查看指定时间段的CPU数据(10:00到12:00)
sar -u -s 10:00:00 -e 12:00:00
 
# 显示每个CPU核心的详细数据
sar -P ALL 1 5   # 每秒1次,共5次

关键指标解读

  • %user:用户态CPU时间
  • %system:内核态CPU时间
  • %iowait:等待I/O的CPU时间(>15%需警惕)
  • %steal:虚拟机被hypervisor占用的时间

3.2 内存与交换空间监控#

# 查看内存使用趋势
sar -r 
 
# 交换空间监控(重点关注si/so)
sar -W 1 10

关键指标

  • %memused:已用物理内存百分比
  • kbbuffers/kbcached:缓存/缓冲内存量
  • pswpin/s:每秒换入页面数(>0可能有内存瓶颈)
  • pswpout/s:每秒换出页面数

3.3 磁盘I/O分析#

# 查看所有磁盘的I/O统计
sar -d -p 1 5 
 
# 指定磁盘分析(例:sda)
sar -d -p | grep sda

核心指标

  • await:I/O请求平均等待时间(ms)
  • %util:设备利用率(>70%是瓶颈信号)
  • tps:每秒传输请求数

3.4 网络流量监控#

# 查看网络接口统计
sar -n DEV 1 5
 
# 分析TCP连接状态
sar -n TCP,ETCP 1 3

重点关注

  • rxkB/s/txkB/s:接收/发送带宽
  • retrans/s:TCP重传率(>1%表示网络不稳定)
  • active/s:新建TCP连接数

3.5 查看历史数据#

# 查看昨天10点到11点的CPU数据
sar -u -f /var/log/sa/sa$(date -d yesterday +%d) -s 10:00:00 -e 11:00:00
 
# 对比不同日期的同时间段数据
sar -u -f /var/log/sa/sa07   # 本月7号数据
sar -u -f /var/log/sa/sa14   # 本月14号数据

四、综合实战案例#

案例:诊断系统卡顿问题#

# 1. 检查CPU iowait
sar -u | grep -i iowait
# 输出:11:30:01 AM     %iowait  25.23%
 
# 2. 定位高I/O磁盘
sar -d -p | awk '$11 > 70 {print}' 
# 输出:sdb  98.20   # sdb利用率98%
 
# 3. 分析进程级I/O(需配合iotop)
sudo iotop -oP
 
# 4. 确认内存压力
sar -r | grep -v kbcached
# 输出:kbmemused  90.2%   # 内存使用率90%

结论:磁盘sdb的I/O瓶颈(%util=98%)导致CPU iowait飙升,结合内存高使用率,需优化数据库的磁盘访问模式或扩展内存。


五、最佳实践与技巧#

策略优化#

  1. 数据采集调整
    编辑/etc/cron.d/sysstat,修改为:

    */2 * * * * root command -v sadc > /dev/null && sadc -F -S ALL 120 10 - 

    每2分钟收集一次,保留更精细数据

  2. 自动化报告
    使用sa2生成每日摘要:

    0 7 * * 1-6 /usr/lib/sysstat/sa2 -A 

排查技巧#

  • 黄金命令组合
    sar -A # 查看所有统计(适用于深度分析)
    sar -q # 检查系统负载队列
  • 时间范围过滤
    使用-s-e精确分析故障时段
  • 数据导出
    sar -u --human | tee cpu_report.txt 生成可读报告

六、结论#

sar以其全栈监控能力历史数据分析特性,成为Linux性能分析领域的"瑞士军刀"。通过本文您已掌握: ✅ 关键资源的监控指标解读
✅ 精确时间范围的数据回溯技巧
✅ 从磁盘I/O到网络流量的全链路分析方法

将sar纳入您的日常监控体系,配合如Prometheus等实时工具,即可构建完整的性能观测解决方案,大幅提升系统稳定性与排障效率。


七、参考文献#

  1. sysstat官方文档
  2. Linux Man Pages: man sarman sadc
  3. 《Linux性能优化实践》 作者:Brendan Gregg
  4. SAR Command Guide by Red Hat

最后更新:2023年10月
原创内容,转载请注明出处