https://blog.csdn.net/u013332124/article/details/101075521
一、命令使用介绍
sar命令全称 System Activity Report,它非常全能,可以分析linux系统各个维度的指标。包括:
- 文件的读写情况
- 系统调用的使用情况
- 磁盘I/O
- CPU效率
- 内存使用状况(包括内存页面的置换)
- 进程活动
- IPC有关的活动
- 网卡相关信息
他的命令常用格式如下:
sar [options] [-A] [-o file] t [n]
其中t
为采样间隔,n
为采样次数,默认值是1;-o file
表示将命令结果以二进制格式存放在文件中,file是文件名;options
为命令行选项,sar
常用的选项有以下(主要各个维度的对应参数信息):
-
-A
:所有报告的总和 -
-u
:输出CPU使用情况的统计信息 -
-q
:输出cpu等待队列的长度相关统计信息 -
-v
:输出inode、文件和其他内核表的统计信息 -
-d
:输出每一个块设备的活动信息 -
-r
:输出内存和交换空间的统计信息 -
-b
:显示I/O和传送速率的统计信息 -
-a
:文件读写情况 -
-c
:输出进程统计信息,每秒创建的进程数 -
-R
:输出内存页面的统计信息 -
-y
:终端设备活动情况 -
-w
:输出系统交换活动信息
二、系统各个维度的性能分析
1、CPU相关指标
和CPU相关的指标的参数主要有 -P、-u、-q。
1.1、 -P 或者 -u 输出CPU使用情况的统计信息
其中-u是输出cpu总的相关性能指标,-P可以指定输出某一个cpu的指标(会把cpu一个个列出来)
# 获取cpu的一个总的信息(默认就是-u)
sar 2 2
sar -u 2 2
# 输出更详细一些的报表
sar -u ALL 2 2
# 获取某一个cpu的信息
sar -P 1 2 2
# 获取所有cpu的信息
sar -P ALL 22
输出:
03:47:05 PM CPU %user %nice %system %iowait %steal %idle
03:47:07 PM all 3.88 0.00 0.19 0.06 0.00 95.87
03:47:09 PM all 4.06 0.00 0.22 0.11 0.00 95.61
Average: all 3.97 0.00 0.20 0.09 0.00 95.74
相关指标含义:
-
%user
:CPU处在用户模式下的时间百分比 -
%nice
:CPU处在带NICE值的用户模式下的时间百分比 -
%system
:CPU处在系统模式下的时间百分比 -
%iowait
:CPU等待输入输出完成时间的百分比 -
%steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比 -
%idle
:CPU空闲时间百分比
1.2、 -q 输出CPU队列的相关统计信息
sar -q 2 2
输出:
03:54:30 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
03:54:32 PM 2 2798 1.79 1.43 1.46
03:54:34 PM 2 2797 1.79 1.43 1.46
Average: 2 2798 1.79 1.43 1.46
相关指标含义:
-
runq-sz
:运行队列的长度(等待运行的进程数); -
plist-sz
:进程列表中进程(processes)和线程(threads)的数量,很多线程可能在休眠中 -
ldavg-1
:最后1分钟的系统平均负载; -
ldavg-5
:过去5分钟的系统平均负载; -
ldavg-15
:过去15分钟的系统平均负载;
2、磁盘相关指标(建议用iostat)
我们可以通过-b、-d来输出磁盘的相关指标。通过
2.1、 -b 输出磁盘基本信息
sar -b 2 2
输出:
04:10:11 PM tps rtps wtps bread/s bwrtn/s
04:10:13 PM 101.52 0.00 101.52 0.00 921.83
04:10:15 PM 117.01 0.00 117.01 0.00 1150.52
Average: 109.21 0.00 109.21 0.00 1035.29
相关指标含义:
-
tps
:采样期间I/O的请求数,多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的 -
rtps
:采样期间内的io读请求数 -
wtps
:采样期间内的io写请求数 -
bread/s
:采样期间内的io读的块数 -
bwrtn/s
:采样期间内的io写的块数
2.2、-d 输出磁盘更详细的信息
sar -d 2 2
输出:
04:13:39 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:13:41 PM dev8-144 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-112 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-128 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-64 1.00 0.00 16.00 16.00 0.01 13.00 13.00 1.30
04:13:41 PM dev8-160 1.50 0.00 28.00 18.67 0.02 14.67 8.67 1.30
04:13:41 PM dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:13:41 PM dev8-48 1.00 0.00 12.00 12.00 0.01 12.50 12.50 1.25
04:13:41 PM dev8-0 2.50 0.00 92.00 36.80 0.02 9.20 9.20 2.30
相关指标含义:
-
DEV
:磁盘设备; -
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的百分比,比率越大,说明越饱;
2.3、 小结
sar的磁盘指标和iostat输出的其实基本是一样的。但是iostat可以输出磁盘的名称,我们可以通过df -h找到对应的磁盘是哪个目录。而sar的-b不是以单个磁盘为粒度,-d虽然有输出DEV,但和df -h输出的磁盘名称好像对应不上。因此,个人建议还是iostat比较好用:
https://blog.csdn.net/u013332124/article/details/98352716
3、内存相关指标(-n 参数)
通过 -B、-r、-W 来查看内存的相关指标
3.1、-r 查看内存的使用情况
sar -r 2 2
输出:
05:37:07 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
05:37:09 PM 2717548 46656484 94.50 297688 3473964 70040892 105.88
05:37:11 PM 2717416 46656616 94.50 297692 3473972 70038520 105.88
Average: 2717482 46656550 94.50 297690 3473968 70039706 105.88
相关指标含义:
-
kbmemfree
:这个值和free
命令中的free
值基本一致,所以它不包括buffer
和cache
的空间; -
kbmemused
:这个值和free
命令中的used
值基本一致,所以它包括buffer
和cache
的空间; -
%memused
:这个值是kbmemused
和内存总量(不包括swap)的一个百分比; -
kbbuffers
:这两个值就是free
命令中的buffer
; -
kbcached
:这两个值就是free
命令中的cache
; -
kbcommit
:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap); -
%commit
:这个值是kbcommit
与内存总量(包括swap)的一个百分比;
3.2、-B 查看内存分页的情况
sar -B 2 2
输出:
05:39:43 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
05:39:45 PM 0.00 56.57 4540.91 0.00 1527.27 0.00 0.00 0.00 0.00
05:39:47 PM 0.00 50.25 4522.11 0.00 1455.78 0.00 0.00 0.00 0.00
Average: 0.00 53.40 4531.49 0.00 1491.44 0.00 0.00 0.00 0.00
相关指标含义:
-
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)的百分比;
3.3、-W 查看SWAP交换的统计信息
sar -W 2 2
输出:
05:41:40 PM pswpin/s pswpout/s
05:41:42 PM 0.00 0.00
05:41:44 PM 0.00 0.00
Average: 0.00 0.00
相关指标含义:
-
pswpin/s
:每秒从交换分区到系统的交换页面(swap page)数量 -
pswpout/s
:每秒从系统交换到swap的交换页面(swap page)的数量
4、网络相关指标
使用姿势:
# keyword 表示不同的几个开关。包括: DEV | EDEV | NFS | NFSD | SOCK
# 每个开关输出的信息都不一样
sar -n {keyword} or {ALL}
-
DEV
: 显示网络接口信息 -
EDEV
: 显示关于网络错误的统计数据 - NFS : 显示NFS客户端信息
- NFSD : 显示NFS服务器信息
-
SOCK
: 显示套接字信息
4.1、网络接口相关信息
sar -n DEV 2 2
输出:
05:48:11 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
05:48:13 PM lo 7.50 7.50 0.69 0.69 0.00 0.00 0.00
05:48:13 PM em1 5.00 8.00 0.60 0.94 0.00 0.00 0.00
05:48:13 PM em2 19.00 8.00 2.50 1.44 0.00 0.00 2.00
05:48:13 PM em3 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:48:13 PM em4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:48:13 PM bond0 24.00 16.00 3.09 2.37 0.00 0.00 2.00
相关指标含义:
-
IFACE
:LAN接口网络设备的名称; -
rxpck/s
:每秒钟接收的数据包; -
txpck/s
:每秒钟发送的数据包; -
rxkB/s
:每秒钟接收的字节数; -
txkB/s
:每秒钟发送的字节数; -
rxcmp/s
:每秒钟接收的压缩数据包; -
txcmp/s
:每秒钟发送的压缩数据包; -
rxmcst/s
:每秒钟接收的多播数据包;
4.2、网络错误的统计数据
sar -n EDEV 2 2
输出:
05:49:25 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
05:49:27 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:49:27 PM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:49:27 PM em2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:49:27 PM em3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:49:27 PM em4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:49:27 PM bond0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
相关指标含义:
-
IFACE
:LAN接口网络设备的名称; -
rxerr/s
:每秒钟接收的坏数据包; -
txerr/s
:每秒钟发送的坏数据包; -
coll/s
:每秒冲突数; -
rxdrop/s
:因为缓冲充满,每秒钟丢弃的已接收数据包数; -
txdrop/s
:因为缓冲充满,每秒钟丢弃的已发送数据包数; -
txcarr/s
:发送数据包时,每秒载波错误数; -
rxfram/s
:每秒接收数据包的帧对齐错误数; -
rxfifo/s
:接收的数据包每秒FIFO过速的错误数; -
txfifo/s
:发送的数据包每秒FIFO过速的错误数
4.3、 查看套接字相关信息
sar -n SOCK 2 2
输出:
05:51:14 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
05:51:16 PM 436 277 5 0 0 0
05:51:18 PM 435 276 5 0 0 0
Average: 436 276 5 0 0 0
相关指标含义:
-
totsck
:使用的套接字总数量; -
tcpsck
:使用的TCP套接字数量; -
udpsck
:使用的UDP套接字数量; -
rawsck
:使用的RAW套接字数量; -
ip-frag
:当前的IP分片的数目; -
tcp-tw
:TCP套接字中处于TIME-WAIT状态的连接数量
三、其他
1、关于输出二进制文件和读取sa二进制文件
通过-o参数,可以将性能报告输出到指定的文件中。不过这个文件是二进制的,需要查看具体的信息还是需要通过sar命令来打开解析。
# 输出到指定的文件
sar -o /tmp/sa.test 2 2
# 解析某个sar二进制文件
sar -f /tmp/sa.test
2、关于sysstat包
sar
、sa1
和sa2
命令都是sysstat
包的一部分。它是Linux包含的性能监视工具集合。
-
sar
:显示数据 -
sa1
和sa2
:收集和保存数据用于以后分析。sa2
shell脚本在/var/log/sa
目录中每日写入一个报告。sa1
shell脚本将每日的系统活动信息以二进制数据的形式写入到文件中。
我们可以在/etc/cron.d/
下sysstat
文件中找到sar
默认的cron作业,如下:
# 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
这样我们就可以按照我们的需求,进行输出定制化了。
sar
不止上面说的几个程序:
-
sar
:收集、报告或存储信息(CPU、内存、磁盘、中断、网卡、TTY、内核表等等); -
sadc
:系统数据收集器,给sar
做后台服务; -
sa1
:收记并存储二进制数据到每天的文件;这是设计来给cron执行一个sadc
的前台程序; -
sa2
:生成总结报表; -
sadf
:以多种格式显示数据(CSV, XML, JSON, etc.),还可以用来生成SVG(Scalable Vector Graphics)图表。
参考资料
https://www.jellythink.com/archives/483
https://blog.csdn.net/macky0668/article/details/6839525