原文在这里: 监控系统CPU、内存、IO利器之-SAR
SAR全称是System Activity Report,它主要就是用来搜集、保存系统的CPU、内存、IO使用情况。SAR可以直接在命令行使用,也可以把输出结果保存到日志文件中。
本文将介绍SAR在CentOS7上使用的一些例子,如果你的系统还没有安装SAR,可以用如下命令来安装:
[root@localhost ~]# yum install sysstat
然后要开启sysstat服务,这样它就可以把监控结果保存到“/var/log/sa/saDD”日志文件中,DD代表当前的天,如果文件已经存在会进行归档。用以下命令开启并设置开机自启动:
[root@localhost ~]# systemctl start sysstat
[root@localhost ~]# systemctl enable sysstat
开启这个服务以后,它会每隔10分钟产生一次监控报告,下面是它的收集和产生报告的crontab设置:
[root@tes ~]# 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
下面是sysstat的配置文件:
[root@tes ~]# cat /etc/sysconfig/stat
cat: /etc/sysconfig/stat: No such file or directory
[root@tes ~]# cat /etc/sysconfig/sysstat
# sysstat-10.1.5 configuration file.
# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=28
# Compress (using gzip or bzip2) sa and sar files older than (in days):
COMPRESSAFTER=31
# Parameters for the system activity data collector (see sadc manual page)
# which are used for the generation of log files.
SADC_OPTIONS="-S DISK"
# Compression program to use.
ZIP="bzip2"
1.-u打印CPU的使用情况,每隔2秒输出一次,总共输出5次,-u可省略
[root@tes ~]# sar 2 5
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:34:57 AM CPU %user %nice %system %iowait %steal %idle
08:34:59 AM all 0.25 0.00 0.25 0.00 0.00 99.50
08:35:01 AM all 0.25 0.00 0.25 0.00 0.00 99.50
08:35:03 AM all 0.00 0.00 0.25 0.00 0.00 99.75
08:35:05 AM all 0.25 0.00 0.25 0.00 0.00 99.50
08:35:07 AM all 0.25 0.00 0.00 0.00 0.00 99.75
Average: all 0.20 0.00 0.20 0.00 0.00 99.60
CPU:all 表示统计信息为所有 CPU 的平均值。
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
2.-o把输出保存到文件
[root@tes ~]# sar 2 5 -o /tmp/data
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:36:44 AM CPU %user %nice %system %iowait %steal %idle
08:36:46 AM all 0.00 0.00 0.75 0.25 0.00 99.00
08:36:48 AM all 0.75 0.00 0.50 0.00 0.00 98.75
08:36:50 AM all 0.25 0.00 0.50 0.00 0.00 99.25
08:36:52 AM all 0.25 0.00 0.25 0.00 0.00 99.50
08:36:54 AM all 0.50 0.00 0.25 0.00 0.00 99.25
Average: all 0.35 0.00 0.45 0.05 0.00 99.15
注意:写到文件中并不是可读的文本格式
3.-f从文件中读取
[root@tes ~]# sar -f /tmp/data
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:36:44 AM CPU %user %nice %system %iowait %steal %idle
08:36:46 AM all 0.00 0.00 0.75 0.25 0.00 99.00
08:36:48 AM all 0.75 0.00 0.50 0.00 0.00 98.75
08:36:50 AM all 0.25 0.00 0.50 0.00 0.00 99.25
08:36:52 AM all 0.25 0.00 0.25 0.00 0.00 99.50
08:36:54 AM all 0.50 0.00 0.25 0.00 0.00 99.25
Average: all 0.35 0.00 0.45 0.05 0.00 99.15
4.-r打印内存使用情况
[root@tes ~]# sar -r 2 5
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:38:53 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
08:38:55 AM 157672 8016888 98.07 31396 1326728 9846844 113.20 6078540 1629648 68
08:38:57 AM 157112 8017448 98.08 31396 1326732 9847228 113.20 6079032 1629648 72
08:38:59 AM 159392 8015168 98.05 31396 1326732 9843796 113.16 6077372 1629648 72
08:39:01 AM 159392 8015168 98.05 31396 1326732 9843796 113.16 6077372 1629648 72
08:39:03 AM 159392 8015168 98.05 31396 1326732 9843796 113.16 6077372 1629648 72
Average: 158592 8015968 98.06 31396 1326731 9845092 113.18 6077938 1629648 71
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
5.-B打印内存页信息
[root@tes ~]# sar -B 2 5
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:41:19 AM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
08:41:21 AM 0.00 8.50 59.00 0.00 18.00 0.00 0.00 0.00 0.00
08:41:23 AM 0.00 0.00 163.00 0.00 53.00 0.00 0.00 0.00 0.00
08:41:25 AM 0.00 136.00 1014.50 0.00 478.50 0.00 0.00 0.00 0.00
08:41:27 AM 0.00 9.50 187.00 0.00 50.50 0.00 0.00 0.00 0.00
08:41:29 AM 0.00 10.50 822.50 0.00 358.00 0.00 0.00 0.00 0.00
Average: 0.00 32.90 449.20 0.00 191.60 0.00 0.00 0.00 0.00
pgpgin/s pgpgout/s:每秒换进换出的内存字节数,两个指标,越大表明物理内存越不够
majflt/s:Major Page Fault: 这个就是通俗意义上的页缺失,也就是该页在此时并没有被加载到物理内存中。如果这个值非常高,就说明系统内存不足。
fault/s:Minor Page Fault: 一般存在于进程共享内存,操作系统为其中的一些程序注册了该页,但是并没有为另外的程序注册,可以肯定的是该页一定已经在物理内存中了。
6.-d打印块设备统计信息
[root@tes ~]# sar -d -p 1 1
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
08:53:08 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
08:53:09 AM vda 1.00 0.00 18.00 18.00 0.00 1.00 1.00 0.10
08:53:09 AM vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
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的百分比,比率越大,说明越饱和.
7.-q打印进程队列
[root@tes ~]# sar -q 2 5
Linux 3.10.0-862.14.4.el7.x86_64 (tes.eyun.cn) 07/25/2019 _x86_64_ (2 CPU)
09:00:46 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
09:00:48 AM 0 505 0.02 0.04 0.05 0
09:00:50 AM 0 505 0.02 0.04 0.05 0
09:00:52 AM 0 507 0.02 0.04 0.05 0
09:00:54 AM 0 505 0.02 0.04 0.05 0
09:00:56 AM 0 507 0.02 0.04 0.05 0
Average: 0 506 0.02 0.04 0.05 0
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
参考:
https://www.linuxtechi.com/generate-cpu-memory-io-report-sar-command/
https://www.jianshu.com/p/ea7ed85918ac
http://lovesoo.org/linux-sar-command-detailed.html
如果感觉有用,欢迎扫描文章开头的二维码加关注。