本文 首发于 🌱 煎茶转载 请注明 来源

Sysstat 包包含许多商业单位共有的各种实用程序,用于监控系统性能和使用活动:

  • iostat  (1) 报告设备、分区和网络文件系统的CPU统计和硬盘吞吐效率的数据。 # 核心工具
  • mpstat  (1) 报告单个或组合处理器相关的统计数据。
  • pidstat  (1) 报告Linux任务 (进程) 的统计信息: I/O、CPU、内存等。
  • tapestat  (1) 报告连接到系统的磁带驱动器的统计信息。
  • cifsiostat  (1) 报告CIFS统计。
  • sysstat  (5) 只是sysstat配置文件的手动页面,给出了sysstat命令使用的环境变量的含义。

Sysstat 还包含您可以通过 cron 或 systemd 计划收集和记录性能和活动数据的工具:

  • sar  (1) 收集、报告和保存系统活动信息 (CPU、内存、磁盘、中断、网络接口、TTY、内核表等)。 # 数据统计核心工具
  • sadc  (8) 是系统活动数据收集器,用作sar的后端。
  • sa1  (8) 在系统活动每日数据文件中收集并存储二进制数据。它是sadc的前端,设计为从cron或systemd运行。
  • sa2  (8) 撰写每日活动总结报告。它是从cron或systemd运行的sar的前端。
  • sadf  (1) 以多种格式 (CSV、XML、JSON等) 显示由sar收集的数据,并可用于与其他程序的数据交换。该命令还可用于为sar使用SVG (可伸缩矢量图形) 格式收集的各种活动绘制图形。

1 性能及运行状况监控

1.1 isstat

使用方法: iostat [ options ] [ <interval> [ <count> ] ] 

$ iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ { -f | +f } <directory> ] [ -j { ID | LABEL | PATH | UUID | ... } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
[ [ -H ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]

参数释义:
-c  : 仅显示cpu的状态
-d  : 仅显示存储设备的状态,不可以和-c一起使用
-k  : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -m
-t  : 显示日期
-p device | ALL  : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
-x  : 显示扩展状态,显示更多内容
举例:每一秒钟打印一次CPU状态,打印3次

$ iostat -c 1 3
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.40    0.00    0.31    0.00    0.00   99.29



avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.50    0.00    0.00   99.50



avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.00    0.00    0.00   99.50

距离:显示详细信息

iostat -x
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.40    0.00    0.31    0.00    0.00   99.29

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
vda              0.01      0.14     0.00   0.06    1.19    16.99    0.65      5.88     0.21  24.79    7.65     9.02    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.01

说明:
rrqm/s : 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s : 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s : 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s : 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s : 每秒读扇区数。即 delta(rsect)/s
wsec/s : 每秒写扇区数。即 delta(wsect)/s
rkB/s : 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s : 每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz : 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz : 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await : 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm : 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util : 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
delta(use)/s/1000  (因为use的单位为毫秒)如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
idle 小于70% IO压力就较大了,一般读取速度有较多的wait.  #CPU空闲等待时间

1.2 mpstat

使用方法:mpstat [ options ] [ [ ] ]

$ mpstat --help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -n ] [ -u ] [ -V ]
[ -I { SUM | CPU | SCPU | ALL } ] [ -N { <node_list> | ALL } ]
[ --dec={ 0 | 1 | 2 } ] [ -o JSON ] [ -P { <cpu_list> | ALL } ]

举例:查看所有处理器统计数据

$ mpstat -P ALL 1 3
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

11:35:24 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:35:25 AM  all    0.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.00
11:35:25 AM    0    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
11:35:25 AM    1    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

11:35:25 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:35:26 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:35:26 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:35:26 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

11:35:26 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:35:27 AM  all    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
11:35:27 AM    0    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01
11:35:27 AM    1    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   99.01

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.17    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.33
Average:       0    0.33    0.00    0.33    0.00    0.00    0.00    0.00    0.00    0.00   99.33
Average:       1    0.00    0.00    0.67    0.00    0.00    0.00    0.00    0.00    0.00   99.33

说明:

  • %user     显示在用户级别(application)运行使用 CPU 总时间的百分比。
  • %nice     显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
  • %system  在核心级别(kernel)运行所使用 CPU 总时间的百分比。
  • %iowait  显示用于等待I/O操作占用 CPU 总时间的百分比。
  • %irq   显示在interval时间段内,硬中断占用的CPU总时间。
  • %soft   显示在interval时间段内,软中断占用的CPU总时间。
  • %steal   管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
  • %idle     显示 CPU 空闲时间占用CPU总时间的百分比。
  • intr/s  在internal时间段里,每秒CPU接收的中断的次数。

1.3 pidstat

pidstat -dl
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

12:01:54 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
12:01:54 PM     0         1      0.11      0.58      0.05  /usr/lib/systemd/systemd --switched-root --system --deserialize 22 
12:01:54 PM     0        48      0.00      0.00      0.00  kworker/u4:1
12:01:54 PM     0       226      0.00      0.00      0.00  kworker/u4:2
12:01:54 PM     0       328      0.00      0.85      0.00  jbd2/vda1-8
12:01:54 PM     0       397      0.00      1.95      0.00  /usr/lib/systemd/systemd-journald 
12:01:54 PM     0       416      0.01      0.00      0.00  /usr/lib/systemd/systemd-udevd 
12:01:54 PM     0       496      0.00      0.01      0.00  /sbin/auditd 
12:01:54 PM     0       594      0.00      0.00      0.00  /usr/lib/systemd/systemd-logind 
12:01:54 PM   999       598      0.00      0.00      0.00  /usr/lib/polkit-1/polkitd --no-debug 
12:01:54 PM    81       599      0.00      0.00      0.00  /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 
12:01:54 PM   998       616      0.00      0.00      0.00  /usr/sbin/chronyd 
12:01:54 PM     0       659      0.00      0.00      0.00  /usr/sbin/atd -f 
12:01:54 PM     0       673      0.00      0.00      0.00  /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220 
12:01:54 PM     0       895      0.00      0.00      0.00  /usr/bin/python2 -Es /usr/sbin/tuned -l -P 
12:01:54 PM     0       898      0.00      0.04      0.00  /usr/sbin/rsyslogd -n 
12:01:54 PM     0      1110      0.01      1.80      0.02  /usr/sbin/sshd -D 
12:01:54 PM     0     13001      0.00      0.00      0.00  /usr/local/aegis/AliSecGuard/AliSecGuard 
12:01:54 PM     0     13646      0.00      0.01      0.00  /usr/sbin/crond -n 
12:01:54 PM     0     17624      0.00      0.02      0.00  /usr/local/aegis/aegis_update/AliYunDunUpdate 
12:01:54 PM     0     17651      0.00      0.00      0.00  /usr/local/aegis/aegis_client/aegis_10_83/AliYunDun 
12:01:54 PM     0     23766      0.00      0.00      0.00  /usr/sbin/aliyun-service 
12:01:54 PM     0     23924      0.00      0.02      0.00  -bash

1.4 tapestat

Tapestat报告提供连接到系统的每个磁带驱动器的统计信息。
使用方法: tapestat [ options ] [ <interval> [ <count> ] ] 

$ tapestat --help
Usage: tapestat [ options ] [ <interval> [ <count> ] ]
Options are:
[ --human ] [ -k | -m ] [ -t ] [ -V ] [ -y ] [ -z ]
[root@frytea-dev-test ~]# tapestat -k

1.5 cifsiostat

CIFS报告提供每个装载的CIFS文件系统的统计信息。
使用方法: cifsiostat [ options ] [ <interval> [ <count> ] ] 

$ cifsiostat --HELO
Usage: cifsiostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -h ] [ -k | -m ] [ -t ] [ -V ]

2 数据收集及统计

2.1 sar

sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行。

sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Main options and reports (report name between square brackets):
        -B      Paging statistics [A_PAGE]
        -b      I/O and transfer rate statistics [A_IO]
        -d      Block devices statistics [A_DISK]
        -F [ MOUNT ]
                Filesystems statistics [A_FS]
        -H      Hugepages utilization statistics [A_HUGE]
        -I { <int_list> | SUM | ALL }
                Interrupts statistics [A_IRQ]
        -m { <keyword> [,...] | ALL }
                Power management statistics [A_PWR_...]
                Keywords are:
                CPU     CPU instantaneous clock frequency
                FAN     Fans speed
                FREQ    CPU average clock frequency
                IN      Voltage inputs
                TEMP    Devices temperature
                USB     USB devices plugged into the system
        -n { <keyword> [,...] | ALL }
                Network statistics [A_NET_...]
                Keywords are:
                DEV     Network interfaces
                EDEV    Network interfaces (errors)
                NFS     NFS client
                NFSD    NFS server
                SOCK    Sockets (v4)
                IP      IP traffic      (v4)
                EIP     IP traffic      (v4) (errors)
                ICMP    ICMP traffic    (v4)
                EICMP   ICMP traffic    (v4) (errors)
                TCP     TCP traffic     (v4)
                ETCP    TCP traffic     (v4) (errors)
                UDP     UDP traffic     (v4)
                SOCK6   Sockets (v6)
                IP6     IP traffic      (v6)
                EIP6    IP traffic      (v6) (errors)
                ICMP6   ICMP traffic    (v6)
                EICMP6  ICMP traffic    (v6) (errors)
                UDP6    UDP traffic     (v6)
                FC      Fibre channel HBAs
                SOFT    Software-based network processing
        -q [ <keyword> [,...] | PSI | ALL ]
                System load and pressure-stall statistics
                Keywords are:
                LOAD    Queue length and load average statistics [A_QUEUE]
                CPU     Pressure-stall CPU statistics [A_PSI_CPU]
                IO      Pressure-stall I/O statistics [A_PSI_IO]
                MEM     Pressure-stall memory statistics [A_PSI_MEM]
        -r [ ALL ]
                Memory utilization statistics [A_MEMORY]
        -S      Swap space utilization statistics [A_MEMORY]
        -u [ ALL ]
                CPU utilization statistics [A_CPU]
        -v      Kernel tables statistics [A_KTABLES]
        -W      Swapping statistics [A_SWAP]
        -w      Task creation and system switching statistics [A_PCSW]
        -y      TTY devices statistics [A_SERIAL]

参数说明:
-A  显示所有历史数据,通过读取/var/log/sar目录下的所有文件,并把它们分门别类的显示出来;
-b  通过设备的I/O中断读取设置的吞吐率;
-B  报告内存或虚拟内存交换统计;
-c  报告每秒创建的进程数;
-d  报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
-f  从一个二进制的数据文件中读取内容,比如 sar -f filename
-i  interval 指定数据收集的时间,时间单位是秒;
-n  分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
-o  把统计信息写入一个文件,比如 -o filename ;
-P  报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
-p  显示友好设备名字,以方便查看,也可以和-d和-n 参数结合使用,比如 -dp 或-np
-r  内存和交换区占用统计;
-R 
-t  这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
-u  报告CPU利用率的参数;
-v  报告inode,文件或其它内核表的资源占用信息;
-w  报告系统交换活动的信息; 每少交换数据的个数;
-W  报告系统交换活动吞吐信息;
-x  用于监视进程的,在其后要指定进程的PID值;
-X  用于监视进程的,但指定的应该是一个子进程ID
举例:查看网络设备的网络吞吐量

# sar -n DEV 2 4 
Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test)      07/14/2020      _x86_64_        (2 CPU)

12:00:50 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:00:52 PM      eth0      2.50      2.50      0.14      1.28      0.00      0.00      0.00      0.00
12:00:52 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:00:52 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:00:54 PM      eth0      1.50      1.00      0.09      0.33      0.00      0.00      0.00      0.00
12:00:54 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:00:54 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:00:56 PM      eth0      2.00      1.50      0.12      0.36      0.00      0.00      0.00      0.00
12:00:56 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:00:56 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:00:58 PM      eth0      1.00      1.00      0.07      0.33      0.00      0.00      0.00      0.00
12:00:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:         eth0      1.75      1.50      0.11      0.58      0.00      0.00      0.00      0.00
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

参数释义:
IFACE:设备名;
rxpck/s:每秒收到的包;
rxbyt/s:每秒收到的所有包的数量 ;
txbyt/s:每秒发送的所有包的数量 ;
txbyt/s:每秒发送的所有包的大小;
rxcmp/s:每秒收到数的据压缩包的数量;
txcmp/s :每秒传输的数据压缩包的数据;
rxmcst/s: 每秒收到的多播的包数量;

2.2 sadc

sadc  位于 /usr/local/lib64/sa/ 目录中(Centos 7.6),如果你没有设置可执行路径,要用绝对路径来运行。
sdac只是一个搜集写入工具,并不直接回显于屏幕上。sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示。
使用方法: /usr/local/lib64/sa/sadc [ options ] [ <interval> [ <count> ] ] [ <outfile> ] 

$ /usr/local/lib64/sa/sadc --help
Usage: /usr/local/lib64/sa/sadc [ options ] [ <interval> [ <count> ] ] [ <outfile> ]
Options are:
[ -C <comment> ] [ -D ] [ -F ] [ -f ] [ -L ] [ -V ]
[ -S { INT | DISK | IPV6 | POWER | SNMP | XDISK | ALL | XALL } ]

举例: /usr/local/lib/sa/sadc -  (后面的“-”是必须的,少了会出乱码和报错),则会输出数据到 /var/log/sa/ 目录下的一个文件中。

2.3 sa1

Sa1 命令被设计为由cron命令自动启动。

2.4 sa2

Sa2 命令接受sar命令的大多数标志和参数。
Sa2 命令被设计为由cron命令自动启动。

2.5 sadf

sadf 能从二进制文件中提取sar所收集的数据;显示的格式不如sar直观,其主要用于导出为csv、xml等格式的文件,方便导入数据库或excel等程序.

参考文献