sar

收集、报告和存储系统活动信息


语法格式

sar [-AbBCdhmprRStvVwWy] [-i interval] [-u [ALL]] [-n {keywords | ALL}]
[-I {ints | SUM | ALL | XALL}] [-P {cpus | ALL}] [-o [file] | -f [file]]
[-s [hh:mm:ss]] [-e [hh:mm:ss]] [interval [count]]

命令简介

sar是一个综合的系统性能监控程序,从CPU的利用率、中断的处理、内存的使用、内存页面的调度、交换区的应用、磁盘的I/O,到各种网络协议的统计,几乎无所不包。这些数据来自系统内核维护的各种系统活动计数器。利用sar命令,可以显示选定的数据。

其中,interval是数据采样的时间间隔(单位为秒),count是数据采样的次数。基于intervalcount参数的数值,sar将会按照一定的时间间隔,显示指定数量的采样数据。如果interval参数是0,sar命令将会显示从系统引导迄今的平均统计数据。如果指定了interval参数,但未指定count参数,sar将会连续地显示默认或选定的统计数据。利用“-o”选项,除了在屏幕上显示之外,也可以把收集的数据写入指定的文件。如果省略了文件名参数file,sar命令将会使用标准的每日系统活动数据文件/var/log/sa/sadd,其中dd是当天的日期。通常,系统内核能够提供的绝大部分主要数据都会保存在该文件中。

如果未指定任何选项与参数,sar命令仅仅显示系统主要资源CPU的活动信息,即CPU利用率的统计数据。这也是用户开始运行sar命令的首选调查对象。如果CPU的利用率(用户+系统)接近于100%,说明CPU的工作负载已处于严重饱和或临界状态。

使用不同的选项,可以选择显示特定系统活动的信息。如果指定了“-A”选项,相当于同时指定了“-bBdqrRSvwWy -I SUM -I XALL -n ALL -u ALL -P ALL”多个选项,意味着显示sar命令能够提供的所有信息。

运行sar命令时,sar将会读取系统活动数据文件中保存的记录,按照用户的要求,显示选定的数据。利用“-f”选项,可以从指定的其他文件中读取数据,否则,从标准的每日系统活动数据文件中读取数据。

如果未指定“-P”选项,sar命令将会以百分比的形式,显示系统中所有CPU的综合统计数据,即所有CPU的综合利用率。如果指定了“-P”选项,sar仅显示指定CPU的统计数据。如果指定了“-P ALL”选项,sar将会分别显示每个CPU的统计数据,同时给出所有CPU的综合统计数据。

如果期望显示多种采样数据和报告,最方便的做法是利用“-o”选项,指定一个sar命令的输出文件。以后台进程形式运行sar命令。语法格式如下:

$ sar -o datafile interval count >/dev/null 2>&1 &

期间,sar将会调用“/usr/lib/sa/sadc -S ALL”命令,按照指定的时间间隔(interval)与采样次数(count),收集系统能够提供的所有数据,以二进制数据的形式,写入指定的文件(datafile)。

利用“-f”选项读取datafile文件,使用收集数据时指定的时间间隔(interval)与采样次数(count),即可有选择性地显示各种统计数据。如果未指定count参数,意味着选择了文件中的所有记录。采用这种方法收集和显示系统特定时间段的活动,对于分析系统的性能,确定高峰期间的系统活动是非常有用的。

注意,sar命令只能报告本地系统的处理活动。此外,有些统计数据的获取需要具有超级用户的权限。

命令选项

-A  这是一个综合选项,相当于同时指定了“-bBdqrRSuvwWy -I SUM -I XALL -n ALL -u ALL -P ALL”多个选项。

-b  显示I/O请求与传输速率等统计数据,其中包括:

tps  存储设备每秒受理的实际I/O请求总量(多个逻辑I/O请求可以合并为一个实际I/O传输,每个I/O传输的大小并不固定)。

rtps  设备每秒受理的请求读数据的总量。

wtps  设备每秒受理的请求写数据的总量。

bread/s  每秒从设备读取的数据总量(512字节数据块的数量)。

bwrtn/s  每秒写入设备的数据总量(512字节数据块的数量)。

-B  显示页面调度的统计数据,其中包括:

pgpgin/s  系统每秒从磁盘调入内存的页面数据总量(KB)。

pgpgout/s  系统每秒从内存调出磁盘的页面数据总量(KB)。

fault/s  系统每秒受理的页面故障(主次合计)数量。注意,这里计数的页面故障不是导致I/O活动的页面故障,而是无须I/O即可解决的页面故障。

majflt/s  系统每秒受理的主要页面故障(要求从磁盘调入内存)数量。

pgfree/s  系统每秒置入空闲链表的页面数量。

pgscank/s  kswapd守护进程每秒扫描的页面数量。

pgscand/s  系统直接扫描的页面数量。

pgsteal/s  为满足内存需求,系统每秒从缓存(页面缓存与交换区缓存)中收回的页面数量。

%vmeff  pgsteal/pgscan的计算结果,说明页面回收的效率。数值越大(如接近100%)说明页面回收的效率越高,数值越小(如低于30%)说明页面回收的效率越低。如果在采样的时间间隔内没有扫描页面,这个字段的数值是0。

-C  从文件读取数据时,令sar显示由sadc插入的注释部分。

-d  报告每个块设备的处理活动信息。在显示数据时,通常采用设备规范devm-n显示设备名(DEV字段)。其中m是主设备号,n是次设备号。如果指定了“-p”选项,显示设备文件名的缩写(忽略目录部分)。注意,磁盘活动数据是否存在依赖于运行sadc守护进程收集数据时是否指定了“-S DISK”与“-S XDISK”选项。显示的数据通常包含下列字段:

tps  设备每秒受理的实际传输数量。多个逻辑I/O请求可以合并为一个实际I/O请求。注意,每个I/O传输的大小并不固定。

rd_sec/s  从设备读取的扇区(512字节)数量。

wr_sec/s  写入设备的扇区数量。

avgrq-sz  设备受理I/O请求的平均扇区数量。

avgqu-sz  设备受理I/O请求的平均队列长度。

await  设备受理I/O请求的平均处理时间(毫秒),包括队列等待时间与实际服务时间。

svctm  设备受理I/O请求的平均服务时间(毫秒)。

%util  设备受理I/O请求期间占用CPU时间的百分比(带宽利用率)。当这个数值接近100%时,说明设备达到饱和状态。

-e [hh:mm:ss]  设置统计数据的截止时间,默认的时间是18:00:00。指定时间时采用24小时制。当使用“-f”或“-o”选项读写数据时,可以使用这个选项限定数据的范围。

-f [file]  从指定的文件中读取系统活动数据,默认的文件名参数是当天的数据文件/var/log/sa/sadd。文件可以是先前利用“-o”选项创建的,也可以是由sadc命令直接生成的。

-h  显示命令的用法与选项的简单说明等帮助信息,然后退出。

-i interval  选择尽可能靠近指定时间间隔(单位为秒)的数据记录。

-I {ints | SUM | ALL | XALL}  显示指定中断的统计数据。ints是一个或多个中断号(中间加逗号分隔符)。也可以在命令行上指定多个“-I”选项,每个“-I”选项指定一个中断号,显示多个独立中断的统计数据。关键字SUM意味着显示系统每秒收到的中断总和。关键字ALL意味着显示前16个中断的统计数据。关键字XALL意味着显示所有中断(包括潜在的APIC中断源)的统计数据。注意,中断统计数据是否存在依赖于运行sadc守护进程收集数据时是否指定了“-S INT”选项。

-m  显示电源管理的统计数据。注意,电源管理的统计数据是否存在依赖于运行sadc守护进程收集数据时是否指定了“-S POWER”选项。显示的数据通常包含下列字段:

MHz  CPU时钟频率(单位为MHz)。

-n {keywords | ALL}  显示网络方面的统计数据。keywords是一个或多个关键字(中间加逗号分隔符)。可用的关键字包括DEV、EDEV、NFS、NFSD、SOCK、IP、EIP、ICMP、EICMP、TCP、ETCP、UDP、SOCK6、IP6、EIP6、ICMP6、EICMP6和UDP6。注意,IPv6方面的统计数据与IPv4类似,这里省略不列。利用关键字DEV,可以查询网络接口设备的统计数据,其中包括:

IFACE  网络接口设备的名字。

rxpck/s  每秒接收的分组数据的总和。

txpck/s  每秒发送的分组数据的总和。

rxkB/s  每秒接收的数据总和(KB)。

txkB/s  每秒发送的数据总和(KB)。

rxcmp/s  每秒接收的压缩分组数据的数量(针对cslip等协议)。

txcmp/s  每秒发送的压缩分组数据的数量(针对cslip等协议)。

rxmcst/s  每秒接收的广播分组数据的数量。

利用关键字EDEV,可以查询网络接口设备故障(错误)的统计数据,其中包括:

IFACE  网络接口设备的名字。

rxerr/s  每秒接收的无效分组数据的总和。

txerr/s  每秒发送的无效分组数据的总和。

coll/s  发送分组数据期间每秒出现碰撞的数量。

rxdrop/s  由于系统缓冲区空间不足导致接收过程中每秒扔掉的分组数据数量。

txdrop/s  由于系统缓冲区空间不足导致发送过程中每秒扔掉的分组数据数量。

txcarr/s  发送分组数据期间每秒出现载波错误的数量。

rxfram/s  接收分组数据期间每秒出现数据帧错位的数量。

rxfifo/s  接收分组数据期间每秒出现FIFO覆盖错误的数量。

txfifo/s  发送分组数据期间每秒出现FIFO覆盖错误的数量。

利用关键字NFS,可以查询NFS客户机活动的统计数据,其中包括:

call/s  每秒产生的RPC请求的数量。

retrans/s  每秒产生的需要重新传输的RPC请求的数量。

read/s  每秒产生的RPC read调用的数量。

write/s  每秒产生的RPC write调用的数量。

access/s  每秒产生的RPC access调用的数量。

getatt/s  每秒产生的RPC getattr调用的数量。

利用关键字NFSD,可以查询NFS服务器活动的统计数据,其中包括:

scall/s  每秒收到的RPC请求的数量。

badcall/s  每秒收到有误或无效RPC请求的数量。

packet/s  每秒收到的网络分组数据的数量。

udp/s  每秒收到的UDP分组数据的数量。

tcp/s  每秒收到的TCP分组数据的数量。

hit/s  回应缓存每秒能够命中的数量。

miss/s  回应缓存每秒失败的数量。

sread/s  每秒收到的RPC read调用的数量。

swrite/s  每秒收到的RPC write调用的数量。

saccess/s  每秒收到的RPC access调用的数量。

sgetatt/s  每秒收到的RPC getattr调用的数量

利用关键字SOCK,可以查询当前正在使用的套接字的统计数据,其中包括:

totsck  系统使用的套接字总和。

tcpsck  当前正在使用的TCP套接字数量。

udpsck  当前正在使用的UDP套接字数量。

rawsck  当前正在使用的RAW套接字数量。

ip-frag  当前正在使用的IP段的数量。

tcp-tw  处于TIME_WAIT状态的TCP套接字的数量。

利用关键字IP,可以查询IPv4网络流量的统计数据,其中包括(注意,IPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

irec/s  从网络接口每秒收到的数据报(包括错误的数据报)总和。

fwddgm/s  每秒收到的中转数据报数量。

idel/s  每秒成功地传输到IP(包括ICMP)用户协议的数据报总和。

orq/s  本地IP(包括ICMP)用户协议每秒提供给IP传输请求的IP数据报总和(不包括fwddgm/s计数的任何数据报)。

asmrq/s  每秒收到的需要重新装配的IP段(fragment)的数量。

asmok/s  每秒成功地重新装配的IP数据报数量。

fragok/s  每秒成功分段的IP数据报数量。

fragcrt/s  每秒生成的IP数据报段的数量。

利用关键字EIP,可以查询IPv4网络错误的统计数据,其中包括(注意,IPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

ihdrerr/s  由于IP头错误,如校验和错误、版本号不匹配、生存期超时或IP选项错误等每秒扔掉的输入数据报数量。

iadrerr/s  由于IP头中目的地址字段的IP地址无效(如0.0.0.0)等原因每秒扔掉的输入数据报数量。对于非路由器的主机系统而言,由于不负责转发数据报,这个字段也包括因目的地址非本地IP地址而扔掉的输入数据报数量。

iukwnpr/s  成功收到本地寻址的数据报,但因其协议不明或不支持导致的每秒扔掉的数据报数量。

idisc/s  本身没有问题但因缺乏缓冲区导致无法处理每秒扔掉的输入IP数据报的数量。

odisc/s  本身没有问题但因缺乏缓冲区导致无法发送每秒扔掉的输出IP数据报的数量。

onort/s  因路由问题无法中转每秒扔掉的IP数据报的数量。

asmf/s  IP装配算法每秒检测到的故障数量。

fragf/s  因需要分段而无法分段导致每秒扔掉的IP数据报的数量。

利用关键字ICMP,可以查询ICMP网络流量的统计数据,其中包括(注意,ICMPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

imsg/s  每秒收到的ICMP报文的总和(其中包括ierr/s计数的数据)。

omsg/s  每秒发送的ICMP报文的总和(其中包括oerr/s计数的数据)。

iech/s  每秒收到的ICMP Echo请求报文的数量。

iechr/s  每秒收到的ICMP Echo Reply报文的数量。

oech/s  每秒发送的ICMP Echo请求报文的数量。

oechr/s  每秒发送的ICMP Echo Reply报文的数量。

itm/s  每秒收到的ICMP Timestamp请求报文的数量。

itmr/s  每秒收到的ICMP Timestamp Reply报文的数量。

otm/s  每秒发送的ICMP Timestamp请求报文的数量。

otmr/s  每秒发送的ICMP Timestamp Reply报文的数量。

iadrmk/s  每秒收到的ICMP Address Mask Request报文的数量。

iadrmkr/s  每秒收到的ICMP Address Mask Reply报文的数量。

oadrmk/s  每秒发送的ICMP Address Mask Request报文的数量。

oadrmkr/s  每秒发送的ICMP Address Mask Reply报文的数量。

利用关键字EICMP,可以查询ICMP错误信息的统计数据,其中包括(注意,ICMPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

ierr/s  每秒收到的ICMP校验和或长度等有误的ICMP报文的数量。

oerr/s  每秒因缓冲区缺乏导致没有发送的ICMP报文的数量。

idstunr/s  每秒收到的ICMP Destination Unreachable报文的数量。

odstunr/s  每秒发送的ICMP Destination Unreachable报文的数量。

itmex/s  每秒收到的ICMP Time Exceeded报文的数量。

otmex/s  每秒发送的ICMP Time Exceeded报文的数量。

iparmpb/s  每秒收到的ICMP Parameter Problem报文的数量。

oparmpb/s  每秒发送的ICMP Parameter Problem报文的数量。

isrcq/s  每秒收到的ICMP Source Quench报文的数量。

osrcq/s  每秒发送的ICMP Source Quench报文的数量。

iredir/s  每秒收到的ICMP Redirect报文的数量。

oredir/s  每秒发送的ICMP Redirect报文的数量。

利用关键字TCP,可以查询TCP网络流量的统计数据,其中包括(注意,TCPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

active/s  TCP连接每秒从CLOSED状态直接转到SYN-SENT状态的次数。

passive/s  TCP连接每秒从LISTEN状态直接转到SYN-RCVD状态的次数。

iseg/s  每秒收到的数据段(包括其中有错的数据段)总和。

oseg/s  每秒发送的数据段总和。

利用关键字ETCP,可以查询TCP网络错误的统计数据,其中包括(注意,TCPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

atmptf/s  TCP连接每秒从SYN-SENT状态或SYN-RCVD状态直接转到CLOSED状态的次数,加上从SYN-RCVD状态直接转到LISTEN状态的次数。

estres/s  TCP连接每秒从ESTABLISHED状态或CLOSE-WAIT状态直接转到CLOSED状态的次数。

retrans/s  每秒重新发送的TCP段的总和。

isegerr/s  每秒收到的错误TCP段(如TCP校验和有误等)的总和。

orsts/s  每秒发送的包含RST标志的TCP段的数量。

利用关键字UDP,可以查询UDP网络流量的统计数据,其中包括(注意,UDPv4 统计数据依赖于sadc命令的“-S SNMP”选项收集的数据):

idgm/s  每秒传递给UDP用户的UDP数据报总和。

odgm/s  每秒发送的UDP数据报总和。

noport/s  每秒收到的但目的端口没有应用接受的UDP数据报总和。

idgmerr/s  每秒收到的目的端口有应用接受但无法传递的UDP数据报总和。

关键字ALL等价于指定了上方所有的关键字,因而意味着显示所有网络活动的统计数据。

-o [file]  调用“sadc -S ALL”命令,把系统内核能够提供的所有数据,以二进制数据的形式,逐个记录写入默认或指定的文件。file参数的默认值是当日的数据文件/var/log/sa/sadd。其中dd是当天的日期。注意,“-o”与“-f”选项不能同时使用。

-P {cpus | ALL}  显示指定CPU的统计数据。其中,cpus可以是一个或多个CPU号(中间加逗号分隔符),0是第一个CPU。关键字ALL意味着显示每个单独CPU的统计数据,以及所有CPU的统计数据。

-p  与“-d”选项一起用时,用于显示缩写的设备名(忽略/dev/目录部分),否则默认显示为devm-n,其中m与n分别表示主次设备号。

-q  显示队列长度与平均系统负载,其中包括:

runq-sz  运行队列长度,即等待运行的任务数量。

plist-sz  任务表中的任务数量。

ldavg-1  最近1分钟内系统负载的平均值。注意,系统的平均负载是在指定时间内多次采样获取的任务数量的平均值。这里所谓的任务指的是可运行或正在运行的任务(进程状态为R)与处于不可中断睡眠状态的任务(进程状态为D)。

ldavg-5  最近5分钟内系统负载的平均值。

ldavg-15  最近15分钟内系统负载的平均值。

-r  显示内存使用情况的统计数据,其中包括:

kbmemfree  可用的空闲内存数量(KB)。

kbmemused  已占用的内存数量(KB),其中不包括系统内核使用的内存。

%memused  已用内存占整个内存的百分比。

kbbuffers  系统内核用作缓冲区的内存数量(KB)。

kbcached  系统内核用于缓存数据的内存数量(KB)。

kbcommit  当前工作负载需要的内存数量(KB)。

%commit  当前工作负载所需内存占整个内存数量(RAM+swap)的百分比。

-R  显示内存统计数据,其中包括:

frmpg/s  系统每秒释放的内存页面(4KB或8KB)的数量,其中负值表示系统分配的内存页面数量。

bufpg/s  系统每秒用作缓冲区的附加内存页面的数量,其中负值表示只有少量的内存页面用作缓冲区。

campg/s  系统每秒缓存的附加内存页面的数量,其中负值表示只有少量的内存页面位于缓存中。

-s [hh:mm:ss] 设置数据的起始时间,表示读取从指定的时间点开始收集的数据。默认的起始时间是08:00:00。指定时间时必须采用24小时制。注意,仅当从“-f”选项指定的文件中读取数据时才能使用这个选项。

-S  显示交换区空间使用情况的统计数据,其中包括:

kbswpfree  空闲交换区空间的数量(KB)。

kbswpused  已用交换区空间的数量(KB)。

%swpused  已用交换区占整个交换区的百分比。

kbswpcad  用作缓存的交换区内存的数量(KB)。所谓缓存的交换区内存是这样一种内存:其页面数据曾经导出到交换区,现又从交换区导入内存,但交换区仍存有其页面数据。如果再需要释放内存,导出页面数据时,无须再写一次,因为交换区中仍存有数据副本,从而能够减少I/O。

%swpcad  用作缓存的交换区内存占已用交换区空间的百分比。

-t  从收集的数据文件读取数据时,sar应按数据文件创建者记录的本地时间显示时间。如果未指定这个选项,sar将会按用户的本地时间显示时间。

-u [ALL]  显示CPU的使用情况,关键字ALL意味着显示所有CPU字段。其中包括:

%user  用户模式(应用,包括运行虚拟机花费的时间)占用整个CPU时间的百分比。

%usr  用户模式(应用,不包括运行虚拟机花费的时间)占用整个CPU时间的百分比。

%nice  用户模式(处理具有优先级调整值的进程)占用整个CPU时间的百分比。

%system  系统模式(内核)占用整个CPU时间(包括处理硬件中断或软件中断的时间)的百分比。

%sys  系统模式(内核)占用整个CPU时间(不包括处理硬件或软件中断的时间)的百分比。

%iowait  因等待磁盘I/O处理完成而处于空闲状态时占用整个CPU时间的百分比。

%steal  虚拟CPU因等待虚拟机管理器提供服务花费的时间占用整个CPU时间的百分比。

%irq  处理硬件中断时占用整个CPU时间的百分比。

%soft  处理软件中断时占用整个CPU时间的百分比。

%guest  运行虚拟机时占用整个CPU时间的百分比。

%idle  系统完全空闲时占用整个CPU时间的百分比。

注意,在一个多CPU(SMP)的系统中,如果某个CPU的每个字段总是0.00(表示根本没有任何处理活动),说明相应的CPU处于禁用(offline)状态。

-v  显示信息节点、文件和其他内核表结构的状态信息,其中包括:

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

file-nr  系统使用的文件句柄的数量。

inode-nr  系统调用的信息节点处理程序的数量。

pty-nr  系统使用的伪终端数量。

-V  显示命令的版本与版权信息,然后退出。

-w  显示任务创建与系统上下文切换活动,其中包括:

proc/s  系统每秒创建的任务总和。

cswch/s  系统每秒上下文切换的总和。

-W  显示交换活动的统计数据,其中包括:

pswpin/s  系统每秒读入的交换区页面总和。

pswpout/s  系统每秒写出的交换区页面总和。

-y  显示TTY设备活动的统计数据,其中包括(TTY字段将会给出串口的编号):

rcvin/s  串口每秒受理的接收中断数量。

xmtin/s  串口每秒受理的发送中断数量。

framerr/s  串口每秒出现帧错误的数量。

prtyerr/s  串口每秒出现奇偶校验错误的数量。

brk/s  串口每秒出现断线状况的数量。

ovrun/s  串口每秒出现数据覆盖错误的数量。

应用实例

1. 显示从系统引导迄今CPU的平均利用率。

$ sar

2. 收集系统能够提供的所有活动数据,尤其是中断数据,以2秒为时间间隔,连续采集20次,把采集的数据写入指定文件,同时在屏幕上连续显示CPU的利用率。

$ sar -o sadata 2 20

3. 从收集的数据文件中,显示前10次采集的内存与网络统计数据。

$ sar -r -n DEV -f sadata 2 10

4. 显示当天系统活动数据文件保存的所有统计数据。

$ sar -A

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z