简介
sar
(System Activity Reporter
系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,用于生成指定时间段内的监控报告。
sar
可以从多方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、磁盘I/O
、CPU
效率、内存使用状况、进程活动及IPC
有关的活动等。
安装
sar
命令来自于sysstat
工具包,需先安装sysstat
。
基本用法
sar [选项] [<时间间隔> [<次数>]]
具体参数:
-b I/O 和传输速率信息状况
-B 分页状况
-d 块设备状况
-I { <中断> | SUM | ALL | XALL }
中断信息状况
-m 电源管理信息状况
-n { <关键词> [,...] | ALL }
网络统计信息
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
-q 队列长度和平均负载
-r 内存利用率
-R 内存状况
-S 交换空间利用率
-u [ ALL ]
CPU 利用率
-v Kernel table 状况
-w 任务创建与系统转换统计信息
-W 交换信息
-y TTY 设备状况
-o {<文件路径>}
将命令结果以二进制格式存放在指定文件中
环境
CentOS 7.9
Linux 3.10.0-1160.el7.x86_64
常用命令
查看实时负载信息
CPU
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
内存
kbmemfree:这个值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空间
kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空间
%memused:这个值是 kbmemused 和内存总量(不包括 swap)的一个百分比
kbbuffers 和 kbcached:这两个值就是 free 命令中的 buffer 和 cache
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap)
%commit:这个值是 kbcommit 与内存总量(包括 swap)的一个百分比
IO
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为:块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为:块/s
队列与负载
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
blocked: 当前被阻塞的任务数量,等待IO完成
历史数据统计
日志位置
实际生产中,如果服务器没有专门的资源监控措施,可以使用sar
来记录系统实时的资源使用状态,便于了解系统整体状态,同时这也是评估硬件资源是否充足的重要依据。每天的日志数据放入目录/var/log/sa/
,此目录下的二进制文件saXX
代表每个月XX
号生成的统计文件。默认监控频率是10min
。
具体用法:
sar -f /var/log/sa/saXX [-r/-b/-u] [ > tmp.txt]
[root@vm1 sa]# sar -f /var/log/sa/sa04 -r
Linux 3.10.0-1160.el7.x86_64 (vm1.bd) 2021年12月04日 _x86_64_ (4 CPU)
11时17分00秒 LINUX RESTART
11时20分41秒 LINUX RESTART
...
19时30分01秒 2398628 1481332 38.18 1080 637336 3936224 65.85 633220 485700 4
19时40分01秒 2394552 1485408 38.28 1080 641752 3936224 65.85 635232 488120 4
平均时间: 2428873 1451087 37.40 1080 628965 3924059 65.65 617622 482549 6
[root@vm1 sa]#
默认采集频率
/etc/cron.d/sysstat
文件设置了sar采集数据的具体工作策略。
[root@vm1 sa]# 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
[root@vm1 sa]#
- 每隔
10min
执行一次/usr/lib/sa/sa1 1 1
命令,将信息写入文件/var/log/sa/saXX
- 每天
23:53
执行一次/usr/lib/sa/sa2 -A
命令,将当天的汇总信息写入文件/var/log/sa/saXX
日志采集程序
这里涉及到的三个负责数据采集具体任务的三个程序如下
[root@vm1 sa]# pwd
/usr/lib64/sa
[root@vm1 sa]# ll
总用量 92
-rwxr-xr-x. 1 root root 1793 4月 1 2020 sa1
-rwxr-xr-x. 1 root root 2138 4月 1 2020 sa2
-rwxr-xr-x. 1 root root 85824 4月 1 2020 sadc
[root@vm1 sa]#
sa1
程序收集并存储每天系统实时动态信息到一个二进制的文件中。sa2
程序采集每天信息并做汇总,例如计算平均值。sadc
程序暂未深入了解。
自定义监控频率
默认监控频率是10min
,可以根据需要修改/etc/cron.d/sysstat
中的定时任务频率。但是笔者希望监控频率是秒级,因此需要自定义开发。
cat /data/tmp/sarSum.sh
#/bin/sh
step=1 #间隔的秒数,不能大于60
for (( i = 0; i < 60; i=(i+step) ));
do
/usr/lib64/sa/sa1 1 1
sleep $step
done
crontab -e
# frequency is 1 minute
* * * * * sh /data/tmp/sarSum.sh
日志文件生命周期
默认的saXX
文件生命周期是28d
,用户可以根据需要修改,以下两个文件中的修改HISTORY
修改成期望值即可。
/usr/lib64/sa/sa2
文件修改HISTORY
sysstat
文件修改HISTORY
引用
- https://shockerli.net/post/linux-tool-sar/
- https://www.cnblogs.com/ceshi2016/p/8946192.html
- https://www.cnblogs.com/lanbojini/p/14633094.html