深入理解 Linux sar 命令
在 Linux 系统管理中,性能监控是确保系统稳定运行的关键环节,面对复杂的服务器环境,管理员需要高效、专业的工具来分析系统资源使用情况,Linux 系统自带的 sar(System Activity Reporter)命令正是这样一款功能强大的性能监控工具,它以详实的数据和灵活的输出格式,帮助管理员快速定位性能瓶颈,本文将详细介绍 sar 命令的核心功能、使用方法及实际应用场景。

sar 命令概述:系统性能的“透视镜”
sar 是 Linux 系统中 sysstat 软件包的一部分,主要用于收集、报告和分析系统的活动数据,与 top、htop 等实时监控工具不同,sar 的核心优势在于其历史数据记录能力,它通过后台守护进程 sysstat 定期采集系统性能数据,并存储在 /var/log/sa/ 目录下的二进制文件中,管理员可以随时查询过去任意时间段的系统状态,为性能调优和故障排查提供可靠依据。
sysstat 软件包默认未安装在部分 Linux 发行版中,需手动安装,以 Ubuntu/Debian 为例,可通过 sudo apt install sysstat 命令安装;CentOS/RHEL 系统则使用 sudo yum install sysstat,安装完成后,sysstat 服务会自动启动,并默认每 10 分钟采集一次数据,保留 7 天的历史记录。
核心功能:多维度性能指标监控
sar 命令支持对系统多种资源进行监控,涵盖 CPU、内存、磁盘 I/O、网络、进程等关键领域,通过不同的选项,管理员可以精准聚焦特定性能指标,实现精细化分析。
CPU 性能监控
CPU 是系统的核心组件,sar 命令提供了丰富的 CPU 相关统计选项:
-u:显示 CPU 利用率,包括用户态(%user)、内核态(%system)、空闲(%idle)、等待 I/O(%iowait)等指标。sar -u 5 10表示每 5 秒采样一次,共 10 次,实时展示 CPU 使用情况。-q:显示队列长度和负载平均值,反映系统负载压力。%runq-sz表示运行队列中的进程数,%ldavg-1/%ldavg-5/%ldavg-15分别为 1 分钟、5 分钟、15 分钟的系统负载平均值。-P {ALL|cpu}:指定监控特定 CPU 核心或所有核心。sar -P 0 -u 3 5仅监控第 0 号核心的 CPU 使用情况。
内存与交换空间监控
内存不足会导致系统性能急剧下降,sar 命令可帮助管理员掌握内存使用动态:
-r:显示内存利用率,包括已用内存(kbmemused)、可用内存(kbmemfree)、缓冲区(kbbuffers)、缓存(kbcached)等。%memused表示内存使用百分比,是判断内存是否紧张的关键指标。-B:显示内存分页统计,如pgpgin/s(每秒读入内存页数)、pgpgout/s(每秒写出内存页数)、fault/s(每秒缺页异常次数),用于分析内存交换效率。-W:监控交换空间使用情况,pswpin/s和pswpout/s分别表示每秒交换区写入和读出的页数,频繁的交换操作可能意味着物理内存不足。
磁盘 I/O 监控
磁盘 I/O 性能直接影响文件读写和数据库操作等场景,sar 命令的磁盘监控功能尤为重要:

-b:显示 I/O 和传输速率统计,包括tps(每秒传输次数)、rtps(每秒读传输次数)、wtps(每秒写传输次数)、bread/s(每秒读取块数)、bwrtn/s(每秒写入块数)等。-d:按设备监控磁盘 I/O,需指定磁盘设备名(如sda),输出包括%util(磁盘利用率)、await(平均等待时间,单位毫秒)、svctm(平均服务时间)等指标,%util超过 70% 可能意味着磁盘瓶颈。
网络性能监控
网络流量和连接状态是系统健康的重要参考,sar 命令提供了网络相关的统计选项:
-n {DEV|EDEV|SOCK}:DEV:显示网络设备统计,如rxpck/s(每秒接收数据包)、txpck/s(每秒发送数据包)、rxkB/s(每秒接收字节数)、txkB/s(每秒发送字节数)。EDEV:显示网络设备错误统计,如rxerr/s(每秒接收错误包)、txerr/s(每秒发送错误包)、coll/s(每秒冲突数)。SOCK:显示套接字统计,如twsock(等待关闭的套接字数)、allocsock(已分配套接字数)。
数据采集与历史数据查询
sar 命令的强大之处在于其历史数据管理能力。sysstat 服务通过 sa1 和 sa2 脚本自动采集数据:
sa1:每 10 分钟执行一次,将 CPU、内存等数据写入二进制文件/var/log/sa/saDD(DD为当天的日期)。sa2:每天生成一份报告,保存为/var/log/sa/sarDD文本文件,便于长期查阅。
查询历史数据
- 按日期查询:
sar -f /var/log/sa/sa20查询 20 号的历史数据。 - 指定时间范围:
sar -s 10:00 -e 18:00 -f /var/log/sa/sa20查询 20 号 10:00 至 18:00 的数据。 - 查看默认报告:
sar -u直接显示当天的历史 CPU 使用统计(需sysstat服务已运行)。
手动采集数据
若需临时监控,可使用 sar 命令的实时模式:
sar -u 1 5:每秒采样一次,共 5 次,实时显示 CPU 使用率。sar -d 3 10:每 3 秒监控一次磁盘 I/O,共 10 次。
实际应用场景与案例分析
CPU 性能瓶颈定位
某服务器反映响应缓慢,管理员使用 sar -u 查询历史数据,发现 %iowait 指标长期高于 30%,而 %idle 低于 10%,结合 sar -d 查看磁盘 I/O,发现 %util 达到 90%,await 超过 100ms,判断为磁盘 I/O 瓶颈,通过优化磁盘分区或更换 SSD,解决了性能问题。
内存溢出预警
在运行数据库的服务器上,管理员通过 sar -r 监控到 %memused 持续攀升,接近 90%,pswpin/s 和 pswpout/s 频繁波动,这表明物理内存不足,系统频繁使用交换空间,导致性能下降,通过增加内存或优化应用程序内存使用,避免了系统崩溃。
网络流量异常
某网站突发访问卡顿,管理员使用 sar -n DEV 查看网络历史数据,发现 rxpck/s 和 txpck/s 短时间内激增 10 倍,rxerr/s 和 txerr/s 陡增,结合防火墙日志,判断为 DDoS 攻击,通过限制流量和启用防护措施,恢复了服务。

高级技巧与注意事项
自定义报告格式
-o 选项可将输出保存为二进制文件,便于后续分析:sar -o output_file -u 1 5 将数据保存至 output_file,再通过 sar -f output_file 查看。
结合 cron 定时任务
若需自定义采集频率,可修改 /etc/cron.d/sysstat 文件中的 sa1 和 sa2 执行间隔,或通过 cron 创建自定义任务。
注意事项
- 数据保留周期:默认历史数据保留 7 天,若需延长,可修改
/etc/sysstat/sysstat文件中的HISTORY参数。 - 权限问题:
sar命令需 root 权限才能访问系统性能数据。 - 数据准确性:确保
sysstat服务正常运行,避免因采集中断导致数据缺失。
sar 命令作为 Linux 系统性能监控的“瑞士军刀”,凭借其全面的数据指标、灵活的历史查询能力和直观的输出格式,成为系统管理员不可或缺的工具,无论是日常性能巡检、故障排查,还是容量规划,sar 都能提供精准的数据支持,掌握 sar 命令的使用方法,不仅能提升系统管理效率,更能为业务稳定运行保驾护航,在实际应用中,建议结合其他监控工具(如 vmstat、iostat),形成多维度的性能监控体系,全面保障 Linux 系统的健康运行。

















