sar命令详解

发布时间 2023-12-10 17:17:27作者: ishmaelwanglin

man手册:sar

名称

sar - 收集,报告,或者记录系统的运行状态信息

该命令属于sysstat包,使用该命令需要安装sysstat包

参数概要

sar [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ]
[ -w ] [ -y ] [ -I { int [,...] | SUM | ALL | XALL } ] [ -P { cpu [,...] | ALL } ] [ -m { keyword [,...] | ALL } ] [ -n { keyword [,...]
| ALL } ] [ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [ filename ] | -[0-9]+ ] [ -i interval ] [ -s [ hh:mm:ss ] ] [ -e [ hh:mm:ss ] ] [ interval [ count ] ]

具体描述

sar命令将标准输出写入操作系统中所选累积活动计数器的内容。计数系统,基于value。在count和interval参数中,以指定的间隔(秒)间隔写入指 定次数的信息。如果是interval参数设置为零,sar命令显示自系统启动以来的平均统计信息。如果指定了interval参数而没有计数参数,然后连续生成 报告。收集的数据也可以保存在-o filename标志指定的文件中,除了在屏幕上播放。如果省略filename,则sar使用标准系统活动每日数据文件/ var / log / sa / sadd文件,其中dd参数指示当天。默认情况下,内核中可用的所有数据都保存在数据文件中。
sar命令提取并写入先前保存在文件中的标准输出记录。此文件可以是-f标志指定的文件,或者默认情况下,标准系统活动每日数据文件。也可以输入- 1,-2等作为sar的参数来显示那天前的数据。例如,-1将指向昨天的标准系统活动文件。
如果没有-P标志,sar命令将报告系统范围(所有处理器之间的全局)统计信息,这些统计信息的计算结果为以百分比表示的值的平均值 -年龄,否则 为总和。如果给出-P标志,则sar命令报告与指定处理器相关的活动。如果给出-P ALLsar命令报告所有处理器中每个处理器和全局统计信息的统计信 息。
您可以使用标志选择有关特定系统活动的信息。不指定任何标志仅选择CPU活动。指定-A标志选择全部 可能的活动。
sar命令的默认版本(CPU利用率报告)可能是用户运行以开始系统活动调查的第一个工具之一,因为它监视主要系统资源。如果CPU利用率接近 100%(user + nice + system),则采样的工作负载受CPU限制。如果需要多个样本和多个报告,则可以方便地为sar命令指定输出文件。 运行sar 命令作为后台进程。这个语法是:
sar -o datafile interval count> / dev / null 2>&1&
所有数据都以二进制形式捕获并保存到文件(数据文件)中。 然后可以使用-f选项使用sar命令选择性地显示数据。 设置interval和count参数以间隔 秒间隔选择计数记录。 如果未设置count参数,则保存在文件中的所有记录都将是选择。 以这种方式收集数据对于表征一段时间内的系统使用情况并 确定峰值使用小时数非常有用。

使用方法

获取系统当前的状态;
sar -u 1 5 获取cpu的状态每一秒打印一次,打印5次
从sar日志里获取当时的系统状态; sar -u -f /var/log/sa/sa30
获取cpu的状态从sar日志的30号的日志文件里
明文日志即可视文本文档日志需要第二天才能生成前一天的日志,路径是/var/log/sa/sardd, 比如查看30号的明文日志 cat /var/log/sa/sar30

定时任务

安装sysstat包后会添加定时任务来记录系统运行信息,路径/etc/cron.d/sysstat
每10分钟执行一次信息收集,线上一般修改为每1分钟抓取一次信息
*/1 * * * * root /usr/lib64/sa/sa1 1 1 收集的系统运行信息日志路径/var/log/sa/${sa日期} ,每月循环一轮,不生成新文件

参数选项

-A 显示系统所有资源设备(CPU、内存、磁盘)的运行状况,等于-bBdFHqrRSuvwWy -I SUM -I XALL -m ALL -n ALL -u ALL -P ALL这一堆参数
都带上了,基本不用。
-B 报告分页统计信息。将显示以下值:
sar -B 1
Linux 3.10.0-1160.71.1.el7.x86_64 (development) 08/25/2022 x86_64 (2 CPU)
04:30:20 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
04:30:21 PM 0.00 0.00 64.76 0.00 62.86 0.00 0.00 0.00 0.00
04:30:22 PM 0.00 17.31 25.96 0.00 24.04 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: 系统每秒从缓存(pagecache和swapcache)回收的页数,以满足其内存需求。
%vmeff: 计算为pgsteal / pgscan,这是页面回收效率的度量。如果它接近100%,那么几乎每一页都会脱离正在收集非活动清单。 如果它太低(例如小于30%),则虚拟存储器有一些困难。显示该字段。如果在该时间间隔内没有扫描任何页面,则为零。
-b 报告I / O和传输速率统计信息。 将显示以下值:
sar -b 1
sysstat

Run system activity accounting tool every 10 minutes

*/10 * * * * root /usr/lib64/sa/sa1 1 1

0 * * * * root /usr/lib64/sa/sa1 600 6 &

Generate a daily summary of process accounting at 23:53

53 23 * * * root /usr/lib64/sa/sa2 -A

Linux 3.10.0-1160.71.1.el7.x86_64 (development) 08/25/2022 x86_64 (2 CPU)
04:36:25 PM
04:36:26 PM
04:36:27 PM
tps rtps
0.00 0.00
0.00 0.00
wtps bread/s bwrtn/s
0.00 0.00 0.00
0.00 0.00 0.00
tps: 发送到物理设备的每秒传输总数。 传输是对物理设备的I/O请求。多个逻辑请求可以组合成对设备的单个I / O请求。 转移的大小 不确定。
rtps: 发给物理设备的每秒读取请求总数。
wtps: 发给物理设备的每秒写入请求总数。
bread/s: 以每秒块数从设备读取的数据总量。 块等同于扇区,因此具有512字节的大小。 bwrtn/s: 以每秒块数写入设备的数据总量。
-C 从文件中读取数据时,告诉sar显示sadc插入的注释,没用过。
-d 报告每个块设备的活动。显示数据时,通常使用设备规格dev m-n(DEV列)。 m是设备的主要编号,n是次要编号。如果使用选项-p,也可以打 印设备名称,如果使用选项-j,则可以打印持久性设备名称(见下文)。请注意,磁盘活动取决于要收集的sadc选项“-S DISK”和“-S XDISK”。一般和- p一起使用,block设备会显示成sdx或者lv。将显示以下值:
sar -d 1
Linux 3.10.0-1160.71.1.el7.x86_64 (development) 08/25/2022 x86_64 (2 CPU)
04:41:37 PM DEV
04:41:38 PM dev8-0
04:41:38 PM dev253-0
04:41:38 PM dev253-1
tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
sar -H 1
Linux 4.14.131-generic (HD-HZ1-ComCVK-020)
04:57:26 PM kbhugfree kbhugused %hugused
04:57:27 PM 72351744 683671552 90.43
04:57:28 PM 72351744 683671552 90.43
08/25/2022
x86_64
(96 CPU)
0.00 0.00 0.00
0.00 0.00 0.00
0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
tps: 指示发出给设备的每秒传输次数。可以将多个逻辑请求组合到设备的单个I/O请求中。转移的大小不确定。 rd_sec/s: 从设备读取的扇区数。默认扇区的大小为512字节。
wr_sec/s: 写入设备的扇区数。默认扇区的大小为512字节。
avgrq-SZ: 发给设备的请求的平均大小(以扇区为单位)。
avgqu-SZ: 发布到设备的请求的平均队列长度,队列越长,延时越高。
await: 发送给要提供的设备的I/O请求的平均时间(以毫秒为单位)。这包括队列中的请求所花费的时间和服务他们的时间。
svctm: 发出给设备的I/O请求的平均服务时间(以毫秒为单位)。该值不可信
%until: 向设备发出I/O请求所经过的时间百分比(设备的带宽利用率)。当此值接近100%时,会发生设备饱和。在设备支持多层多 队列写入时,该值仅供参考
-e [hh:mm:ss] 设置报告的结束时间。默认结束时间是18:00:00。小时数必须以24小时格式提供。当从文件读取数据或将数据写入文件(选项-f或- o)时,可以使用此选项。没用过
-F [ MOUNT ] 显示当前挂载的文件系统的统计信息。伪文件系统将被忽略。在报告的最后,将显示sar所有这些文件系统的摘要。注意,文件系统统 计信息依赖于收集的sadc选项-S XDISK。使用MOUNT参数关键字表示将报告挂载点而不是文件系统设备。将显示以下值:不会用
-f [filename] 从文件名中提取记录(由-o filename标志创建)。 filename参数的默认值是当前的每日数据文件/ var / log / sa / sadd文件。 -f选项 不包括-o选项。
-H 报告hugepages利用率统计。主机overlay环境使用了hugepage,可以用该命令观察大页内存的使用信息。
kbhugfree: 尚未分配的大页内存量(以千字节为单位)

kbhugused: 已分配的大页内存量(以千字节为单位)。 %hugused: 已分配的hugepages占总内存的百分比。
-h 打印简短的帮助信息
-I { int [,...] | SUM | ALL | XALL } 查看报告中断的统计信息,int是中断号,使用逗号分隔符可以指定多个中断号(sar -I 1,2,3 1)。关键字SUM表示 每秒接收到的中断总数。ALL报告前16位中断统计,XALL显示全部中断号的统计,包括APIC的中断也会被包含。请注意,中断统计依赖于sadc选项“-S INT”来收集。
sar -I ALL 1
Linux 4.14.0-generic (HB1-BJMY2-COMCVK01)
05:15:33 PM INTR intr/s
05:15:34 PM 0 0.00
05:15:34 PM 1 0.00
05:15:34 PM 2 0.00
05:15:34 PM 3 0.00
05:15:34 PM 4 0.00
05:15:34 PM 5 0.00
05:15:34 PM 6 0.00
05:15:34 PM 7 0.00
05:15:34 PM 8 0.00
05:15:34 PM 9 2.00
05:15:34 PM 10 0.00
05:15:34 PM 11 0.00
05:15:34 PM 12 0.00
05:15:34 PM 13 0.00
05:15:34 PM 14 0.00
05:15:34 PM 15 0.00
INTR: 中断号
intr/s: 每秒中断次数
-i interval 以尽可能接近 sec 秒的间隔选择数据。不会用
08/25/2022
x86_64
(48 CPU)
-j { ID | LABEL | PATH | UUID | ... } 显示持久设备名称。将此选项与选项-d结合使用。选项ID、LABEL等指定的类型持久的名字。这些选项不受限 制,唯一的先决条件是中存在所需持久名称的目录/dev/disk.如果没有找到设备的持久名称,设备名称就会被漂亮地打印出来(参见下面的选项-p)。没 用过
-m { keyword [,...] | ALL } 报告电源管理统计信息。注意,这些统计数据依赖于要收集的sadc选项“-S POWER”。主要的关键字有CPU,FAN,FREQ, IN,TEMP和USB。
-n { keyword [,...] | ALL } 报告网络统计信息,关键字包括:DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和 UDP6. 该参数很常用
DEV选项是显示网卡的收发包统计信息,字段如下:
IFACE:网卡名 rxpck/s:每秒收到的包数 txpck/s:每秒发送的包数 rxkB/s:每秒收到的数据大小单位KBytes txkB/s:每秒发送的数据大小单位KBytes rxcmp/s:每秒收到的压缩数据包 txcmp/s:每秒发送的压缩数据包 rxmcst/s:每秒接收的多播数据包
EDEV选项是显示网卡的错误包统计信息,字段如下:
IFACE:网卡名

rxerr/s:每秒钟接收到的损坏的数据包
txerr/s:每秒钟发送的数据包错误数 coll/s:当发送数据包时候,每秒钟发生的冲撞(collisions)数,这个是在半双工模式下才有. rxdrop/s:当由于缓冲区满的时候,网卡设备接收端每秒钟丢掉的网络包的数目 txdrop/s:当由于缓冲区满的时候,网络设备发送端每秒钟丢掉的网络包的数目 txcarr/s:当发送数据包的时候,每秒钟载波错误发生的次数 rxfram/s:在接收数据包的时候,每秒钟发生的帧对其错误的次数 rxfifo/s:在接收数据包的时候,每秒钟缓冲区溢出的错误发生的次数 txfifo/s:在发生数据包的时候,每秒钟缓冲区溢出的错误发生的次数
NFS是NFS客户端相关统计信息,字段如下:
call/s:每秒的RPC请求数 retrans/s:每秒的RPC超时重传次数 read/s:每秒通过RPC调用的读取操作次数 write/:每秒通过RPC调用的写操作次数 access/s: 每秒RPC访问次数 getatt/s:每秒RPC获取属性次数
NFSD是NFS服务端相关统计信息
SOCK是套接字服务的统计信息,字段如下:
totsck:系统总共使用了多少个套接字 tcpsck:当前有多少个TCP套接字在使用 udpsck:当前有多少个UDP套接字在使用 rawsck:当前多少个RAW套接字在使用 ip-frag:当前有多少个IP分段报文在队列里 tcp-tw:当前有多少个TCP套接字处于TIME_WAIT状态
IP选项显示IPv4网络传输的统计信息. EIP关键字报告IPv4网络错误的统计信息. 关键字ICMP报告ICMPv4的网络传输统计信息. 关键字EICMP报告ICMPv4的错误信息统计. 关键字TCP报告TCPv4网络传输统计信息. 关键字ETCP报告TCPv4网络错误统计信息. 关键字UDP报告UDPv4网络传输统计信息.
-o [ filename ] 把输出的信息以二进制格式保存到指定文件,默认是写到/var/log/sa/sadd。
-P { cpu [,...] | ALL } 报告指定的任意CPU处理器的运行状态信息,也可以通过关键字ALL指定全部CPU,显示字段如下:
sar -P ALL 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development) 08/26/2022
x86_64
(2 CPU)
11:31:04 AM CPU
11:31:05 AM all
11:31:05 AM 0
11:31:05 AM 1
CPU: CPU号
%user %nice %system %iowait %steal
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
%idle
100.00
100.00
100.00
%user: 用户程序占用的CPU时间百分比
%nice: 显示在用户级别,用于nice操作所占用 CPU 总时间的百分比。
%system: 系统调用占用的CPU时间百分比
%iowait: I/O wait占用的CPU时间百分比
%steal: 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。虚拟机内有意义,表示被其他虚拟机争抢CPU 时间。
%idle: CPU空间的时间百分比
-p 更友好的打印设备名。一般是和 -d一起使用。默认打印设备名是/dev/主-副设备号,加上p参数就会打印成/dev里的设备名即sdx.名称映射的控制 在/etc/sysconfig/sysstat.ioconf里设备。

sar -dp 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development) 09/15/2022
x86_64
(2 CPU)
10:18:41 AM DEV
10:18:42 AM sda
10:18:42 AM centos-root
10:18:42 AM centos-swap
tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz
await svctm %util
0.00 0.00 0.00
0.00 0.00 0.00
0.00 0.00 0.00
-q 报告队列长度和平均负载。很常用 sar -q 1 1
Linux 3.10.0-1160.71.1.el7.x86_64 (development)
09/15/2022
x86_64
(2 CPU)
0.00 0.00
0.00
0.00 0.00
0.00
0.00 0.00
0.00
0.00 0.00
0.00 0.00
0.00 0.00
10:22:49 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
10:22:50 AM 0 129 0.00 0.01 0.05 0
Average: 0 129 0.00 0.01 0.05 0
run-sz: 运行队列的长度(等待运行的任务数) plist-sz: 任务列表的任务数
10:34:55 AM
10:34:56 AM
Average:
frmpg/s bufpg/s campg/s
2.00 0.00 0.00
2.00 0.00 0.00
ldavg-1: 1分钟内系统平均负载。平均负载是runable、running的任务数(进程状态是R状态)和处于不可中断的状态待唤醒任务数(D状 态进程)。
ldavg-5: 5分钟内系统平均负载
ldavg-15: 15分钟内系统平均负载
blocked: 当前处于等待I/O完成的任务,该值过多说明I/O性能差
-R 报告内存统计信息,主要有以下字段

sar -R 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development)
09/15/2022
x86_64
(2 CPU)
frmpg/s: 每秒被释放的内存页。负值表示系统分配的页面数。注意,根据机器架构的不同,页面的大小为4kB或8kB。 bufpg/s: 每秒被系统加入到buffer里的内存页数。负数表示系统减少了buffer的内存页。
campg/s: 每秒被系统加入到cache的内存页数。负数表示系统减少了cache的内存页。

-r 报告内存的使用统计。主要有以下字段,很常用 # sar -r 1 1
Linux 3.10.0-1160.71.1.el7.x86_64 (development) 09/15/2022 x86_64 (2 CPU)
10:42:35 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:42:36 AM 3173508 706704 18.21 2112 490556 273340 5.79 366192 191164 8
Average: 3173508 706704 18.21 2112 490556 273340 5.79 366192 191164 8
kbmemfree: free的内存,单位KB。这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused: used的内存,单位KB。不包括内核使用的内存。这个值和free命令中的used值基本一致,所以它包括buffer和cache的 空间.
%memused: 这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers: 内核用作缓冲区的内存,单位KB.就是free命令中的buffer.
kbcached: 内核用于缓存数据的内存,单位KB,就是free命令中的cache.
kbcommit: 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit: 这个值是kbcommit与内存总量(包括swap)的一个百分比.这个值可以大于100%,因为内核允许overcommit内存(vm. overcommit_memory)。
kbactive: 活跃内存,单位KB。最近使用过的且一般不会回收的内存,除非绝对必要的回收。 kbinact: 非活跃内存,单位KB。最近较少使用的内存,有可能被系统回收作其他用途)。 kbdirty: 脏页,即等待写入磁盘的内存(以千字节为单位),可以使用sync刷入硬盘
-S 报告SWAP的使用统计。主要有以下字段

sar -S 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development) 09/15/2022 x86_64 (2 CPU)
11:07:30 AM kbswpfree kbswpused %swpused kbswpcad %swpcad
11:07:31 AM 839676 0 0.00 0 0.00
Average: 839676 0 0.00 0 0.00
kbswpfree: 未使用的swap,单位KB
kbswpused: 使用中的swap内存,单位KB
%swpused: 使用中的swap内存占总swap的百分比
kbswpcad: 被swap缓存的内存量,这部分内存曾经被换出,现在又被换入但仍然位于swap空间,单位KB。 %swpcad: kbswpcad占kbswpused的百分率
-s [ hh:mm:ss ] 设置数据的开始时间,使sar命令在指定的时间处或之后提取带有时间标记的记录。默认开始时间为08:00:00。工作时间必须以24小 时格式给出。该选项仅在读取数据时使用从文件(选项-f)。不会用
-t 从每日数据文件读取数据时,指示sar应该以数据的原始本地时间显示时间戳文件的创造者。如果没有此选项,sar命令将显示用户所在地区时间的 时间戳。没用过
-u [ ALL ] 报告cpu统计。ALL关键字可以打印全部CPU的信息。主要有以下字段:很常用

sar -u ALL 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development)
09/15/2022 x86_64
%iowait %steal %irq
0.00 0.00 0.00
0.00 0.00 0.00
(2 CPU)
%soft %guest %gnice
0.00 0.00 0.00
0.00 0.00 0.00
11:19:03 AM
%idle
11:19:04 AM
100.00
Average:
100.00
CPU %usr
all 0.00
all 0.00
%nice %sys
0.00 0.00
0.00 0.00
%user: 在用户态(应用程序)执行时的CPU总时间的百分比,该字段包括运行虚拟处理器的时间。 %usr: 在用户态(应用程序)执行时的CPU总时间的百分比,此字段不包括运行虚拟处理器的时间。

02:38:37 PM
02:38:38 PM
Average:
proc/s cswch/s
0.00 104.00
0.00 104.00
%nice: 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system: 系统(内核态)执行时发生的CPU使用率,该字段包括用于处理硬件和软件中断的时间。 %sys: 系统(内核态)执行时发生的CPU使用率,该字段不包括用于处理硬件和软件中断的时间。 %iowait: 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal: 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%irq: 硬中断占用的CPU时间百分比
%soft: 软中断占用的CPU时间百分比
%guest: 运行虚拟机的CPU使用率
%gnice: 以低优先级运行虚拟机的CPU使用率
%idle: 空闲CPU使用率
-V 打印版本号
-v 报告inode的状态,文件和其他内核表。主要有以下字段:
sar -v 1 1
Linux 3.10.0-1160.71.1.el7.x86_64 (development)
11:34:10 AM dentunusd file-nr inode-nr pty-nr
11:34:11 AM 33464 1152 23856 2
Average: 33464 1152 23856 2
file-nr: 被系统使用的文件句柄数量 inoe-nr: 已经使用的索引数量 pty-nr: 使用的pty数量
-W 报告swap操作的统计,主要有以下字段:

sar -W 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development)
02:34:24 PM pswpin/s pswpout/s
02:34:25 PM 0.00 0.00
Average: 0.00 0.00
09/15/2022
x86_64
(2 CPU)
pswpin/s: 每秒被系统置换进swap的页数,这个值不为0说明有内存(numa)不足了 pswpout/s: 每秒被系统从swap置换出的页数
-w 报告任务创建和系统上下文切换,这里的上下文切换不能反映是主动切换还是被动切换,需要结合pidstat去判断

sar -w 1 1

Linux 3.10.0-1160.71.1.el7.x86_64 (development)
09/15/2022
x86_64
(2 CPU)
09/15/2022
x86_64
(2 CPU)
proc/s: 每秒被创建的任务数 cswch/s: 每秒上下文切换数
-y 报告tty设备活动情况。主要有以下字段,没用过