sysstat
包
iostat、sar
、sa1
和sa2
命令都是sysstat
包的一部分。它是Linux包含的性能监视工具集合;
-
sar
:收集、报告或存储信息(CPU、内存、磁盘、中断、网卡、TTY、内核表等等); -
sa1:收记并存储二进制数据到每天的文件;这是设计来给cron执行一个
sadc
的前台程序;
- sa2:生成总结报表;
- sadf:以多种格式显示数据(CSV, XML, JSON, etc.),还可以用来生成SVG(Scalable Vector Graphics)图表。
- sadc:系统数据收集器,给
sar
做后台服务; -
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命令
收集,报告或保存系统活动信息;如:查看CPU使用状况、内存使用状况、网卡使用状况
语法
sar [options] [-A] [-o file] t [n]
其中t
为采样间隔,n
为采样次数,默认值是1;-o file
表示将命令结果以二进制格式存放在文件中,file是文件名;options
为命令行选项,sar
常用的选项有以下:
选项
-A:所有报告的总和 -u:输出CPU使用情况的统计信息 -v:输出inode、文件和其他内核表的统计信息 -d:输出每一个块设备的活动信息 -r:输出内存和交换空间的统计信息 -b:显示I/O和传送速率的统计信息 -a:文件读写情况 -c:输出进程统计信息,每秒创建的进程数 -R:输出内存页面的统计信息 -y:终端设备活动情况 -w:输出系统交换活动信息
实例
每2秒采样一次,连续采样3次,查看CPU的整体使用情况
sh-4.2# sar 2 3 Linux 3.10.0-693.2.2.el7.x86_64 (jellythink) 03/09/2019 _x86_64_ (1 CPU) 10:05:46 PM CPU %user %nice %system %iowait %steal %idle 10:05:48 PM all 0.50 0.00 0.50 0.00 0.00 98.99 10:05:50 PM all 1.00 0.00 0.50 0.00 0.00 98.50 10:05:52 PM all 0.50 0.00 0.50 0.00 0.00 98.99 Average: all 0.60 0.00 0.40 0.00 0.00 99.00
内容讲解
-
%user
:CPU处在用户模式下的时间百分比;之前总结的好多命令都有讲,比如iostat
和pidstat
都有讲; -
%nice
:CPU处在带NICE值的用户模式下的时间百分比; -
%system
:CPU处在系统模式下的时间百分比; -
%iowait
:CPU等待输入输出完成时间的百分比; -
%steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比; -
%idle
:CPU空闲时间百分比;
在所有的显示中,我们应主要注意%iowait
和%idle
, %iowait
的值过高,表示硬盘存在I/O瓶颈,%idle
值高,表示CPU较空闲,如果%idle
值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle
值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
每2秒采样一次,连续采样3次,查看CPU每个核心的使用情况
sh-4.2# sar -P ALL 2 3 10:37:48 PM CPU %user %nice %system %iowait %steal %idle 10:37:50 PM all 0.50 0.00 0.00 0.00 0.00 99.50 10:37:50 PM 0 0.50 0.00 0.00 0.00 0.00 99.50 10:37:50 PM CPU %user %nice %system %iowait %steal %idle 10:37:52 PM all 1.00 0.00 0.50 0.00 0.00 98.50 10:37:52 PM 0 1.00 0.00 0.50 0.00 0.00 98.50 10:37:52 PM CPU %user %nice %system %iowait %steal %idle 10:37:54 PM all 0.51 0.00 0.00 0.00 0.00 99.49 10:37:54 PM 0 0.51 0.00 0.00 0.00 0.00 99.49
每2秒采样一次,连续采样3次,查看内存的使用情况
sh-4.2# sar -r 2 3 10:45:12 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 10:45:14 PM 427592 1455904 77.30 54876 132064 2004276 32.98 790672 558092 32 10:45:16 PM 427592 1455904 77.30 54880 132064 2004276 32.98 790676 558092 32 10:45:18 PM 427592 1455904 77.30 54880 132064 2004276 32.98 790676 558096 44 Average: 427592 1455904 77.30 54879 132064 2004276 32.98 790675 558093 36
内容详解:
- 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)的一个百分比;
- kbactive:活动内存量(以千字节计算)(最近使用的内存,通常不会被收回,除非绝对必要);
- kbinact:不活动内存量(以千字节计算的内存(最近使用的内存),更有资格被用于其他目的);
- kbdirty:以KB为单位的内存量等待写入磁盘;
每2秒采样一次,连续采样3次,查看内存分页的使用情况
sh-4.2# sar -B 2 3 11:06:26 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 11:06:28 PM 0.00 8.00 35.00 0.00 11.50 0.00 0.00 0.00 0.00 11:06:30 PM 0.00 0.00 15.00 0.00 11.50 0.00 0.00 0.00 0.00 11:06:32 PM 0.00 0.00 49.49 0.00 1102.02 0.00 0.00 0.00 0.00 Average: 0.00 2.68 33.11 0.00 372.58 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)的百分比;
每2秒采样一次,连续采样3次,查看块设备使用情况
sh-4.2# sar -d -p 2 3 10:00:48 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:00:50 PM vda 1.01 0.00 20.10 20.00 0.00 1.50 1.50 0.15 10:00:50 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:00:52 PM vda 5.53 0.00 112.56 20.36 0.01 1.27 0.82 0.45 10:00:52 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 10:00:54 PM vda 42.00 0.00 2312.00 55.05 0.19 4.62 0.27 1.15 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: vda 16.22 0.00 817.39 50.39 0.07 4.18 0.36 0.59
内容详解:
-
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的百分比,比率越大,说明越饱;
PS:-n
选项使用6个不同的开关:DEV | EDEV | NFS | NFSD | SOCK | ALL
。
-
DEV
显示网络接口信息 -
EDEV
显示关于网络错误的统计数据 -
NFS
统计活动的NFS客户端的信息 -
NFSD
统计NFS服务器的信息 -
SOCK
显示套接字信息 -
ALL
显示所有5个开关。它们可以单独或者一起使用。
检测网络接口流量
sh-4.2# sar -n DEV 2 3 10:23:07 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10:23:09 PM eth0 5.50 4.50 0.41 3.56 0.00 0.00 0.00 10:23:09 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:23:09 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10:23:11 PM eth0 0.51 0.51 0.03 0.03 0.00 0.00 0.00 10:23:11 PM lo 1.52 1.52 0.09 0.09 0.00 0.00 0.00 10:23:11 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10:23:13 PM eth0 5.50 6.00 3.09 0.94 0.00 0.00 0.00 10:23:13 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: eth0 3.85 3.68 1.18 1.51 0.00 0.00 0.00 Average: lo 0.50 0.50 0.03 0.03 0.00 0.00 0.00
内容详解:
-
IFACE
:LAN接口网络设备的名称; -
rxpck/s
:每秒钟接收的数据包; -
txpck/s
:每秒钟发送的数据包; -
rxkB/s
:每秒钟接收的字节数; -
txkB/s
:每秒钟发送的字节数; -
rxcmp/s
:每秒钟接收的压缩数据包; -
txcmp/s
:每秒钟发送的压缩数据包; -
rxmcst/s
:每秒钟接收的多播数据包;
检测网络错误流量
sh-4.2# sar -n EDEV 2 3 10:26:12 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 10:26:14 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:14 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:14 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 10:26:16 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:16 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:16 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 10:26:18 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:18 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: lo 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过速的错误数
检测套接字流量
sh-4.2# sar -n SOCK 2 3 10:29:34 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw 10:29:36 PM 142 10 3 0 0 6 10:29:38 PM 142 10 3 0 0 7 10:29:40 PM 142 10 3 0 0 7 Average: 142 10 3 0 0 7
内容详解:
-
totsck
:使用的套接字总数量; -
tcpsck
:使用的TCP套接字数量; -
udpsck
:使用的UDP套接字数量; -
rawsck
:使用的RAW套接字数量; -
ip-frag
:当前的IP分片的数目; -
tcp-tw
:TCP套接字中处于TIME-WAIT状态的连接数量
查看日志文件内容
sh-4.2# sar -r -f /var/log/sa/sa04 Linux 3.10.0-693.el7.x86_64 (kvm-1) 12/04/2019 _x86_64_ (24 CPU) 06:20:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 06:30:01 PM 32119920 755640 2.30 2092 285720 454812 0.45 236388 98280 0 06:40:01 PM 32119944 755616 2.30 2092 285760 454936 0.46 236572 98232 4 Average: 32119932 755628 2.30 2092 285740 454874 0.45 236480 98256 2
前面已经说了sar
的日志文件是保存在/var/log/sa/saDD
里的。我们可以使用-f选项可以查看二进制日志文件;-r
表示读取内存日志信息。
查看进程队列长度和平均负载状态
sh-4.2# sar -q 2 3 10:41:02 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:41:04 PM 0 195 0.02 0.03 0.05 0 10:41:06 PM 0 195 0.02 0.03 0.05 0 10:41:08 PM 0 195 0.02 0.03 0.05 0 Average: 0 195 0.02 0.03 0.05 0
内容详解:
-
runq-sz
:运行队列的长度(等待运行的进程数); -
plist-sz
:进程列表中进程(processes)和线程(threads)的数量; -
ldavg-1
:最后1分钟的系统平均负载; -
ldavg-5
:过去5分钟的系统平均负载; -
ldavg-15
:过去15分钟的系统平均负载; -
blocked
:当前阻塞的进程数量,在等待IO完成;
查看系统SWAP交换的统计信息(监控状态同vmstat
的si
和so
)
sh-4.2# sar -W 2 3 11:13:28 PM pswpin/s pswpout/s 11:13:30 PM 0.00 0.00 11:13:32 PM 0.00 0.00 11:13:34 PM 0.00 0.00 Average: 0.00 0.00
内容详解:
-
pswpin/s
:每秒从交换分区到系统的交换页面(swap page)数量 -
pswpout/s
:每秒从系统交换到swap的交换页面(swap page)的数量
性能分析小技巧
- 技巧一:要判断系统瓶颈问题,有时需几个sar命令选项结合起来:
- 怀疑CPU存在瓶颈,可用sar -u和sar -q等来查看;
- 怀疑内存存在瓶颈,可用sar -B、sar -r和sar -W等来查看;
- 怀疑I/O存在瓶颈,可用sar -b、sar -u和sar -d等来查看;
- 技巧二:巧用sadf命令,转换成各种可读形式高的文件格式,进行线下分析。sar -o会将输出保存为二进制文件,我们可以通过sadf -d将二进制文件进行转换。
- 技巧三:如果你觉的上述通过sadf命令进行转换比较麻烦,也好,还有开源的ksar工具,可以直接加载sar生成的日志文件,通过GUI显示,更直观,更便捷。
https://www.jellythink.com/archives/483
https://www.jianshu.com/p/b9e942f3682c