Linux服务器系统性能监控工具sar

2026-04-20 11:59:48 2069

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字段需重点关注,若持续过高,说明虚拟机资源被抢占,需调整虚拟化资源分配。

七、常用命令速查表

image.png

八、总结

sar命令是Linux系统性能监控的核心工具,兼具实时监控与历史数据回溯能力,能够全面覆盖CPU、内存、磁盘I/O、网络等关键资源的监控需求。本文通过详细讲解安装配置、基本语法、核心选项、实战案例及常见问题,帮助用户快速掌握sar命令的使用方法。

在实际运维工作中,建议结合sar命令与其他性能监控工具(top、iostat、netstat等),多维度分析系统性能,精准定位瓶颈问题,确保系统稳定、高效运行。通过合理配置数据采集频率和保留时长,可实现系统长期监控与离线分析,为系统优化提供数据支撑。


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: