收集、报告和存储系统活动信息
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是数据采样的次数。基于interval与count参数的数值,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