概述
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一。
可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
格式:sar [options] [-A] [-o file] t [n]
追溯过去的统计数据
默认情况下,sar从最近的0点0分开始显示数据;如果想继续查看一天前的报告;可以查看保存在/var/log/sysstat/下的sa日志; 使用sar工具查看:
sar -f /var/log/sysstat/sa20191217
- n为采样次数,是可选的,默认值是1
- t为采样间隔,是必须有的参数
- -o file表示将命令结果以二进制格式存放在文件中
常用命令
下面列出一些常用命令,可以修改1
为相应的采样时间间隔或次数,如果值不稳定可以增加采样次数和间隔。如果没有指定采样次数,会不断将采样的结果打印。
sar 1
// CPU和IOWAIT统计状态sar -b 1
// IO传送速率sar -B 1
// 页交换速率sar -C 1
// 进程创建的速率sar -d 1
// 块设备的活跃信息sar -n DEV 1
// 网路设备的状态信息sar -n DEV 5 5
// 五秒五次查看设备状态sar -n SOCK 1
// SOCK的使用情况sar -n ALL 1
// 所有的网络状态信息sar -P ALL 1
// 每颗CPU的使用状态信息和IOWAIT统计状态sar -q 1
// 队列的长度(等待运行的进程数)和负载的状态sar -r 1
// 内存和swap空间使用情况sar -u 1
// CPU的使用情况和IOWAIT信息(同默认监控)sar -v 1
// inode, file and other kernel tablesd的状态信息sar -w 1
// 每秒上下文交换的数目sar -W 1
// SWAP交换的统计信息(监控状态同iostat 的si so)sar -y 1
// TTY设备的活动状态
sar -u 1 0 -e 16:00:00 > data.txt
: 每隔1秒记录CPU的使用情况,直到15点,数据将保存到data.txt文件中
统计各种指标
- 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
- 怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
- 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
命令详解(按照选项字母升序排序),可能部分选项某些系统不支持。
-A
: 报告所有性能指标-b
: 报告IO传送速率- tps: 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
- rtps: 每秒的读请求数
- wtps: 每秒的写请求数
- bread/s: 每秒读磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)
- bwrtn/s: 每秒写磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)
- 一般情况下tps=(rtps+wtps)
B
: 报告页交换速率- 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)的百分比
-c
:报告系统调用情况-d
: 报告磁盘的使用情况- tps: 每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的
- rd_sec/s: 每秒读扇区的次数.
- wr_sec/s: 每秒写扇区的次数.
- avgrq-sz: 平均每次设备I/O操作的数据大小(扇区).
- avgqu-sz: 磁盘请求队列的平均长度.
- await: 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
- svctm: 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
- %util: I/O请求占CPU的百分比,比率越大,说明越饱
-g
: 报告串口的使用情况-r
: 报告内存使用状况kbmemfree
:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.kbmemused
:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.%memused
:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.kbbuffers
和kbcached
:这两个值就是free命令中的buffer和cache.kbcommit
:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).%commit
:这个值是kbcommit与内存总量(包括swap)的一个百分比.
-q
: 报告队列的长度(等待运行的进程数)和负载的状态
runq-sz
:处于运行或就绪的进程数量
plist-sz
:现在进程的总数(包括线程).
ldavg-1
:最近一分钟的负载.
ldavg-5
:最近五分钟的负载.
ldavg-15
:最近十分钟的负载.-R
: 报告进程的活动情况-n
: 报告网络使用情况- 常用选项
- DEV显示网络接口信 息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息
- FULL显示所有三个开关。它们可以单独或者一起使用
- 各列的含义
- IFACE LAN接口
- rxpck/s 每秒钟接收的数据包
- txpck/s 每秒钟发送的数据包
- rxbyt/s 每秒钟接收的字节数
- txbyt/s 每秒钟发送的字节数
- rxcmp/s 每秒钟接收的压缩数据包
- txcmp/s 每秒钟发送的压缩数据包
- rxmcst/s 每秒钟接收的多播数据包
- 选项列表
- DEV Network interfaces
- EDEV Network interfaces (errors)
- NFS NFS client
- NFSD NFS server
- SOCK Sockets (v4)
- IP IP traffic (v4)
- EIP IP traffic (v4) (errors)
- ICMP ICMP traffic (v4)
- EICMP ICMP traffic (v4) (errors)
- TCP TCP traffic (v4)
- ETCP TCP traffic (v4) (errors)
- UDP UDP traffic (v4)
- SOCK6 Sockets (v6)
- IP6 IP traffic (v6)
- EIP6 IP traffic (v6) (errors)
- ICMP6 ICMP traffic (v6)
- EICMP6 ICMP traffic (v6) (errors)
- UDP6 UDP traffic (v6)
- FC Fibre channel HBAs
- SOFT Software-based network processing
-u
: 报告CPU使用率
%user
用户模式下消耗的CPU时间的比例;
%nice
通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
%system
系统模式下消耗的CPU时间的比例;
%iowait
CPU等待磁盘I/O导致空闲状态消耗的时间比例;
%steal
利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;
%idle
CPU空闲时间比例;-v
:报告进程、I节点、文件和锁表状态-W
: 报告页面交换发生状况,页面发生交换时,服务器的吞吐量会大幅下降
pswpin/s
:每秒系统换入的交换页面(swap page)数量
pswpout/s
:每秒系统换出的交换页面(swap page)数量
在不使用参数时默认查看CPU性能:
- %user: CPU处在用户模式下的时间百分比。
- %system: CPU处在系统模式下的时间百分比。
- %iowait: CPU等待输入输出完成时间的百分比。
%iowait的值过高,表示硬盘存在I/O瓶颈 - %idle: CPU空闲时间百分比。
%idle值高,表示CPU较空闲
如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量
%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU