提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
监视linux性能手段很多,sar是其中之一。
sar可用于监控Linux系统性能,帮助我们分析性能瓶颈。sar工具的使用方式为”sar [选项] intervar [count]”,其中interval为统计信息采样时间,count为采样次数。
下文将说明如何使用sar获取以下性能分析数据:
整体CPU使用统计
各个CPU使用统计
内存使用情况统计
整体I/O情况
各个I/O设备情况
网络统计
sar -h
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
主选项和报告:
-b I/O 和传输速率信息状况
-B 分页状况
-d 块设备状况
-F [ MOUNT ]
Filesystems statistics
-H 交换空间利用率
-I { <中断> | SUM | ALL | XALL }
中断信息状况
-m { <关键词> [,...] | ALL }
电源管理统计信息
关键字:
CPU CPU 频率
FAN 风扇速度
\t\tFREQ\tCPU 平均时钟频率
IN 输入电压
TEMP 设备温度
\t\tUSB\t连接的USB 设备
-n { <关键词> [,...] | ALL }
网络统计信息
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
-q 队列长度和平均负载
-r 内存利用率
-R 内存状况
-S 交换空间利用率
-u [ ALL ]
CPU 利用率
-v Kernel table 状况
-w 任务创建与系统转换统计信息
-W 交换信息
-y TTY 设备状况
yum install sar
使用-u选项,sar输出整体CPU的使用情况,不加选项时,默认使用的就是-u选项。以下命令显示采样时间为1s,采样次数为2次,整体CPU的使用情况:
[root@localhost ~]# sar -u 1 2
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时05分33秒 CPU %user %nice %system %iowait %steal %idle
09时05分34秒 all 0.13 0.00 1.32 0.00 0.00 98.55
09时05分35秒 all 0.13 0.00 1.20 0.00 0.00 98.68
平均时间: all 0.13 0.00 1.26 0.00 0.00 98.61
[root@localhost ~]#
以上主要的统计项的解析如下:
%user: 用户态下CPU使用时间比率
%system: 内核态下CPU使用时间比率
%iowait: CPU等待I/O占用时间比率
%idle: CPU空闲时间比率
“-P ALL”选项指示对每个内核输出统计信息:
[root@localhost ~]# sar -P ALL 1 1
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时07分39秒 CPU %user %nice %system %iowait %steal %idle
09时07分40秒 all 0.25 0.00 2.35 0.00 0.00 97.40
09时07分40秒 0 0.00 0.00 1.00 0.00 0.00 99.00
09时07分40秒 1 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 2 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 3 0.00 0.00 2.06 0.00 0.00 97.94
09时07分40秒 4 1.00 0.00 4.00 0.00 0.00 95.00
09时07分40秒 5 0.00 0.00 3.19 0.00 0.00 96.81
09时07分40秒 6 1.01 0.00 5.05 0.00 0.00 93.94
09时07分40秒 7 0.00 0.00 6.67 0.00 0.00 93.33
09时07分40秒 8 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 9 1.02 0.00 15.31 0.00 0.00 83.67
09时07分40秒 10 0.00 0.00 1.00 0.00 0.00 99.00
09时07分40秒 11 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 12 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 13 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 14 0.00 0.00 0.00 0.00 0.00 100.00
09时07分40秒 15 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: CPU %user %nice %system %iowait %steal %idle
平均时间: all 0.25 0.00 2.35 0.00 0.00 97.40
平均时间: 0 0.00 0.00 1.00 0.00 0.00 99.00
平均时间: 1 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 2 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 3 0.00 0.00 2.06 0.00 0.00 97.94
平均时间: 4 1.00 0.00 4.00 0.00 0.00 95.00
平均时间: 5 0.00 0.00 3.19 0.00 0.00 96.81
平均时间: 6 1.01 0.00 5.05 0.00 0.00 93.94
平均时间: 7 0.00 0.00 6.67 0.00 0.00 93.33
平均时间: 8 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 9 1.02 0.00 15.31 0.00 0.00 83.67
平均时间: 10 0.00 0.00 1.00 0.00 0.00 99.00
平均时间: 11 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 12 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 13 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 14 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: 15 0.00 0.00 0.00 0.00 0.00 100.00
其中”CPU”列输出0,1,2,3指示对应的cpu核。也可针对单独一个内核显示,“-P 1”指示显示第二个内核的统计信息。
使用-r选项可显示内存统计信息,以下命令显示以1秒为采样时间,显示2次内存信息:
[root@localhost ~]# sar -r 1 2
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时09分35秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
09时09分36秒 175148 16072592 98.92 0 935160 332972 1.76 100184 858640 19264
09时09分37秒 173552 16074188 98.93 0 938888 332972 1.76 100184 861844 19264
平均时间: 174350 16073390 98.93 0 937024 332972 1.76 100184 860242 19264
上面输出的内存单位为”kb”,各项的名称可自解析其含义。
使用-b选项,可以显示磁盘I/O的使用情况:
[root@localhost ~]# sar -b 1 2
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时10分47秒 tps rtps wtps bread/s bwrtn/s
09时10分48秒 206.00 206.00 0.00 206136.00 0.00
09时10分49秒 223.00 223.00 0.00 228352.00 0.00
平均时间: 214.50 214.50 0.00 217244.00 0.00
以上各列的含义为:
tps: 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
rtps: 每秒向磁盘设备的读请求次数
wtps: 每秒向磁盘设备的写请求次数
bread: 每秒从磁盘读的bytes数量
bwrtn: 每秒向磁盘写的bytes数量
使用-d选项可以显示各个磁盘的统计信息,再增加-p选项可以以sdX的形式显示设备名称:
[root@localhost ~]# sar -d -p 1 1
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时11分35秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
09时11分36秒 sda 28.00 17928.00 0.00 640.29 0.18 7.61 0.79 2.20
09时11分36秒 centos-root 16.00 16384.00 0.00 1024.00 0.17 13.19 1.38 2.20
09时11分36秒 centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09时11分36秒 centos-home 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
平均时间: sda 28.00 17928.00 0.00 640.29 0.18 7.61 0.79 2.20
平均时间: centos-root 16.00 16384.00 0.00 1024.00 0.17 13.19 1.38 2.20
平均时间: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: centos-home 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
以上输出中DEV列以sdX的方式显示了设备名称。
使用-n选项可以对网络使用情况进行显示,-n后接关键词”DEV”可显示eth0、eth1等网卡的信息:
[root@localhost ~]# sar -n DEV 1 1
Linux 3.10.0-1127.el7.x86_64 (localhost.localdomain) 2023年09月28日 _x86_64_ (16 CPU)
09时13分33秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
09时13分34秒 enp0s10f0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09时13分34秒 eth0 139304.00 6997.00 200148.54 245070.84 0.00 0.00 0.00
09时13分34秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均时间: enp0s10f0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: eth0 139304.00 6997.00 200148.54 245070.84 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
以上主要输出含义如下:
IFACE: 网络接口名称
rxpck/s: 每秒收包的数量
txpck/s: 每秒发包的数量
rxkB/s: 每秒收的数据量(kB为单位)
txkB/s: 每秒发的数据量(kB为单位)
最后讲一下如何保存sar日志,使用-o选项,我们可以把sar统计信息保存到一个指定的文件,对于保存的日志,我们可以使用-f选项读取:
linux:~ # sar -n DEV 1 10 -o sar.out
linux:~ # sar -d 1 10 -f sar.out