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

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

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

  • 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> ] ]
    1. $ iostat --help
    2. Usage: iostat [ options ] [ <interval> [ <count> ] ]
    3. Options are:
    4. [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
    5. [ { -f | +f } <directory> ] [ -j { ID | LABEL | PATH | UUID | ... } ]
    6. [ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
    7. [ [ -H ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
    8. [ <device> [...] | ALL ]
    参数释义:
    -c : 仅显示cpu的状态
    -d : 仅显示存储设备的状态,不可以和-c一起使用
    -k : 默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -m
    -t : 显示日期
    -p device | ALL : device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息
    -x : 显示扩展状态,显示更多内容
    举例:每一秒钟打印一次CPU状态,打印3次 ```bash $ iostat -c 1 3 Linux 3.10.0-957.21.3.el7.x8664 (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

  1. 距离:显示详细信息
  2. ```bash
  3. iostat -x
  4. Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU)
  5. avg-cpu: %user %nice %system %iowait %steal %idle
  6. 0.40 0.00 0.31 0.00 0.00 99.29
  7. 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
  8. 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 ] [ [ ] ]

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

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

  1. $ mpstat -P ALL 1 3
  2. Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU)
  3. 11:35:24 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  4. 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
  5. 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
  6. 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
  7. 11:35:25 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  8. 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
  9. 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
  10. 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. 11:35:26 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  12. 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
  13. 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
  14. 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
  15. Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  16. Average: all 0.17 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.33
  17. Average: 0 0.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 99.33
  18. 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

    ```bash pidstat -dl Linux 3.10.0-957.21.3.el7.x8664 (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. <a name="SJKCX"></a>
  2. ### 1.4 tapestat
  3. Tapestat报告提供连接到系统的每个磁带驱动器的统计信息。<br />使用方法: `tapestat [ options ] [ <interval> [ <count> ] ]`
  4. ```bash
  5. $ tapestat --help
  6. Usage: tapestat [ options ] [ <interval> [ <count> ] ]
  7. Options are:
  8. [ --human ] [ -k | -m ] [ -t ] [ -V ] [ -y ] [ -z ]
  9. [root@frytea-dev-test ~]# tapestat -k

1.5 cifsiostat

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

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

2 数据收集及统计

2.1 sar

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

  1. sar --help
  2. Usage: sar [ options ] [ <interval> [ <count> ] ]
  3. Main options and reports (report name between square brackets):
  4. -B Paging statistics [A_PAGE]
  5. -b I/O and transfer rate statistics [A_IO]
  6. -d Block devices statistics [A_DISK]
  7. -F [ MOUNT ]
  8. Filesystems statistics [A_FS]
  9. -H Hugepages utilization statistics [A_HUGE]
  10. -I { <int_list> | SUM | ALL }
  11. Interrupts statistics [A_IRQ]
  12. -m { <keyword> [,...] | ALL }
  13. Power management statistics [A_PWR_...]
  14. Keywords are:
  15. CPU CPU instantaneous clock frequency
  16. FAN Fans speed
  17. FREQ CPU average clock frequency
  18. IN Voltage inputs
  19. TEMP Devices temperature
  20. USB USB devices plugged into the system
  21. -n { <keyword> [,...] | ALL }
  22. Network statistics [A_NET_...]
  23. Keywords are:
  24. DEV Network interfaces
  25. EDEV Network interfaces (errors)
  26. NFS NFS client
  27. NFSD NFS server
  28. SOCK Sockets (v4)
  29. IP IP traffic (v4)
  30. EIP IP traffic (v4) (errors)
  31. ICMP ICMP traffic (v4)
  32. EICMP ICMP traffic (v4) (errors)
  33. TCP TCP traffic (v4)
  34. ETCP TCP traffic (v4) (errors)
  35. UDP UDP traffic (v4)
  36. SOCK6 Sockets (v6)
  37. IP6 IP traffic (v6)
  38. EIP6 IP traffic (v6) (errors)
  39. ICMP6 ICMP traffic (v6)
  40. EICMP6 ICMP traffic (v6) (errors)
  41. UDP6 UDP traffic (v6)
  42. FC Fibre channel HBAs
  43. SOFT Software-based network processing
  44. -q [ <keyword> [,...] | PSI | ALL ]
  45. System load and pressure-stall statistics
  46. Keywords are:
  47. LOAD Queue length and load average statistics [A_QUEUE]
  48. CPU Pressure-stall CPU statistics [A_PSI_CPU]
  49. IO Pressure-stall I/O statistics [A_PSI_IO]
  50. MEM Pressure-stall memory statistics [A_PSI_MEM]
  51. -r [ ALL ]
  52. Memory utilization statistics [A_MEMORY]
  53. -S Swap space utilization statistics [A_MEMORY]
  54. -u [ ALL ]
  55. CPU utilization statistics [A_CPU]
  56. -v Kernel tables statistics [A_KTABLES]
  57. -W Swapping statistics [A_SWAP]
  58. -w Task creation and system switching statistics [A_PCSW]
  59. -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
举例:查看网络设备的网络吞吐量

  1. # sar -n DEV 2 4
  2. Linux 3.10.0-957.21.3.el7.x86_64 (frytea-dev-test) 07/14/2020 _x86_64_ (2 CPU)
  3. 12:00:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  4. 12:00:52 PM eth0 2.50 2.50 0.14 1.28 0.00 0.00 0.00 0.00
  5. 12:00:52 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  6. 12:00:52 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  7. 12:00:54 PM eth0 1.50 1.00 0.09 0.33 0.00 0.00 0.00 0.00
  8. 12:00:54 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  9. 12:00:54 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  10. 12:00:56 PM eth0 2.00 1.50 0.12 0.36 0.00 0.00 0.00 0.00
  11. 12:00:56 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  12. 12:00:56 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  13. 12:00:58 PM eth0 1.00 1.00 0.07 0.33 0.00 0.00 0.00 0.00
  14. 12:00:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  15. Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
  16. Average: eth0 1.75 1.50 0.11 0.58 0.00 0.00 0.00 0.00
  17. 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等程序.

参考文献