最近有个需求要比较数据入库程序在x86架构和arm架构的性能,分别部署后发现两者的入库速度有较大差异,但是又不知道为什么。之前入库程序调优时,都只是基于各组件参数的调优,因为没有去观察机器的负载情况,并不知道程序性能的真正瓶颈在哪里。要发现差异、找出程序性能瓶颈,必须去观察程序部署机器的实时负载,于是发现了sar这个神器,特此记录。
sar命令可以从多方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
执行sar命令后,会按照指定时间间隔、指定次数进行采样,输出每个时间点的采样情况,最后会输出采样时间内的各指标平均值。
~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
options是各种选项
interval是取样的时间间隔
count是输出次数。若不指定默认是1
以下是执行sar -u 1 10的结果。-u表示输出cpu相关信息,1表示取样时间间隔为1秒,10表示输出10次
[root@server1 ~]# sar -u 1 10
Linux 3.10.0-1160.31.1.el7.x86_64 (server1) 06/10/2022 _x86_64_ (32 CPU)
04:24:29 PM CPU %user %nice %system %iowait %steal %idle
04:24:30 PM all 11.85 0.00 2.55 3.66 0.00 81.94
04:24:31 PM all 2.90 0.00 2.77 0.66 0.00 93.66
04:24:32 PM all 2.74 0.00 2.83 0.72 0.00 93.70
04:24:33 PM all 3.94 0.00 3.72 0.16 0.00 92.17
04:24:34 PM all 2.52 0.00 2.61 1.04 0.00 93.83
04:24:35 PM all 3.06 0.00 3.18 0.06 0.00 93.70
04:24:36 PM all 3.03 0.00 3.15 1.76 0.00 92.06
04:24:37 PM all 3.09 0.00 2.68 0.44 0.00 93.79
04:24:38 PM all 2.55 0.00 2.05 3.56 0.00 91.83
04:24:39 PM all 2.36 0.00 2.68 0.13 0.00 94.83
Average: all 3.80 0.00 2.82 1.22 0.00 92.15
选项 | 功能 |
---|---|
-A | 显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 |
-u | 显示系统所有CPU 在采样时间内的负载状态。 |
-P | 显示当前系统中指定 CPU 的使用情况。 |
-d | 显示系统所有硬盘设备在采样时间内的使用状态。 |
-r | 显示系统内存在采样时间内的使用情况。 |
-b | 显示I/O和传送速率的统计信息 |
-v | 显示 inode 节点、文件和其他内核表的统计信息。 |
-n | 显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等,有关更多的选项,可通过执行 man sar 命令查看。 |
-q | 显示运行列表中的进程数、进程大小、系统平均负载等。 |
-R | 显示进程在采样时的活动情况。 |
-y | 显示终端设备在采样时间的活动情况。 |
-w | 显示系统交换活动在采样时间内的状态。 |
# sar -u 1 5
04:34:32 PM CPU %user %nice %system %iowait %steal %idle
04:34:33 PM all 8.00 0.00 2.17 5.16 0.00 84.67
04:34:34 PM all 7.58 0.00 4.59 4.91 0.00 82.92
04:34:35 PM all 7.53 0.00 3.66 4.19 0.00 84.62
04:34:36 PM all 4.47 0.00 3.15 0.98 0.00 91.41
04:34:37 PM all 2.90 0.00 2.36 3.87 0.00 90.87
Average: all 6.09 0.00 3.19 3.82 0.00 86.90
输出项说明:
字段 | 说明 |
---|---|
CPU | all 表示统计信息为所有 CPU 的平均值。 |
%user | 显示在用户级别(application)运行使用 CPU 总时间的百分比。 |
%nice | 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 |
%system | 在核心级别(kernel)运行所使用 CPU 总时间的百分比。 |
%iowait | 显示用于等待I/O操作占用 CPU 总时间的百分比。 |
%steal | 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
%idle | 显示 CPU 空闲时间占用 CPU 总时间的百分比。 |
# sar -v 1 3
04:39:58 PM dentunusd file-nr inode-nr pty-nr
04:39:59 PM 166734 23936 118926 17
04:40:00 PM 166734 24000 118927 17
04:40:01 PM 166799 24128 119038 17
Average: 166756 24021 118964 17
输出项说明:
字段 | 说明 |
---|---|
dentunusd | 目录高速缓存中未被使用的条目数量 |
file-nr | 文件句柄(file handle)的使用数量 |
inode-nr | 索引节点句柄(inode handle)的使用数量 |
pty-nr | 使用的pty数量 |
# sar -r 1 3
04:41:37 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
04:41:38 PM 15315012 116447300 88.38 0 12046964 187005300 141.93 104811652 5980352 0
04:41:39 PM 15311820 116450492 88.38 0 12052116 187005680 141.93 104809624 5985212 0
04:41:40 PM 15328736 116433576 88.37 0 12052664 187009416 141.93 104791752 5985988 468
Average: 15318523 116443789 88.37 0 12050581 187006799 141.93 104804343 5983851 156
输出项说明:
字段 | 说明 |
---|---|
kbmemfree | 这个值和free命令中的free值基本一致 |
kbmemused | 这个值和free命令中的used值基本一致 |
%memused | 这个值是kbmemused和内存总量的百分比 |
kbbuffers和kbcached | 这两个值就是free命令中的buffer和cache |
kbcommit | 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap) |
%commit | 这个值是kbcommit与内存总量(包括swap)的一个百分比 |
# sar -n DEV 1 3
04:53:17 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:53:18 PM eth1 67674.00 15401.00 82210.17 201317.99 0.00 0.00 0.00
04:53:18 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:53:18 PM lo 5.00 5.00 4.04 4.04 0.00 0.00 0.00
04:53:18 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:53:19 PM eth1 70277.00 16155.00 85445.74 205951.76 0.00 0.00 0.00
04:53:19 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:53:19 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:53:19 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:53:20 PM eth1 71497.00 16398.00 87244.72 207286.21 0.00 0.00 0.00
04:53:20 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:53:20 PM lo 5.00 5.00 3.44 3.44 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: eth1 69816.00 15984.67 84966.88 204851.99 0.00 0.00 0.00
Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: lo 3.33 3.33 2.49 2.49 0.00 0.00 0.00
输出项说明:
字段 | 说明 |
---|---|
IFACE | 网络设备名 |
rxpck/s | 每秒接收的包总数 |
txpck/s | 每秒传输的包总数 |
rxbyt/s | 每秒接收的字节(byte)总数 |
txbyt/s | 每秒传输的字节(byte)总数 |
rxcmp/s | 每秒接收压缩包的总数 |
txcmp/s | 每秒传输压缩包的总数 |
rxmcst/s | 每秒接收的多播(multicast)包的总数 |
# sar -b 1 3
04:47:49 PM tps rtps wtps bread/s bwrtn/s
04:47:50 PM 1.00 0.00 1.00 0.00 8.00
04:47:51 PM 0.00 0.00 0.00 0.00 0.00
04:47:52 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.33 0.00 0.33 0.00 2.66
输出项说明:
字段 | 说明 |
---|---|
tps | 每秒钟物理设备的 I/O 传输总量 |
rtps | 每秒钟从物理设备读入的数据总量 |
wtps | 每秒钟向物理设备写入的数据总量 |
bread/s | 每秒钟从物理设备读入的数据量,单位为 块/s |
bwrtn/s | 每秒钟向物理设备写入的数据量,单位为 块/s |
# -o cpu.stat指将结果写入cpu.stat中
sar -u 1 3 -o cpu.stat
# 写出的是二进制文件,不能直接查看,通过以下命令查看
sar -u -f cpu.stat
sar -r 1 10
sar -b 1 180
sar -n DEV 1 300
sar命令使用 https://www.cnblogs.com/bandaoyu/p/15573653.html
Linux sar 查看网卡流量 网络io https://www.likecs.com/show-205185561.html