sar
(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等。我们可以使用sar
命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。
Linux 内核维护着一些内部计数器,这些计数器包含了所有的请求及其完成时间和 I/O 块数等信息,sar
命令从所有的这些信息中计算出请求的利用率和比例,以便找出瓶颈所在。
性能问题排查技巧:
sar -u
和sar -q
等来查看sar -B
、sar -r
和sar -W
等来查看sar -b
、sar -u
和sar -d
等来查看sar
命令来自于sysstat
工具包,如果提示sar
命令不存在,需先安装sysstat
。
语法:sar (选项) (参数)
选项:
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态。
参数:
间隔时间:每次报告的间隔时间(秒)
次数:显示报告的次数
例:察看内存和交换空间的使用率:sar -r
[logdev@idc1 ~]$ sar -r
Linux 2.6.32-504.el6.x86_64 (idc1) 08/10/2021 _x86_64_ (8 CPU)
12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
12:10:01 AM 210616 7848288 97.39 212464 4734488 2930956 28.86
12:20:02 AM 227608 7831296 97.18 212472 4718892 2932360 28.87
12:30:01 AM 141564 7917340 98.24 212472 4804940 2933000 28.88
12:40:01 AM 156448 7902456 98.06 212476 4789716 2930712 28.86
说明:
kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)
kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。
网络统计信息
sar -n <关键词> [ <时间间隔> [ <次数> ] ]
例:命令中 1 5 表示每一秒钟取 1 次值,一共取 5 次:sar -n DEV 1 5
[logdev@.idc1 ~]$ sar -n DEV 1 5
Linux 2.6.32-504.el6.x86_64 (idc1) 08/10/2021 _x86_64_ (8 CPU)
06:16:04 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:16:05 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:16:05 PM eth0 236.63 161.39 74.14 68.53 0.00 0.00 0.00
06:16:05 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:16:06 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:16:06 PM eth0 198.00 134.00 59.61 68.61 0.00 0.00 0.00
06:16:06 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:16:07 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:16:07 PM eth0 174.00 109.00 62.63 58.79 0.00 0.00 0.00
06:16:07 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:16:08 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:16:08 PM eth0 294.00 267.00 65.01 64.36 0.00 0.00 0.00
06:16:08 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06:16:09 PM lo 2.02 2.02 0.10 0.10 0.00 0.00 0.00
06:16:09 PM eth0 457.58 395.96 269.14 265.13 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.40 0.40 0.02 0.02 0.00 0.00 0.00
Average: eth0 271.60 213.00 105.72 104.69 0.00 0.00 0.00
备注:命令执行后会列出每个网卡这 5 次取值的平均数据,根据实际情况来确定带宽跑满的网卡名称,默认情况下 eth0 为内网网卡,eth1 为外网网卡。
CPU 利用率
sar -u [ <时间间隔> [ <次数> ] ]
例:命令中 1 3 表示每一秒钟取 1 次值,一共取 3 次
[logdev@idc1 ~]$ sar -u 1 3
Linux 2.6.32-504.el6.x86_64 (idc1) 08/10/2021 _x86_64_ (8 CPU)
06:21:33 PM CPU %user %nice %system %iowait %steal %idle
06:21:34 PM all 0.62 0.00 0.38 0.00 0.12 98.88
06:21:35 PM all 1.87 0.00 1.25 0.00 0.25 96.63
06:21:36 PM all 0.38 0.00 0.63 0.00 0.13 98.87
Average: all 0.96 0.00 0.75 0.00 0.17 98.12
输出项说明:
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比
1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
索引节点,文件和其他内核表的状态
sar -v [ <时间间隔> [ <次数> ] ]
例:sar -v 1 3
输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的 pty 数量
内存利用率
sar -r [ <时间间隔> [ <次数> ] ]
例:sar -r 1 3
输出项说明:
kbmemfree:这个值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空间
kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空间
%memused:这个值是 kbmemused 和内存总量(不包括 swap)的一个百分比
kbbuffers 和 kbcached:这两个值就是 free 命令中的 buffer 和 cache
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap)
%commit:这个值是 kbcommit 与内存总量(包括 swap)的一个百分比
内存分页状况
sar -B [ <时间间隔> [ <次数> ] ]
例:sar -B 1 3
输出项说明:
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)的百分比
I/O 和传输速率信息状况
sar -b [ <时间间隔> [ <次数> ] ]
例:sar -b 1 3
输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为:块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为:块/s
队列长度和平均负载
sar -q [ <时间间隔> [ <次数> ] ]
例:sar -q 1 3
输出项说明:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
系统交换信息
sar -W [ <时间间隔> [ <次数> ] ]
例:sar -W 1 3
输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
块设备状况
sar -d [ <时间间隔> [ <次数> ] ]
例:sar -d 1 3
输出项说明:
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的百分比,比率越大,说明越饱和
1. avgqu-sz 的值较低时,设备的利用率较高
2. 当%util的值接近 1% 时,表示设备带宽已经占满
输出统计的数据信息
sar -o path_file [选项] [ <时间间隔> [ <次数> ] ]
例:将sar -u 1 3
采集到的数据以二进制的格式存放到文件sarfile.log
中
我们还可以通过命令sadf -d sarfile.log
将二进制数据文件转换成数据库可读的格式。
sadf -d sarfile.log
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
upfor163;1;2018-04-25 03:15:02 UTC;-1;0.00;0.00;0.50;0.50;0.00;99.00
upfor163;1;2018-04-25 03:15:03 UTC;-1;1.01;0.00;0.00;0.00;0.00;98.99
upfor163;1;2018-04-25 03:15:04 UTC;-1;0.00;0.00;0.00;0.00;0.00;100.00
也可以将这些数据存储在一个 csv 文档中,然后绘制成图表展示方式,如下所示:
sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv
从数据文件读取信息
sar -f <文件路径>
例:sar -f sarfile.log
又将之前存储在二进制文件中的数据给读取并展示出来。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。