命令含义:
sar(System Activity Reporter 系统活动情况报告)是Linux 的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动。
使用如下命令安装sar命令:yum install sysstat
用法:sar [参数] [时间间隔] [次数]
常用参数:
-u:输出CPU使用情况的统计信息
-q:输出进程队列长度和平均负载状态统计信息
-B:输出内存页面的统计信息
-r:输出内存和交换空间的统计信息
-W:输出系统交换的统计信息
-d:输出每一个块设备的活动信息
-b:显示I/O和传送速率的统计信息
-f filename:从filename读取数据信息
-s hh:mm:ss:指定输出统计数据的起始时间
-e hh:mm:ss:指定输出统计数据的截止时间,默认为18:00:00
-o filename:将输出信息保存到文件filename
实例:
sar -u 1
统计cpu的使用率,每1秒取一次值,各列含义如下:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比
若 %iowait 的值过高,表示硬盘存在I/O瓶颈
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比
1)若%idle的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
2)若%idle的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
sar -q 1
系统队列长度和平均负载,各列含义如下:
runq-sz 表示运行队列的长度(等待运行的进程数)
plist-sz表示进程列表中进程(processes)和线程(threads)的数量
ldavg-1表示最后 1 分钟的系统平均负载(System load average)
ldavg-5 表示过去 5 分钟的系统平均负载
ldavg-15表示过去 15 分钟的系统平均负载
sar -B 1
内存分页情况,各列含义如下:
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)的百分比
sar -W 1
系统页面swap信息,各列含义如下:
pswpin/s表示每秒系统换入的交换页面(swap page)数量
pswpout/s表示每秒系统换出的交换页面(swap page)数量
sar -r 1
输出内存使用率,单位为kbytes,各列含义如下:
Kbmemfree表示空闲内存,不包括 cache 空间
kbmemused表示使用内存,不包括内核使用空间
%memused是kbmemused 和内存总量(free命令中的total值,不包括 SWAP)的百分比
kbbuffers和kbcached表示内核使用的 buff/cache 空间
kbcommit表示当前系统运行所需的内存,用于评估 RAM+SWAP 总的大小保证程序不会被 OOM
%commit是kbcommit 与内存总量(包括 swap)的一个百分比,该值可能会超过 100%,因为内存允许overcommit
sar -b 1
I/O 和传输速率信息状况,各列含义如下:
tps表示每秒钟物理设备的 I/O 传输总量
rtps 表示每秒钟从物理设备读入的数据总量
wtps表示每秒钟向物理设备写入的数据总量
bread/s表示每秒钟从物理设备读入的数据量,单位为:块/s
bwrtn/s表示每秒钟向物理设备写入的数据量,单位为:块/s
sar -d 1
块设备状况,各列含义如下:
tps表示每秒从物理磁盘 I/O 的次数。多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的。
rd_sec/s表示每秒读扇区的次数
wr_sec/s表示每秒写扇区的次数
avgrq-sz表示平均每次设备 I/O 操作的数据大小(扇区)
avgqu-sz表示磁盘请求队列的平均长度
avgqu-sz的值较低时,设备的利用率较高
await表示从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒)
svctm表示系统处理每次请求的平均时间,不包括在请求队列中消耗的时间
%util表示I/O 请求占 CPU 的百分比,比率越大,说明越饱和
当%util 的值接近 1% 时,表示设备带宽已经占满
sar -f /var/log/sa/sa27 -s 00:00:00 -e 23:00:00 -r
查看非实时数据,27号0点到23点的内存使用情况
sar -r 1 10 -o log.out
将输出保存为文件名为log.out文件
sar -d 1 10 -f log.out
读取文件名为log.out的日志文件
判断系统瓶颈:
1)怀疑CPU存在瓶颈,可用sar -u和sar -q来查看
2)怀疑内存存在瓶颈,可用sar -B、sar -r和sar -W等来查看
3)怀疑I/O存在瓶颈,可用sar -b、sar -u和sar -d等来查看
扩展参数:
-c:输出进程统计信息,每秒创建进程数
-i:指定间隔时长,单位为秒
-p:显示易读性高的设备名称,也可结合-d和-n参数使用,如-dp、-np
-R:输出内存页面的统计信息
-t:读取/var/log/sa/saXX的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间
-v:输出inode、文件和其他内核表的统计信息
-V:输出版本号信息
-w:输出系统交换活动信息
-y:输出TTY设备的活动信息
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL}:分析输出网络设备状态统计信息
DEV:报告网络设备的统计信息
EDEV:报告网络设备的错误统计信息
NFS:报告NFS客户端的活动统计信息
NFSD:报告NFS服务器的活动统计信息
SOCK:报告网络套接字(sockets)的使用统计信息
ALL:报告所有类型的网络活动统计信息
-x {pid|SELF|ALL}:输出指定进程的统计信息
pid:用pid指定特定的进程
SELF:表示sar自身
ALL:表示所有进程
-X {pid|SELF|ALL}:输出指定进程的子进程的统计信息
-l {irq|SUM|ALL|XALL}:输出指定中断的统计信息
irq:指定中断号
SUM:指定输出每秒接收到的中断总数
ALL:指定输出前16个中断
XALL:指定输出全部的中断信息
-P {cpu|ALL}:指定输出CPU的统计信息