监控系统CPU、内存、IO利器之-SAR

原文在这里: 监控系统CPU、内存、IO利器之-SAR
监控系统CPU、内存、IO利器之-SAR_第1张图片
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 总时间的百分比。

  1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
  2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
  3. 若 %idle 的值持续低于1,则系统的 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的百分比,比率越大,说明越饱和.

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

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

如果感觉有用,欢迎扫描文章开头的二维码加关注。

你可能感兴趣的:(java)