Linux 系统监测 —— sysstat

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 系统监测 —— sysstat相关的知识,希望对你有一定的参考价值。

Linux 系统监测 —— sysstat

sysstat 是Linux系统服务器中常用的软件工具包,可以用来监控服务器的性能。主要包含的工具:

  • iostat 工具提供CPU使用率及硬盘吞吐效率的数据; #比较核心的工具
  • mpstat 工具提供单个处理器或多个处理器相关数据;
  • pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息
  • sar 工具负责收集、报告并存储系统活跃的信息; #统计数据的核心工具
  • sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,是为sadc所设计的程序前端程序;
  • sa2工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用
  • sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
  • sadf 显示被sar通过多种格式收集的数据;
  • nfsiostat: NFS(Network File System)的I/O统计信息。
  • cifsiostat: CIFS(Common Internet File System)的统计信息

iostat

iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j  ID | LABEL | PATH | UUID | ...  ]
[ --dec= 0 | 1 | 2  ] [ --human ] [ -o JSON ]
[ [ -H ] -g <用户组名> ] [ -p [ <设备> [,...] | ALL ] ]
[ <设备> [...] | ALL ]

参数释义:

-c : 仅显示cpu的状态
-d : 仅显示存储设备的状态,不可以和-c一起使用
-k :默认显示的是读入读出的block信息,用-k可以改成KB大小来显示 -m
-t : 显示日期-p device | ALL :device为某个设备或者某个分区,如果使用ALL,就表示要显示所有分区和设备的信息

-x: 显示更多扩展内容

示例:

cfs@cfs:~$ iostat -c 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.01    0.10    0.00    0.00   99.84


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


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.02    0.00    2.27    0.00    0.00   95.72

mpstat

mpstat (multi processor?)用于多处理器系统中的CPU的利用率的统计。特点是可以细化到具体某个cpu的状态时可以使用参数-P,处理器的ID从0开始

mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -I  SUM | CPU | SCPU | ALL  ] 
[ -N  <node_list> | ALL  ]
[ --dec= 0 | 1 | 2  ] [ -o JSON ] 
[ -P  <CPU_列表> | ALL  ]

示例:

cfs@cfs:~$ mpstat 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17时00分33秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时00分34秒  all    1.01    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   97.98
17时00分35秒  all    1.75    0.00    0.75    0.00    0.00    0.00    0.00    0.00    0.00   97.49
17时00分36秒  all    0.50    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.24
平均时间:  all    1.09    0.00    0.67    0.00    0.00    0.00    0.00    0.00    0.00   98.24

cfs@cfs:~$ mpstat -P 0 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17时24分42秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时24分43秒    0    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

17时24分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时24分44秒    0    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00

17时24分44秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时24分45秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:    0    0.67    0.00    0.34    0.00    0.00    0.00    0.00    0.00    0.00   98.99

输出中各列的含义说明:

%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接收的中断的次数。

pidstat

pidstat 用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。我们可以通过指定统计次数和时间来获得所需的统计信息。

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T  TASK | CHILD | ALL 
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数

查看所有进程的CPU使用情况: pidstat -u -p ALL

查看进程的内容使用情况: pidstat -r

cfs@cfs:~$ pidstat -r
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17时41分15秒   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
17时41分15秒     0         1      0.57      0.00  225736    9536   0.12  systemd
17时41分15秒     0       401      0.32      0.00  129540   34016   0.42  systemd-journal
17时41分15秒     0       425      2.41      0.00   47528    5416   0.07  systemd-udevd
17时41分15秒   101       674      0.00      0.00   70740    5884   0.07  systemd-resolve
17时41分15秒 62583       675      0.00      0.00  145964    3232   0.04  systemd-timesyn

输出各列说明:

PID:进程标识符

Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页

Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页

VSZ:虚拟地址大小,虚拟内存的使用KB

RSS:常驻集合大小,非交换区五里内存使用KB

Command:task命令名

查看各个进程的IO情况:pidstat -d

cfs@cfs:~$ pidstat -d
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17时48分10秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
17时48分10秒     0         1     -1.00     -1.00     -1.00      24  systemd
17时48分10秒     0       358     -1.00     -1.00     -1.00     872  jbd2/sda1-8
17时48分10秒     0       401     -1.00     -1.00     -1.00      42  systemd-journal
17时48分10秒     0       425     -1.00     -1.00     -1.00       4  systemd-udevd

报告IO统计显示以下信息:

  • PID:进程id
  • kB_rd/s:每秒从磁盘读取的KB
  • kB_wr/s:每秒写入磁盘KB
  • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
  • COMMAND:task的命令名

查看任务上下文切换情况: pidstat -w -p PID

cfs@cfs:~$ pidstat -w -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

01时14分18秒   UID       PID   cswch/s nvcswch/s  Command
01时14分18秒   124       871      9.89      0.00  redis-server
  • PID:进程id
  • Cswch/s:每秒主动任务上下文切换数量
  • Nvcswch/s:每秒被动任务上下文切换数量
  • Command:命令名

显示选择任务的线程的统计信息外的额外信息: pidstat -t -p pid

cfs@cfs:~$ pidstat -t -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

11时27分06秒   UID      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
11时27分06秒   124       871         -    0.02    0.06    0.00    0.00    0.08     1  redis-server
11时27分06秒   124         -       871    0.02    0.06    0.00    0.00    0.08     1  |__redis-server
11时27分06秒   124         -       874    0.00    0.00    0.00    0.00    0.00     0  |__redis-server
11时27分06秒   124         -       875    0.00    0.00    0.00    0.00    0.00     2  |__redis-server
11时27分06秒   124         -       876    0.00    0.00    0.00    0.00    0.00     2  |__redis-server

TGID:主线程的表示

TID:线程id

%usr:进程在用户空间占用cpu的百分比

%system:进程在内核空间占用cpu的百分比

%guest:进程在虚拟机占用cpu的百分比

%CPU:进程占用cpu的百分比

CPU:处理进程的cpu编号

Command:当前进程对应的命令

pidstat -T

pidstat -T TASK
pidstat -T CHILD
pidstat -T ALL

TASK: 报告独立的task。
CHILD: 报告进程下所有线程统计信息。
ALL: 报告独立的task和task下面的所有线程。

task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

cfs@cfs:~$ pidstat -T ALL -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

11时52分55秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11时52分55秒   124       871    0.02    0.06    0.00    0.00    0.08     1  redis-server

11时52分55秒   UID       PID    usr-ms system-ms  guest-ms  Command
11时52分55秒   124       871    111400    325180         0  redis-server

PID:进程id

Usr-ms:任务和子线程在用户级别使用的毫秒数。

System-ms:任务和子线程在系统级别使用的毫秒数。

Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。

Command:命令名

以上是关于Linux 系统监测 —— sysstat的主要内容,如果未能解决你的问题,请参考以下文章

Shell应用之网卡流量监测

linux的网络监测工具

一体化的Linux系统性能和使用活动监控工具–Sysstat

sysstat安装并升级到11.5.5版本

sysstat安装并升级到11.5.5版本

sysstat安装并升级到11.5.5版本