Linux系统性能分析——sar

本文详细介绍sar工具的使用方法,sar是Linux上强大的系统性能分析工具,涵盖CPU使用率、平均负载、内存使用状况、I/O设备情况、网络情况、页面交换发生状况等多个方面的系统活动报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寻找系统瓶颈的利器——sar

一、sar是什么?

sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

二、sar能做什么?

  • 查看CPU使用率
  • 查看平均负载
  • 查看内存使用状况
  • 查看I/O设备情况
  • 查看网络情况
  • 查看页面交换发生状况
  • ……

三、sar怎么使用?

用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <中断> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -n { <关键词> [,...] | ALL } ]
[ -o [ <文件名> ] | -f [ <文件名> ] ]
[ -i <时间间隔> ] [ -s [ <时:分:秒> ] ] [ -e [ <时:分:秒> ] ]

参数说明
-A 汇总所有的报告
-a 报告文件读写使用情况
-B 报告附加的缓存的使用情况
-b 报告缓存的使用情况
-c 报告系统调用的使用情况
-d 报告磁盘的使用情况
-g 报告串口的使用情况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用情况
-n 报告命名cache的使用情况
-p 报告调页活动的使用情况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动情况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动状况
-y 报告TTY设备活动状况

1、查看CPU使用率

使用-u选项,sar输出整体CPU的使用情况,不加选项时,默认使用的就是-u选项。以下命令显示采样时间为1s,采样次数为2次,整体CPU的使用情况。

$ sar 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15时08分13秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15时08分14秒     all      1.02      0.00      0.76      0.00      0.00     98.22
15时08分15秒     all      1.01      0.00      1.01      0.00      0.00     97.98
平均时间:       all      1.01      0.00      0.89      0.00      0.00     98.10
$ sar -u  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

14时36分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14时36分03秒     all      0.76      0.00      0.76      0.00      0.00     98.48
14时36分04秒     all      1.27      0.00      0.76      0.00      0.00     97.97
平均时间:       all      1.01      0.00      0.76      0.00      0.00     98.23

“-P ALL”选项指示对每个内核输出统计信息,其中”CPU”列输出0,1,2,3,4指示对应的cpu核。也可针对单独一个内核显示,“-P 1”指示显示第二个内核的统计信息。

$ sar -P ALL  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

14时35分54秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14时35分55秒     all      1.01      0.00      0.76      0.00      0.00     98.23
14时35分55秒       0      1.01      0.00      1.01      0.00      0.00     97.98
14时35分55秒       1      1.03      0.00      0.00      0.00      0.00     98.97
14时35分55秒       2      1.01      0.00      1.01      0.00      0.00     97.98
14时35分55秒       3      1.01      0.00      1.01      0.00      0.00     97.98

14时35分55秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14时35分56秒     all      1.26      0.00      0.76      0.00      0.00     97.98
14时35分56秒       0      1.01      0.00      1.01      0.00      0.00     97.98
14时35分56秒       1      1.01      0.00      2.02      0.00      0.00     96.97
14时35分56秒       2      1.02      0.00      0.00      0.00      0.00     98.98
14时35分56秒       3      1.01      0.00      0.00      0.00      0.00     98.99

平均时间:       CPU     %user     %nice   %system   %iowait    %steal     %idle
平均时间:       all      1.14      0.00      0.76      0.00      0.00     98.10
平均时间:         0      1.01      0.00      1.01      0.00      0.00     97.98
平均时间:         1      1.02      0.00      1.02      0.00      0.00     97.96
平均时间:         2      1.02      0.00      0.51      0.00      0.00     98.48
平均时间:         3      1.01      0.00      0.51      0.00      0.00     98.48
$ sar -P 1  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15时12分53秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15时12分54秒       1      1.02      0.00      1.02      0.00      0.00     97.96
15时12分55秒       1      0.00      0.00      1.01      0.00      0.00     98.99
平均时间:         1      0.51      0.00      1.02      0.00      0.00     98.48
  • %user :用户模式下CPU时间占用比例;
  • %nice :通过nice改变了进程调度优先级的进程,在用户模式下CPU时间占用比例
  • %system :系统模式下CPU时间占用比例;
  • %iowait :CPU等待磁盘I/O导致空闲状态CPU时间占用比例;
  • %steal :当hypervisor服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的时间的百分比(如果此值过大,说明主机分配的虚拟机数量过多)
  • %idle :CPU空闲时间占用比例;

2、查看平均负载

使用-q选项,就能查看运行队列中的进程数、系统上的进程和线程数、平均负载等

$ sar -q 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15时22分35秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
15时22分36秒         0       503      0.00      0.00      0.00
15时22分37秒         0       503      0.00      0.00      0.00
平均时间:           0       503      0.00      0.00      0.00
  • runq-sz :运行队列的长度(等待运行的进程数)
  • plist-sz :进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1 :最近1分钟的系统平均负载
  • ldavg-5 :最近5分钟的系统平均负载
  • ldavg-15 :最近15分钟的系统平均负载

3、查看内存使用状况

使用-r选项,可查看物理内存使用状况。

$ sar -r 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15时16分36秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
15时16分37秒   1251336   6811288     84.48    173712   5114880   5148236     42.00
15时16分38秒   1251336   6811288     84.48    173712   5114880   5148236     42.00
平均时间:     1251336   6811288     84.48    173712   5114880   5148236     42.00
$ free 
             total       used       free     shared    buffers     cached
Mem:       8062624    6811016    1251608          0     173712    5114880
-/+ buffers/cache:    1522424    6540200
Swap:      4194296     756656    3437640
  • kbmemfree :这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
  • kbmemused :这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
  • %memused :物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.
  • kbbuffers和kbcached :这两个值就是free命令中的buffer和cache.
  • kbcommit :保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
  • %commit :这个值是kbcommit与内存总量(包括swap)的一个百分比.

4、查看I/O设备情况

使用-b选项,查看I/O和传输速率统计。

$ sar -b 1 10
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时52分34秒       tps      rtps      wtps   bread/s   bwrtn/s
16时52分35秒      0.00      0.00      0.00      0.00      0.00
16时52分36秒      0.00      0.00      0.00      0.00      0.00
16时52分37秒      0.00      0.00      0.00      0.00      0.00
16时52分38秒      2.02      0.00      2.02      0.00     24.24
16时52分39秒      1.02      0.00      1.02      0.00      8.16
16时52分40秒      0.00      0.00      0.00      0.00      0.00
16时52分41秒      0.00      0.00      0.00      0.00      0.00
16时52分42秒      0.00      0.00      0.00      0.00      0.00
16时52分43秒      0.00      0.00      0.00      0.00      0.00
16时52分44秒      5.10      0.00      5.10      0.00     89.80
平均时间:        0.81      0.00      0.81      0.00     12.18
  • tps :磁盘每秒钟的IO总数
  • rtps :每秒钟从磁盘读取的IO总数
  • wtps :每秒钟从写入到磁盘的IO总数
  • bread/s :每秒钟从磁盘读取的块总数
  • bwrtn/s :每秒钟此写入到磁盘的块总数

使用-d选项,查看每个块设备的活动。DEV 磁盘设备的名称,如果不加-p,会显示类似“dev11-0”的设备名称,因此加上-p显示的名称更为直观。

$ sar -d 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时47分23秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16时47分24秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时47分24秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16时47分24秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16时47分25秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时47分25秒    dev8-0      4.04      0.00     48.48     12.00      0.00      0.00      0.00      0.00

平均时间:         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:     dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:      dev8-0      2.02      0.00     24.24     12.00      0.00      0.00      0.00      0.00

$ iostat -d 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00       2000          0
sda               3.28        87.98       202.59 1984979076 4570968384

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
$ sar -d -p 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时48分10秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16时48分11秒      scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时48分11秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16时48分11秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16时48分12秒      scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时48分12秒       sda      3.03      0.00     32.32     10.67      0.00      0.00      0.00      0.00

平均时间:         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:        scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:         sda      1.53      0.00     16.33     10.67      0.00      0.00      0.00      0.00
  • tps :每秒I/O的传输总数
  • rd_sec/s :每秒读取的扇区的总数
  • wr_sec/s :每秒写入的扇区的总数
  • avgrq-sz :平均每次磁盘I/O操作的数据大小(扇区)
  • avgqu-sz :磁盘请求队列的平均长度
  • await :从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
  • svctm :I/O的服务处理时间,即不包括请求队列中的时间
  • %util :I/O请求占用的CPU百分比,值越高,说明I/O越慢

5、查看网络情况

使用-n选项,结合关键词,查看网络相关情况。
【用法】:sar [ -n { <关键词> [,…] | ALL } ]
关键词
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)

$ sar -n DEV 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时06分16秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
16时06分17秒        lo     13.13     13.13      1.57      1.57      0.00      0.00      0.00
16时06分17秒      eth0     13.13    106.06      0.80      6.40      0.00      0.00      0.00

16时06分17秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
16时06分18秒        lo     13.27     13.27      1.58      1.58      0.00      0.00      0.00
16时06分18秒      eth0     14.29    110.20      1.09      6.98      0.00      0.00      0.00

平均时间:       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:          lo     13.20     13.20      1.57      1.57      0.00      0.00      0.00
平均时间:        eth0     13.71    108.12      0.94      6.69      0.00      0.00      0.00
  • IFACE :本地网卡接口的名称
  • rxpck/s :每秒钟接受的数据包
  • txpck/s :每秒钟发送的数据库
  • rxKB/S :每秒钟接受的数据包大小,单位为KB
  • txKB/S :每秒钟发送的数据包大小,单位为KB
  • rxcmp/s :每秒钟接受的压缩数据包
  • txcmp/s :每秒钟发送的压缩包
  • rxmcst/s :每秒钟接收的多播数据包
$ sar -n EDEV 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时08分16秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
16时08分17秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时08分17秒      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16时08分17秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
16时08分18秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16时08分18秒      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:       IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
平均时间:          lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:        eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • IFACE :网卡名称
  • rxerr/s :每秒钟接收到的损坏的数据包
  • txerr/s :每秒钟发送的数据包错误数
  • coll/s :当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有
  • rxdrop/s :当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目
  • txdrop/s :当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目
  • txcarr/s :当发送数据包的时候,每秒钟载波错误发生的次数
  • rxfram/s :在接收数据包的时候,每秒钟发生的帧对其错误的次数
  • rxfifo/s :在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数
  • txfifo/s 在发生数据包 的时候,每秒钟缓冲区溢出的错误发生的次数
$ sar -n TCP 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时12分15秒  active/s passive/s    iseg/s    oseg/s
16时12分16秒      0.00      0.00      6.06      9.09
16时12分17秒      0.00      0.00      2.02      2.02
平均时间:        0.00      0.00      4.04      5.56
  • active/s :新的主动连接
  • passive/s :新的被动连接
  • iseg/s :接受的段
  • oseg/s :输出的段
$ sar -n SOCK 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16时13分59秒    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
16时14分00秒       434        26        19         1         0         0
16时14分01秒       434        26        19         1         0         0
平均时间:         434        26        19         1         0         0
  • totsck :当前被使用的socket总数
  • tcpsck :当前正在被使用的TCP的socket总数
  • udpsck :当前正在被使用的UDP的socket总数
  • rawsck :当前正在被使用于RAW的skcket总数
  • if-frag :当前的IP分片的数目
  • tcp-tw :TCP套接字中处于TIME-WAIT状态的连接数量

6、查看页面交换发生状况

$ sar -W 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15时51分29秒  pswpin/s pswpout/s
15时51分30秒      0.00      0.00
15时51分31秒      0.00      0.00
平均时间:        0.00      0.00
  • pswpin/s:每秒系统换入的交换页面(swap page)数量
  • pswpout/s:每秒系统换出的交换页面(swap page)数量

四、总结

怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值