暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

sar工具的使用

原创 赖顺欠 2023-08-02
530

sar ( system activity reporter ,系统活动情况报告)命令是系统维护的重要工具,主要用于帮助我们掌握系统资源的使用情况,可以从多方面对系统的活动进行报告,报告内容包括:文件的读写情况、系统调用的使用情况、磁盘 I/O 、 CPU 效率、内存使用状况、进程活动及与 IPC 有关的活动等。

sar 通过 cron 定时调用执行以收集和记录信息,默认情况下, Linux 每 10 分钟运行一次 sar 命令来收集信息,如果你认为时间跨度太长,不容易发现性能问题,你也可以更改调度任务的间隔,修改 /etc/cron.d/sysstat 即可。

[root@lsqdb ~]# cat /etc/cron.d/sysstat # 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
复制

然后重启 crond 生效。

/etc/init.d/crond restart
复制

sar 命令的常用格式如下。

sar [ options... ] [ <interval> [ <count> ] ]
复制

sar 如果不加参数,则默认是读取历史统计信息,你可以指定 interval 和 count 对当前的系统活动进行统计。其中参数的具体说明如下。

interval 为采样间隔, count 为采样次数,默认值是 1 。

options 为命令行选项, sar 命令常用的选项分别如下:

·-A :所有报告的总和。 ·-u :输出 CPU 使用情况的统计信息。 ·-v :输出 inode 、文件和其他内核表的统计信息。 ·-d :输出每一个块设备的活动信息,一般添加选项 -p 以显示易读的设备名。 ·-r :输出内存和交换空间的统计信息。 ·-b :显示 I/O 和传送速率的统计信息。 ·-c :输出进程的统计信息,每秒创建的进程数。 ·-R :输出内存页面的统计信息。 ·-y :终端设备的活动情况。 ·-w :输出系统交换活动的信息,即每秒上下文切换次数。
复制

常用命令:

sar -B 2 10 --监控内存,知道mem的繁忙程度 sar -b 2 10 --监控I/O,知道I/O的繁忙程度 sar -n DEV 1 --监控网络,知道network的繁忙程度 sar -q 2 10 --监控队列,知道cpu的繁忙程度 sar -d 10 3 --监控磁盘,知道disk的繁忙程度
复制

如下是一些 sar 使用的例子。

(1)CPU 资源监控

例如,每 10s 采样一次,连续采样 3 次,观察 CPU 的使用情况,并将采样结果以二进制的形式存入当前目录下的文件 test 中,需要键入如下命令:

sar -u -o test 10 3
复制
[oracle@lsqdb ~]$ sar -u -o test 10 3 Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 10:52:11 AM CPU %user %nice %system %iowait %steal %idle 10:52:21 AM all 0.05 0.00 0.05 0.05 0.00 99.85 10:52:31 AM all 0.15 0.00 0.05 0.00 0.00 99.80 10:52:41 AM all 0.10 0.00 0.00 0.00 0.00 99.90 Average: all 0.10 0.00 0.03 0.02 0.00 99.85
复制

输出项说明如下:

·CPU : all 表示统计信息为所有 CPU 的平均值。我们可以使用 sar-P n 查看某颗 CPU 。 ·%user :显示在用户级别运行和使用 CPU 总时间的百分比。 ·%nice :显示在用户级别,用于 nice 操作,所占用 CPU 总时间的百分比。 ·%system :在核心级别( kernel )运行所占用 CPU 总时间的百分比。 ·%iowait :显示用于等待 I/O 操作所占用 CPU 总时间的百分比。 ·%idle :显示 CPU 空闲时间所占用 CPU 总时间的百分比。
复制

问题分析:

1 )若 %iowait 的值过高,则表示硬盘存在 I/O 瓶颈。 2 )若 %idle 的值很高但系统响应很慢时,有可能是 CPU 正在等待分配内存,此时应加大内存容量。 3 )若 %idle 的值持续低于 10 ,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。
复制

(2)查看网络的统计

语法是 sar -n KEYWORD 。

KEYWORD 常用的值及说明具体如下。

·DEV :显示网络设备统计,如 eth0 、 eth1 等。
·EDEV :显示为网络设备错误统计。
·NFS :显示 NFS 客户端活动统计。
·ALL :显示所有统计信息。
复制

如下命令可查看网络设备的吞吐,数据每秒更新一次,总共更新 5 次。

sar -n DEV 1 5
复制
[root@lsqdb ~]# sar -n DEV 1 5 Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 03:27:19 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 03:27:20 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:27:20 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:27:20 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 03:27:21 PM eth1 1.04 1.04 0.06 0.43 0.00 0.00 0.00 03:27:21 PM lo 6.25 6.25 0.35 0.35 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: eth1 1.04 1.04 0.06 0.35 0.00 0.00 0.00 Average: lo 1.24 1.24 0.07 0.07 0.00 0.00 0.00
复制

输出项说明。

· 第一字段:时间。 ·IFACE :设备名。 ·rxpck/s :每秒收到的包。 ·txpck/s :每秒传输的包。 ·rxbyt/s :每秒收到的所有包的体积。 ·txbyt/s :每秒传输的所有包的体积。 ·rxcmp/s :每秒收到的数据切割压缩的包的总数。 ·txcmp/s :每秒传输的数据切割压缩的包的总数。 ·rxmcst/s :每秒收到的多点传送的包。
复制

可以使用 grep 命令对输出进行过滤,命令如下。

sar -n DEV 2 5|grep eth1
复制

如果想知道网络设备错误报告,也就是用来查看设备故障的。应该用 EDEV 命令;比如下面的例子。

sar -n EDEV 2 5
复制

(3)内存分页监控

例如,每 10s 采样一次,连续采样 3 次,监控内存分页,命令及输出结果如下。

sar -B 10 3
复制
10:45:04 AM pgpgin/s pgpgout/s fault/s majflt/s 10:45:14 AM 606.19 3648.35 13893.21 0.00 10:45:24 AM 626.17 3726.67 525.97 0.00 10:45:34 AM 557.36 3734.53 1.50 0.00 Average: 596.60 3703.17 4810.10 0.00
复制

输出项说明如下。

·pgpgin/s :表示每秒从磁盘或 SWAP 置换到内存的字节数( KB )。
·pgpgout/s :表示每秒从内存置换到磁盘或 SWAP 的字节数( KB )。
·fault/s :每秒钟系统产生的缺页数,即主缺页与次缺页之和( major+minor )。
·majflt/s :每秒钟产生的主缺页数,这会导致将数据从磁盘加载到内存,因此需要留意。
复制

(4)I/O 和传送速率监控

例如,每 10s 采样一次,连续采样 3 次,需要键入如下命令。

sar -b 10 3
复制
[root@lsqdb ~]# sar -b 1 3 Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 03:19:46 PM tps rtps wtps bread/s bwrtn/s 03:19:47 PM 5.26 0.00 5.26 0.00 50.53 03:19:48 PM 6.25 0.00 6.25 0.00 200.00 03:19:49 PM 0.00 0.00 0.00 0.00 0.00 Average: 3.83 0.00 3.83 0.00 83.62
复制

输出项说明如下。

·tps :每秒钟物理设备的 I/O 传输总量。 ·rtps :每秒钟从物理设备读入的数据总量。 ·wtps :每秒钟向物理设备写入的数据总量。 ·bread/s :每秒钟从物理设备读入的数据量,单位为块 /s 。 ·bwrtn/s :每秒钟向物理设备写入的数据量,单位为块 /s 。
复制

(5)进程队列长度和平均负载状态监控

例如,每 10s 采样一次,连续采样 3 次,监控进程队列长度和平均负载状态,命令如下。

sar -q 10 3
复制
[root@lsqdb ~]# sar -q 1 3 Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 03:21:26 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 03:21:27 PM 0 151 0.02 0.03 0.05 03:21:28 PM 1 151 0.02 0.03 0.05 03:21:29 PM 0 151 0.02 0.03 0.05 Average: 0 151 0.02 0.03 0.05
复制

输出项说明如下。

·runq-sz :运行队列的长度(等待运行的进程数)。
·plist-sz :进程列表中进程( processes )和线程( threads )的数量。
·ldavg-1 :最后 1 分钟的系统平均负载( system load average )。
·ldavg-5 :过去 5 分钟的系统平均负载。
·ldavg-15 :过去 15 分钟的系统平均负载。
复制

(6)系统交换活动信息监控

例如,每 10s 采样一次,连续采样 3 次,监控系统交换活动信息,命令如下。

sar -W 10 3
复制
[root@lsqdb ~]# sar -W 1 3 Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 03:25:54 PM pswpin/s pswpout/s 03:25:55 PM 0.00 0.00 03:25:56 PM 0.00 0.00 03:25:57 PM 0.00 0.00 Average: 0.00 0.00
复制

输出项说明如下。

·pswpin/s :每秒系统换入的交换页面( swap page )数量。 ·pswpout/s :每秒系统换出的交换页面数量。
复制

(7)设备使用情况监控

例如,每 10s 采样一次,连续采样 3 次,报告设备使用情况,需要键入如下命令。

sar -d 10 3 -p
复制

其中,参数 -p 可以打印出 sda 、 hdc 等易读的磁盘设备名称,如果不使用参数 -p ,设备节点则有可能是 dev8-0 、 dev22-0 这样的形式。

[root@lsqdb ~]# sar -d 1 3 -p Linux 4.1.12-37.4.1.el6uek.x86_64 (lsqdb) 08/02/2023 _x86_64_ (2 CPU) 03:29:38 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 03:29:39 PM sda 3.03 0.00 96.97 32.00 0.00 0.33 0.33 0.10 03:29:39 PM dm-0 3.03 0.00 96.97 32.00 0.00 0.33 0.33 0.10 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: sda 1.68 0.00 40.27 24.00 0.00 0.20 0.20 0.03 Average: dm-0 2.01 0.00 40.27 20.00 0.00 0.17 0.17 0.03
复制

输出项说明如下。

·tps :每秒从物理磁盘 I/O 的次数。多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的。 ·rd_sec/s :每秒读扇区的次数。 ·wr_sec/s :每秒写扇区的次数。 ·avgrq-sz :发送到设备的请求的平均大小,单位为扇区。 ·avgqu-sz :磁盘请求队列的平均长度。 ·await :从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列的等待时间,单位是毫秒。 ·svctm :系统处理每次请求的平均时间,不包括在请求队列中消耗的时间。 ·%util : I/O 请求占 CPU 的百分比,比率越大,说明越饱和。
复制

问题分析

1)avgqu-sz 的值较低时,设备的利用率较高。 2)当 %util 的值接近 100% 时,表示设备带宽已经占满。
复制

(8)查看历史统计信息

有时我们希望能够看到历史性能统计信息,可以进入目录 /var/log/sa ,使用 sar–f saXX 命令查看历史数据,例如,

sar -f sa22
复制

默认将显示整天的数据。我们可以加上 -s 选项指定特定时间段的数据,例如,

sar -q -f sa13 -s 14:00:00 | head -n 10
复制

以上命令将只显示 13 日 14 点之后的 load 的统计数据,且只显示最前面的 10 条记录。

(9)输出 inode 、文件和其他内核表的统计信息

sar -v 10 3
复制

输出项说明如下。

·dentunusd :目录高速缓存中未被使用的条目数量。 ·file-nr :文件句柄( file handle )的使用数量。 ·inode-nr :索引节点句柄( inode handle )的使用数量。
复制

要想判断系统的瓶颈问题,有时需要将几个 sar 命令选项结合起来。

· 怀疑 CPU 存在瓶颈,可用 sar-u 和 sar-q 等来查看。 · 怀疑内存存在瓶颈,可用 sar-B 、 sar-r 和 sar-W 等来查看。 · 怀疑 I/O 存在瓶颈,可用 sar-b 、 sar-u 和 sar-d 等来查看。
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论