- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Linux服务器系统性能监控工具sar
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
一、前言
sar(System Activity Reporter,系统活动报告器)是Linux系统中一款功能强大的性能监控工具,隶属于sysstat软件包,能够实时采集、记录并分析系统核心资源的使用状态,涵盖CPU、内存、磁盘I/O、网络、进程等关键指标。与top、vmstat等实时监控工具相比,sar的核心优势在于支持历史数据回溯分析,默认通过定时任务持续采集系统数据,可用于离线排查性能瓶颈、长期监控系统稳定性,是Linux运维工程师必备的核心工具之一。
本文将从安装配置、基本语法、核心用法、实战案例、常见问题等维度,全面详解sar命令的使用方法,适用于Linux运维新手及进阶用户,助力快速掌握系统性能监控与问题排查技巧。
二、安装与启用
sar命令依赖sysstat软件包,多数Linux发行版未默认预装,需手动安装并启用数据收集功能,确保历史数据可正常采集和查询。
2.1 安装sysstat软件包
根据不同Linux发行版,执行对应的安装命令:
# CentOS 7/8/9、RHEL系统
sudo yum install sysstat -y
# 或(CentOS 8+、RHEL 8+ 推荐)
sudo dnf install sysstat -y
# Ubuntu、Debian系统
sudo apt install sysstat -y
2.2 启用数据收集服务
安装完成后,需启用并启动sysstat服务,确保系统活动数据能够持续采集:
# 启用服务(开机自启)
sudo systemctl enable sysstat
# 启动服务
sudo systemctl start sysstat
# 查看服务状态(确认启动成功)
sudo systemctl status sysstat
2.3 核心配置与数据存储
sysstat服务启动后,会通过定时任务(cron)定期采集数据,相关配置与数据存储规则如下:
2.3.1 数据存储路径
默认数据存储在/var/log/sa/目录下,包含两种格式的文件:
saXX:二进制格式的每日数据文件(XX为日期,如sa20表示20号的数据),无法直接用cat、vi查看,需通过sar命令读取;
sarXX:文本格式的每日汇总报告(可选生成),可直接查看当日系统性能汇总数据。
2.3.2 核心配置文件
通过修改配置文件,可调整数据采集频率、保留时长等参数,核心配置文件如下:
1.cron任务配置文件(控制采集频率):/etc/cron.d/sysstat(部分系统为/etc/cron.d/sysstat.cron) # 默认配置内容(CentOS/RHEL示例) # 每10分钟采集一次数据,写入二进制文件 */10 * * * * root /usr/lib64/sa/sa1 -S DISK # 每天23:53生成当日文本汇总报告 53 23 * * * root /usr/lib64/sa/sa2 -A说明:将*/10改为*/5,可将采集频率调整为每5分钟一次。
2.主配置文件(控制服务行为):
CentOS/RHEL系统:/etc/sysconfig/sysstat,可设置数据保留天数(默认28天)、是否压缩日志等;
Ubuntu/Debian系统:/etc/default/sysstat,核心配置为ENABLED="true"(启用数据收集)、HISTORY=7(数据保留7天)。
3.I/O配置文件(可选):/etc/sysconfig/sysstat.ioconf,用于配置I/O统计的详细选项,如指定监控的磁盘设备。
三、基本语法
sar命令的基本语法简洁明了,核心分为“实时采集”和“历史数据查询”两种模式,通用语法如下:
sar [选项] [采样间隔] [采样次数]
# 历史数据查询语法
sar [选项] -f 历史数据文件 [-s 开始时间] [-e 结束时间]
3.1 语法参数说明
选项:指定监控的资源类型(如CPU、内存、磁盘I/O等),是sar命令的核心,后续详细讲解;
采样间隔:两次数据采集的时间间隔,单位为秒(建议设置为5秒及以上,避免sar自身活动影响监控结果);
采样次数:数据采集的总次数,若不指定,将持续采集直到手动终止(Ctrl+C);
-f 历史数据文件:指定要查询的二进制历史数据文件(如/var/log/sa/sa20);
-s 开始时间:指定历史数据查询的开始时间,格式为hh:mm:ss(如14:30:00);
-e 结束时间:指定历史数据查询的结束时间,格式同上,默认结束时间为18:00。
3.2 基础示例
# 每2秒采集一次CPU使用率,共采集5次(实时监控)
sar -u 2 5
# 查询今日(20号)的CPU历史数据
sar -u -f /var/log/sa/sa20
# 查询20号14:30到15:00的内存使用历史数据
sar -r -f /var/log/sa/sa20 -s 14:30:00 -e 15:00:00
四、核心选项与实战用法
sar命令的选项众多,核心围绕“CPU、内存、磁盘I/O、网络”四大资源,以下是最常用选项的详细用法及实战示例,结合输出字段解读,帮助快速定位性能问题。
4.1 CPU监控(-u,默认选项)
用于监控CPU的整体使用率及细分状态,是排查CPU瓶颈的核心用法,支持查看单个CPU核心或所有核心的状态。
4.1.1 基础用法
# 实时监控CPU使用率,每1秒采集1次,共采集3次
sar -u 1 3
# 查看所有CPU核心的详细使用率(-P ALL)
sar -u -P ALL 1 3
# 查看指定CPU核心(如CPU0)的使用率
sar -u -P 0 1 3
4.1.2 输出字段解读
执行上述命令后,输出结果包含以下核心字段(以“sar -u 1 3”为例):
14:30:01 PM CPU %user %nice %system %iowait %steal %idle
14:30:02 PM all 2.50 0.00 1.25 0.00 0.00 96.25
14:30:03 PM all 3.75 0.00 1.25 0.00 0.00 95.00
CPU:CPU核心标识(all表示所有核心汇总,0、1等表示单个核心);
%user:用户态进程占用CPU的百分比(如应用程序运行占用的CPU,占比高说明应用负载大);
%nice:低优先级用户态进程占用CPU的百分比(通过nice命令调整优先级的进程);
%system:内核态进程占用CPU的百分比(如系统调用、内核任务,占比高可能存在内核瓶颈);
%iowait:CPU等待I/O操作完成的时间百分比(持续高于10%,说明存在I/O瓶颈);
%steal:虚拟化环境中,当前虚拟机被其他虚拟机抢占的CPU时间百分比;
%idle:CPU空闲时间百分比(持续低于20%,说明CPU负载过高)。
4.1.3 排查要点
%user高、%idle低:应用程序消耗过多CPU,需排查高负载进程(结合top、ps命令);
%system高:内核任务繁忙,可能是系统调用频繁、驱动异常或内核参数不合理;
%iowait高:CPU等待磁盘I/O,需进一步排查磁盘性能(结合sar -d命令)。
4.2 内存监控(-r、-S、-B)
内存监控主要用于查看物理内存、交换分区(swap)的使用状态,以及内存分页活动,帮助判断内存是否充足、是否存在内存泄漏。
4.2.1 常用用法
# 实时监控物理内存使用,每2秒采集1次,共5次
sar -r 2 5
# 实时监控交换分区(swap)使用
sar -S 2 5
# 监控内存分页活动(页入、页出)
sar -B 2 5
4.2.2 输出字段解读
(1)物理内存监控(-r)
14:35:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
14:35:02 PM 1048576 3145728 75.00 102400 524288 2621440 62.50
kbmemfree:空闲物理内存大小(单位:KB);
kbmemused:已使用物理内存大小(单位:KB),包含缓冲区和缓存;
%memused:物理内存使用率(注意:Linux会将空闲内存用作缓存,%memused高不一定代表内存不足);
kbbuffers:内核缓冲区占用的内存(用于存储磁盘I/O临时数据);
kbcached:页缓存占用的内存(用于缓存文件内容,可快速回收);
kbcommit:系统已提交的内存大小(确保系统正常运行所需的最小内存);
%commit:已提交内存占总内存(物理内存+swap)的百分比。
(2)交换分区监控(-S)
14:36:01 PM kbswpfree kbswpused %swpused kbswpcad %swpcad
14:36:02 PM 2097152 0.00 0.00 0.00 0.00
kbswpfree:空闲swap大小(单位:KB);
kbswpused:已使用swap大小(单位:KB);
%swpused:swap使用率(持续高于50%,说明物理内存不足,系统频繁使用swap,性能下降);
kbswpcad:swap缓存大小;
%swpcad:swap缓存使用率。
(3)内存分页监控(-B)
pgpgin/s:每秒从磁盘读取到内存的页面数(页入);
pgpgout/s:每秒从内存写入到磁盘的页面数(页出);
说明:pgpgin/s和pgpgout/s持续过高,说明系统频繁进行内存与磁盘的数据交换,内存不足。
4.3 磁盘I/O监控(-d、-b)
磁盘I/O是系统性能的重要瓶颈点,sar通过-d(块设备I/O)和-b(缓冲区I/O)选项,可全面监控磁盘的读写状态、IOPS、响应时间等指标。
4.3.1 常用用法
# 实时监控所有磁盘设备I/O,每1秒采集1次,共5次(-p显示分区名,更直观)
sar -d -p 1 5
# 监控缓冲区I/O活动(读写速率、缓存命中率)
sar -b 1 5
4.3.2 输出字段解读
(1)块设备I/O监控(-d -p)
14:40:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14:40:02 PM sda 15.84 0.00 253.47 16.00 0.02 1.25 0.63 10.00
DEV:磁盘设备名(-p选项后显示分区名,如sda、sda1,默认显示dev8-0等设备标识);
tps:每秒I/O传输次数(IOPS,磁盘每秒处理的读写请求数);
rd_sec/s:每秒读取的扇区数(1扇区=512字节,可换算为KB/s:rd_sec/s / 2);
wr_sec/s:每秒写入的扇区数(换算为KB/s:wr_sec/s / 2);
avgrq-sz:平均每次I/O操作的数据大小(扇区),值越大,说明单次I/O数据量越大;
avgqu-sz:磁盘I/O请求队列的平均长度(持续大于2,说明I/O队列拥堵);
await:平均每次I/O请求的等待时间(毫秒),包含队列等待时间+服务时间(机械硬盘>20ms、SSD>5ms需注意);
svctm:平均每次I/O请求的服务时间(毫秒),不包含队列等待时间;
%util:磁盘I/O使用率(持续接近100%,说明磁盘满负荷,机械硬盘需重点关注,SSD可并行处理请求,%util=100%不一定是瓶颈)。
(2)缓冲区I/O监控(-b)
bread/s、bwrit/s:每秒从磁盘与系统缓冲区之间的读写数据量;
lread/s、lwrit/s:每秒系统缓冲区的读写次数;
%rcache、%wcache:缓冲区读、写缓存命中率(命中率越低,说明磁盘I/O压力越大)。
4.4 网络监控(-n)
-n选项用于监控网络接口、TCP/UDP连接等网络状态,支持多种子选项,可根据需求选择监控维度。
4.4.1 常用用法
# 监控所有网络接口的流量(rx:接收,tx:发送)
sar -n DEV 1 5
# 监控TCP连接状态(活跃连接、新建连接等)
sar -n TCP 1 5
# 监控所有网络相关状态(DEV+TCP+UDP+SOCK)
sar -n ALL 1 5
4.4.2 输出字段解读
(1)网络接口监控(-n DEV)
14:45:01 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
14:45:02 PM eth0 125.74 89.11 78.32 15.67 0.00 0.00 0.50
14:45:02 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE:网络接口名(eth0、ens33等,lo为本地回环接口);
rxpck/s、txpck/s:每秒接收、发送的数据包数;
rxkB/s、txkB/s:每秒接收、发送的字节数(KB/s),用于判断带宽使用情况;
rxcmp/s、txcmp/s:每秒接收、发送的压缩数据包数;
rxmcst/s:每秒接收的多播数据包数。
(2)TCP连接监控(-n TCP)
active/s:每秒新建的TCP活跃连接数;
passive/s:每秒新建的TCP被动连接数(如web服务器接收的连接);
retrans/s:每秒TCP重传数据包数(重传率高,说明网络不稳定);
estab:当前已建立的TCP连接数。
4.5 其他常用选项
-q:监控系统进程队列长度,查看CPU负载情况,核心字段包括runq-sz(运行队列长度,每核不超过3为宜)、ldavg-1/5/15(1/5/15分钟CPU平均负载);
-v:监控进程、inode、文件表等系统资源,查看是否存在资源溢出;
-A:查看所有系统资源的监控数据(等效于所有选项的集合,适合快速全面排查);
-o 文件名:将实时采集的数据保存为二进制文件,便于后续离线分析(如sar -u 2 5 -o cpu_sar.data);
-h:查看sar命令的帮助信息,快速查询选项含义。
五、高级用法与实战案例
结合实际运维场景,讲解sar命令的高级用法,帮助解决常见的系统性能问题,提升监控效率。
5.1 高级用法
查看指定时间范围的历史数据
# 查看20号10:00到11:00的磁盘I/O历史数据
sar -d -p -f /var/log/sa/sa20 -s 10:00:00 -e 11:00:00
生成每日报告并导出为CSV格式(便于后续分析)
# 将当日CPU监控数据导出为CSV
sar -u -f /var/log/sa/sa$(date +%d) > cpu_report.csv
一次性采集多类资源数据并保存
# 每5秒采集一次CPU、内存、磁盘I/O数据,共采集10次,保存到sar_data.data sar -u -r -d 5 10 -o sar_data.data
可视化分析(结合Gnuplot):将sar采集的数据通过图表可视化,更直观查看性能趋势(需安装Gnuplot工具)。
5.2 实战案例
案例1:CPU负载过高排查
现象:系统响应缓慢,top命令显示CPU使用率接近100%,需定位瓶颈原因。
# 1. 用sar查看CPU细分状态,确认高负载类型
sar -u -P ALL 1 5
# 2. 若%user高,查看具体高负载进程
top -c
# 3. 若%iowait高,进一步排查磁盘I/O
sar -d -p 1 5
# 4. 若%system高,排查系统调用或内核问题
sar -c 1 5 # 查看系统调用情况
案例2:磁盘I/O瓶颈排查
现象:系统读写文件缓慢,应用程序卡顿,怀疑磁盘I/O压力过大。
# 1. 监控磁盘I/O状态,查看%util和await指标
sar -d -p 1 5
# 2. 若%util接近100%,查看具体哪个磁盘分区压力大
sar -d -p -f /var/log/sa/sa$(date +%d)
# 3. 结合iostat命令,进一步定位磁盘瓶颈
iostat -x 1 5
案例3:内存不足排查
现象:系统频繁卡顿,swap使用率持续升高,怀疑内存不足或内存泄漏。
# 1. 查看物理内存和swap使用情况
sar -r -S 1 5
# 2. 查看内存分页活动,判断是否频繁页交换
sar -B 1 5
# 3. 查看高内存占用进程,排查内存泄漏
ps -aux --sort=-%mem | head -10
案例4:网络带宽满负荷排查
现象:系统网络访问缓慢,远程连接卡顿,怀疑带宽被占满。
# 1. 监控各网络接口的流量,查看rxkB/s、txkB/s
sar -n DEV 1 5
# 2. 查看TCP连接状态,排查是否存在异常连接
sar -n TCP 1 5
# 3. 结合netstat命令,定位占用带宽的进程
netstat -anp | grep ESTABLISHED
六、常见问题与注意事项
6.1 常见问题
问题1:执行sar命令提示“sar: command not found” 解决:未安装sysstat软件包,执行对应发行版的安装命令(见第二章2.1节)。
问题2:无法查看历史数据,提示“Cannot open /var/log/sa/saXX”解决:sysstat服务未启动,或数据文件未生成,执行sudo systemctl start sysstat启动服务,等待采集周期后再查看。
问题3:sar输出结果中部分字段为空或显示异常 解决:系统内核版本与sysstat版本不兼容,升级sysstat软件包(sudo yum update sysstat)。
问题4:采样间隔设置过小时,监控结果不准确 解决:采样间隔建议设置为5秒及以上,避免sar自身进程占用过多CPU,影响监控结果。
6.2 注意事项
sar采集的历史数据默认保留一定天数(如CentOS默认28天、Ubuntu默认7天),可通过修改主配置文件调整保留时长;
二进制历史数据文件(saXX)无法直接查看,必须通过sar -f 文件名命令读取;
不同Linux发行版的sysstat配置文件路径可能略有差异,需根据实际系统调整;
监控时需结合多个选项和命令(如top、iostat、netstat),全面定位性能瓶颈,避免单一指标误判;
虚拟化环境中,%steal字段需重点关注,若持续过高,说明虚拟机资源被抢占,需调整虚拟化资源分配。
七、常用命令速查表

八、总结
sar命令是Linux系统性能监控的核心工具,兼具实时监控与历史数据回溯能力,能够全面覆盖CPU、内存、磁盘I/O、网络等关键资源的监控需求。本文通过详细讲解安装配置、基本语法、核心选项、实战案例及常见问题,帮助用户快速掌握sar命令的使用方法。
在实际运维工作中,建议结合sar命令与其他性能监控工具(top、iostat、netstat等),多维度分析系统性能,精准定位瓶颈问题,确保系统稳定、高效运行。通过合理配置数据采集频率和保留时长,可实现系统长期监控与离线分析,为系统优化提供数据支撑。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP