sar命令基础
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项为:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { [,…] | SUM | ALL | XALL } ] [ -P { [,…] | ALL } ]
[ -m { [,…] | ALL } ] [ -n { [,…] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | … } ]
[ -f [ ] | -o [ ] | -[0-9]+ ]
[ -i ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
sar命令将累计活动计数器的内容输出到标准输出。操作系统包含许多计数器,这些计数器会随着各种系统操作的发生而增加。各种系统计数器包括:
- 系统单位利用率计数器
- 缓冲区使用计数器
- 磁盘和磁带I / O活动计数器
- tty设备活动计数器
- 开关和子程序计数器
- 文件访问计数器
- 队列活动计数器
- 进程间通信计数器
sar命令根据执行次数和执行间隔两个参数执行命令,如果执行间隔参数设置为零,则sar命令显示自系统启动以来的平均统计信息;如果指定间隔参数时没有执行次数参数,则会连续生成报告。
收集的数据除了显示在屏幕上之外,还可以保存在以 “-o filename” 参数指定的文件中。如果省略filename,则sar将信息写入标准的系统活动每日数据文件,即/var/log/sa/sadd 文件,其中dd参数指示当前日期,该文件为二进制文件,无法使用vim/less等命令查看内容。默认情况下,内核中可用的所有数据都保存在数据文件中。
# ll /var/log/sa
total 43548
-rw-r--r-- 1 root root 811040 Nov 1 23:50 sa01
-rw-r--r-- 1 root root 893984 Nov 2 23:50 sa02
...
-rw-r--r-- 1 root root 811040 Oct 31 23:50 sa31
-rw-r--r-- 1 root root 636708 Nov 1 23:53 sar01
-rw-r--r-- 1 root root 678696 Nov 2 23:53 sar02
...
-rw-r--r-- 1 root root 618216 Oct 31 23:53 sar31
1. 输出
可以选择参数显示特定系统活动的信息。不指定任何参数默认输出CPU数据。指定-A标志将输出所有的系统采集数据。
# sar -A
如果CPU利用率接近100%(user + nice + system),则sar采样的工作负载受CPU限制。
如果需要多个样本和多个报告,则可以方便地为sar命令指定输出文件。将sar命令作为后台进程运行。其语法为:
sar -o datafile interval count >/dev/null 2>&1 &
示例:每2秒统计一次CPU情况,共30次,结果输出到datafile文件
# sar -o datafile -u 2 30 >/dev/null 2>&1 &
[1] 8355
所有数据都以二进制形式保存到一个文件(数据文件)中。然后可以使用sar命令配合 -f 选项选择性地显示数据。
1.1 -f 参数
sar命令可以对先前保存在文件中的记录进行提取和写入。此文件可以是由 -f 标志指定的文件,也可以默认为标准系统活动每日数据文件。也可以输入-1、-2等作为sar的参数来显示前几天的数据。
示例:今天是11月18日,查询3天前的数据
# sar -3
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain) 2019年11月15日 _x86_64_ (2 CPU)
08时14分56秒 LINUX RESTART
08时20分01秒 CPU %user %nice %system %iowait %steal %idle
08时30分01秒 all 0.16 0.00 0.19 0.01 0.00 99.63
08时40分01秒 all 0.12 0.00 0.14 0.01 0.00 99.73
...
也可以使用 -f ,输出结果是一样的:
# sar -f /var/log/sa/sa15
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain) 2019年11月15日 _x86_64_ (2 CPU)
08时14分56秒 LINUX RESTART
08时20分01秒 CPU %user %nice %system %iowait %steal %idle
08时30分01秒 all 0.16 0.00 0.19 0.01 0.00 99.63
08时40分01秒 all 0.12 0.00 0.14 0.01 0.00 99.73
...
1.2 -P 参数
如果没有-P标志,sar命令将报告整个系统(也就是所有处理器)中的统计信息,这些统计信息将计算为所有值的平均值,单一取值使用百分比表示。如果给定了 -P 标志,则sar命令将报告与指定的一个或多个处理器相关的活动。如果给定-P ALL,则sar命令将报告每个处理器的统计信息和所有处理器之间的全局统计信息。
示例:服务器为双核
# sar -P 0
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain) 2019年11月18日 _x86_64_ (2 CPU)
08时17分48秒 LINUX RESTART
08时20分02秒 CPU %user %nice %system %iowait %steal %idle
...
15时50分01秒 0 0.05 0.00 0.14 0.00 0.00 99.81
# sar -P 1
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain) 2019年11月18日 _x86_64_ (2 CPU)
08时17分48秒 LINUX RESTART
08时20分02秒 CPU %user %nice %system %iowait %steal %idle
...
15时50分01秒 1 0.05 0.00 0.07 0.01 0.00 99.87
# sar -P ALL
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain) 2019年11月18日 _x86_64_ (2 CPU)
08时17分48秒 LINUX RESTART
08时20分02秒 CPU %user %nice %system %iowait %steal %idle
...
15时40分01秒 CPU %user %nice %system %iowait %steal %idle
15时50分01秒 all 0.05 0.00 0.10 0.01 0.00 99.84
15时50分01秒 0 0.05 0.00 0.14 0.00 0.00 99.81
15时50分01秒 1 0.05 0.00 0.07 0.01 0.00 99.87
1.3 其他参数说明
-A 汇总所有的报告
-a 报告文件读写使用情况
-B 报告附加的缓存的使用情况
-b 报告缓存的使用情况
-c 报告系统调用的使用情况
-d 报告磁盘的使用情况
-g 报告串口的使用情况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用情况
-n 报告命名cache的使用情况
-p 报告调页活动的使用情况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动情况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动状况
-y 报告TTY设备活动状况
2. 起源
sar命令是由sysstat软件包提供的。系统使用crontab周期性的调用sar命令,将数据写入日志。
# 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
相关目录下,有sa1,sa2 两个shell脚本和sadc一个二进制执行程序:
# ls /usr/lib64/sa
sa1 sa2 sadc
通过查阅两个脚本,可知:脚本sa1通过调用sadc程序,结合crontab,每10分钟将二进制数据收集、存储进系统活动数据文件中;脚本sa2每天23:53调用sar命令,生成日报。虽然都写到/var/log/sa目录中,但脚本sa1生成的是二进制文件,文件名称类似“sa01”;而脚本sa2生成的是普通文件,可以使用vim/less进行查看编辑,文件名称类似“sar01”。
日志保留的天数由 /etc/sysconfig/sysstat 文件控制。默认值为28。
3. 示例
sar -u 2 5
每2秒报告CPU利用率,显示5行。
sar -I 14 -o int14.file 2 10
每2秒报告IRQ 14的统计信息,显示10行。数据存储在名为int14.file的文件中。
sar -r -n DEV -f /var/log/sa/sa16
显示每日数据文件“sa16”中保存的内存和网络统计信息。
sar -A
显示保存在当前每日数据文件中的所有统计信息。
参考文档
https://linux.die.net/man/1/sar
http://www.softpanorama.org/Admin/Monitoring/sar.shtml
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html