sar命令使用

本文详细介绍sar命令的使用方法及其各项参数的含义,帮助读者理解如何利用sar进行系统性能监控,包括CPU、内存、I/O等方面的监控。

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

安装

ubuntu

sudo apt-get install -y sysstat

centos

sudo yum install -y sysstat

常用

#每2秒输出一次sar [command],总计输入五次,省略5表示持续输出
sar [command] 2 5

#每秒采样一次网络情况直到22:26并把采样数据输出到/tmp/123
sar -n DEV 1 -e 22:26:00 >/tmp/123 &

#本月27日23点至0点的内存数据,需要通过crontab设置定时任务
sar -f /var/log/sa/sa27 -s 23:00:00 -e 00:00:00 -r

# 看历史磁盘io k10代表ioutil 
sar -f /var/log/sysstat/ -dp |grep -v Linux|sort -k10 -rn|head -n 10

CPU篇

-p

-P {CPU_LIST | ALL}:用于分析多核CPU的性能状况,可以使用CPU_LIST分析指定核心的CPU状态,可以使用离散值和连续值,也可以使用ALL分析所有CPU核心状态。

Ξ (bochs) ~ → sar -P 0 1 3  
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

16:31:33        CPU     %user     %nice   %system   %iowait    %steal     %idle
16:31:34          0      0.00      0.00      0.00      0.00      0.00    100.00
16:31:35          0      0.00      0.00      0.00      0.00      0.00    100.00
16:31:36          0      0.00      0.00      0.00      0.00      0.00    100.00
Average:          0      0.00      0.00      0.00      0.00      0.00    100.00

表示每秒采集0号CPU状态,总共采样3次。

前两列不必多言,%user指运行非特权用户进程时间百分率

%nice是指运行特权用户进程时间百分率

%system是指运行内核进程时间,这个时间包括了CPU处理软硬中断的时间

%iowait是指等待I/O完成的时间

%steal是指运行虚拟机的时间百分率,steal意味着被偷走的时间

%idle是指cpu空闲时间百分率,我的机器上并未运行任何程序,所以此列一直为100%

-u

-u[ALL]:报告cpu使用情况,与-p不同的是,-u只能报告所有cpu。ALL选项输出详细信息

Ξ (bochs) ~ → sar -u ALL 1 3
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

17:23:29        CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest    %gnice     %idle
17:23:30        all      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00    100.00
17:23:31        all      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00    100.00
17:23:32        all      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00    100.00

这里的%usr和-P的%user的区别在于%usr不包括虚拟机运行的时间

这里的%sys和-P的%system的区别在于%sys不包括各种软硬中断时间

%irq是指处理硬中断的cpu时间百分率

%soft是指处理软中断的cpu时间百分率

%guest和%gnice分别指运行普通虚拟程序和特权虚拟程序的时间百分率

-q

-q:用于报告队列长度以及平均负载

Ξ (bochs) ~ → sar -q 1 3
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

16:46:47      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
16:46:48            0       126      0.00      0.00      0.00         0
16:46:49            0       126      0.00      0.00      0.00         0
16:46:50            0       126      0.00      0.00      0.00         0
Average:            0       126      0.00      0.00      0.00         0

runq-sz:等待cpu调度的任务数

plist-sz:处于任务列表的任务总数

ldavg-1,ldavg-5,ldavg-15分别指1分钟,5分钟,15分钟内cpu的负载

blocked:表示等待I/O完成而被阻塞的任务总数,不为0则需要留意I/O是否存在性能瓶颈

-w

-w:报告进程上下文切换的次数

Ξ (bochs) ~ → sar -w 1 3 
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

17:39:43       proc/s   cswch/s
17:39:44         0.00     83.00
17:39:45         0.00    103.00
17:39:46         0.00     96.00
Average:         0.00     94.00

proc/s:指每秒创建的进程数

cswch/s:指每秒自愿上下文切换的次数,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。

还有一个非自愿的上下文切换次数nvcswch/s表示则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。非自愿次数明显升高意味着cpu产生了性能瓶颈。非自愿上下文切换可以使用pidstat加上-w选项来输出

内存篇

-r

-r [-h]:输出内存使用率统计信息,-h输出更加利于阅读的结果

Ξ (bochs) ~ → sar -r -h 1 3
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

21:58:21    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
21:58:22       602.6M      1.6G    165.3M      8.3%    196.8M    878.7M    743.3M     37.3%    830.7M    379.7M      4.0k
21:58:23       602.6M      1.6G    165.3M      8.3%    196.8M    878.7M    743.3M     37.3%    830.7M    379.7M      4.0k
21:58:24       602.6M      1.6G    165.3M      8.3%    196.8M    878.7M    743.3M     37.3%    830.7M    379.7M      4.0k
Average:       602.6M      1.6G    165.3M      8.3%    196.8M    878.7M    743.3M     37.3%    830.7M    379.7M      4.0k

kbmemfree:剩余内存总量

kbavail:可用内存总量,可用内存≈剩余内存+buffer+cache

kbmemused:使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab

kbbuffers:被内核用来作为buffer的内存量

kbcached:被内核用来作为cache的内存量

kbcommit:当前工作负载下,可以保证不出现内存不足的内存量

%commit:指kbcommit占内存/swap的百分率

kbactive:当前活跃内存量。除非万不得已,这部分内存才会被回收

kbinact:当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回

kbdirty:脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘

-B

-B:报告系统中分页统计信息

λ bochs ~ → sar -B 1 3
Linux 4.4.213-1.el7.elrepo.x86_64 (bochs)       03/02/2020      _x86_64_        (1 CPU)

10:43:36 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
10:43:37 PM      0.00     60.00     18.00      0.00      5.00      0.00      0.00      0.00      0.00
10:43:38 PM      0.00     20.00    158.00      0.00    153.00      0.00      0.00      0.00      0.00
10:43:39 PM      0.00     60.00     53.00      0.00     71.00      0.00      0.00      0.00      0.00
Average:         0.00     46.67     76.33      0.00     76.33      0.00      0.00      0.00      0.00

pgpgin/s:表示每秒从磁盘中换入内存的字节数

pgpgout/s:表示每秒从内存换出到磁盘的字节数

fault/s:表示系统每秒产生的缺页异常(报告主缺页和次缺页),这不是产生I/O的缺页中断的次数,因为部分缺页中断不需要I/O就能处理

majflt/s:表示每秒产生的主缺页异常

pgfree/s:每秒被系统放到空闲列表的分页数量

pgscank/s:每秒被内核线程[kswapd]扫描的分页数量

pgscand/s:每秒被直接扫描的数量

pgsteal/s:系统为满足其内存需求声明每秒从cache(分页缓存和swap缓存)回收的页的数量

%vmeff:这个指标由pgsteal/(pgscand+pgscank)得到,这是一个衡量页面回收效率的指标

-S

-s [h]:输出swap空间的使用率统计信息

Ξ (bochs) ~ → sar -S 1 1
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

22:20:48    kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
22:20:49            0         0      0.00         0      0.00
Average:            0         0      0.00         0      0.00

我的这台机器上未开启swap,所有的统计信息均为0

kbswpfree:未使用的swap量

kbswpused:使用中的swap内存量

%swpused:使用中的swap内存量占总swap的百分率

kbswpcad:被swap缓存的内存量,这部分内存曾经被换出,现在又被换入但仍然位于swap空间

%swpcad:kbswpcad占kbswpused的百分率

-W

-W统计输出swap换入换出信息

Ξ (bochs) ~ → sar -W 1 2
Linux 4.15.0-87-generic (test)  02/29/20        _x86_64_        (1 CPU)

22:43:36     pswpin/s pswpout/s
22:43:37         0.00      0.00
22:43:38         0.00      0.00
Average:         0.00      0.00

pswpin/s:每秒换入swap的内存量

pswpout/s:每秒换出swap的内存量

若这两项数值很高,表示内存短缺导致需要频繁换入换出。

I/O篇

-b

-b:报告I/O及传输速率统计信息

Ξ (bochs) ~ → sar -b 1 3
Linux 4.4.213-1.el7.elrepo.x86_64 (bochs)       03/03/2020      _x86_64_        (1 CPU)

12:52:28 PM       tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
12:52:29 PM     10.00      0.00     10.00      0.00      0.00    280.00      0.00
12:52:30 PM     18.00      0.00     18.00      0.00      0.00    256.00      0.00
12:52:31 PM      9.00      0.00      9.00      0.00      0.00    144.00      0.00
Average:        12.33      0.00     12.33      0.00      0.00    226.67      0.00

tps:每秒钟加到物理设备上的传输总量。一次传输就是加到物理设备的一次I/O请求,由于多次逻辑请求可以合并为单次的I/O请求,所以一次传输的大小是不确定的

rtps:每秒加到物理设备的读请求总数

wtps:每秒加到物理设备上的写请求总数

dtps:每秒丢弃的请求总数

bread/s:以块为单位每秒钟从磁盘读取的数据总量,块的大小等同于一个扇区的大小,512字节

bwrtn/s:以块为单位每秒钟写入磁盘的数据总量

bdscd/s以块为单位丢弃的数据总量

-d

-d -h[–dev=dev_list]:报告块设备的活动情况

Ξ (bochs) ~ → sar -d 1 1 
Linux 4.4.213-1.el7.elrepo.x86_64 (bochs)       03/03/2020      _x86_64_        (1 CPU)

08:06:35 PM       DEV       tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util
08:06:36 PM       vda      9.00      0.00    100.00      0.00     11.11      0.02      1.89      1.70

tps:和-b的tps含义一样,都表示每秒钟加到物理设备上的传输总量

rkB/s:每秒从设备读到的字节数

wkB/s:每秒写入设备的字节数

areq-sz:加到设备上I/O请求平均大小(以字节为大小)

aqu-sz:加到设备上请求长度的平均值

await:加到设备上I/O请求的平均响应时间,这个时间包括了请求处于等待队列中的时间

%util:加到设备上I/O请求所用的时间百分比,对于串行设备,接近100%意味着设备出现了性能瓶颈,但是对于并行设备比如RAID或者SSD,这个值实际上并不能反映出设备的极限

-v

-v:报告inode,文件以及其他内核表状态

Ξ (bochs) ~ → sar -v 1 1
Linux 4.4.213-1.el7.elrepo.x86_64 (bochs)       03/03/2020      _x86_64_        (1 CPU)

08:35:59 PM dentunusd   file-nr  inode-nr    pty-nr
08:36:00 PM      1692      1504      9458         1
Average:         1692      1504      9458         1

dentunusd:目录缓存中未使用的缓存项数。

file-nr:系统使用的文件句柄数,查看目前使用的文件句柄数lsof|awk ‘{print $2}’|wc -l

inode-nr:系统使用的inode处理程序数

pty-nr:打开的伪终端数,即几个人登陆了系统

网络篇

-n

-n DEV [–iface=face_list]

Ξ (bochs) ~ → sar -n DEV 1 1
Linux 4.4.213-1.el7.elrepo.x86_64 (bochs)       03/03/2020      _x86_64_        (1 CPU)

09:04:07 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
09:04:08 PM        lo     20.00     20.00      1.19      1.19      0.00      0.00      0.00      0.00
09:04:08 PM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:04:08 PM br-f3a0301d37ae      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:04:08 PM docker_gwbridge      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:04:08 PM      eth0      9.00      7.00      0.68      0.78      0.00      0.00      0.00      0.00

IFACE:网络接口

rxpck/s:每秒接收的报文数

txpck/s:每秒发送的报文数

rxkB/s:每秒接收的字节数,``rxkB/s*1024/rxpck/s`<60B,意味着收到的是小包

txkB/s:每秒发送的字节数

rxcmp/s:每秒接收的压缩数据包数

txcmp/s:每秒发送的压缩数据包数

rxmcst/s:每秒接收的多播数据包数

%ifutil:网络接口的利用率百分比,对于半双工接口,利用率使用rxkB/s和txkB/s之和作为接口速度的百分比计算。对于全双工,这是rxkB/s或txkB/s中的较大值。

其他篇

sar(System Activity Reporter系统活动情况报告)

-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息

##CPU资源监控
sar -u 1 3
输出项说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

##inode、文件和其他内核表监控
sar -v 1 3
输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量

##内存和交换空间
sar -r 1 3
输出项说明:
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.

##内存分页监控
sar -B 1 3
输出项说明:
pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s:每秒钟产生的主缺页数.
pgfree/s:每秒被放入空闲队列中的页个数
pgscank/s:每秒被kswapd扫描的页个数
pgscand/s:每秒直接被扫描的页个数
pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比

##I/O和传送速率监控
sar -b 1 3
输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

##进程队列长度和平均负载状态监控
sar -q 1 3
输出项说明:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载

##系统交换活动信息监控
sar -W 10 3
输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量

##设备使用情况监控
sar -d 1 3 -p
-p:可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
输出项说明
tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
rkB/s: 每秒读多少KB.
wkB/s: 每秒写多少KB.
avgrq-sz:请求次数.
avgqu-sz:磁盘请求队列的平均长度.
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:I/O请求占CPU的百分比,比率越大,说明越饱和.
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当%util的值接近 1% 时,表示设备带宽已经占满。

#要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看


#Monitoring network interface statistics
sar -n DEV 1 3
IFACE: Name of the network interface for which statistics are reported.
rxpck/s: packet receiving rate (unit: packets/second)
txpck/s: packet transmitting rate (unit: packets/second)
rxkB/s: data receiving rate (unit: Kbytes/second)
txkB/s: data transmitting rate (unit: Kbytes/second)
rxcmp/s: compressed packets receiving rate (unit: Kbytes/second)
txcmp/s: compressed packets transmitting rate (unit: Kbytes/second)
rxmcst/s: multicast packets receiving rate (unit: Kbytes/second)

#Monitoring network interface errors
sar -n EDEV
IFACE : Name of the network interface for which statistics are reported.
rxerr/s: Total number of bad packets received per second.
txerr/s: Total number of errors that happened per second while transmitting packets.
coll/s: Number of collisions that happened per second while transmitting packets.
rxdrop/s: Number of received packets dropped per second because of a lack of space in linux buffers.
txdrop/s: Number of transmitted packets dropped per second because of a lack of space in linux buffers.
txcarr/s: Number of carrier-errors that happened per second while transmitting packets.
rxfram/s: Number of frame alignment errors that happened per second on received packets.
rxfifo/s: Number of FIFO overrun errors that happened per second on received packets.
txfifo/s: Number of FIFO overrun errors that happened per second on transmitted packets.

#Monitoring socket usage
sar -n SOCK
totsck : Total number of sockets used by the system.
tcpsck: Number of TCP sockets currently in use.
udpsck: Number of UDP sockets currently in use.
rawsck: Number of RAW sockets currently in use.
ip-frag: Number of IP fragments currently in use.
tcp-tw: Number of TCP sockets in TIME_WAIT state.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geoffrey Turing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值