Linux 性能优化工具包 sysstat

简介

Sysstat 是一套在Linux系统中广泛使用的性能监控工具集,主要用于收集和分析系统的各种性能统计信息。它包含了多个命令行工具,这些工具能够帮助系统管理员和开发人员实时或周期性地监控服务器的CPU使用率、内存使用、磁盘I/O、网络流量以及其他重要的系统资源指标。

主要包含的工具如下:

  1. sar (System Activity Reporter):用于报告系统的CPU、内存、进程、I/O设备以及网络等资源的利用率和统计数据。可以生成实时报告,也可以读取先前记录的日志文件生成历史报告。

  2. iostat:用于监视系统的中央处理器(CPU)使用情况以及磁盘操作的统计信息,包括每块硬盘的读写操作数、数据量和延迟时间等。

  3. mpstat:多处理器状态监控工具,用于显示每个CPU核心的活动以及整个系统的平均CPU负载。

  4. pidstat:用来监控进程级别的CPU、内存、I/O和上下文切换等资源使用情况。

  5. sadc:sysstat数据收集器,负责根据配置定期收集系统性能数据并存储到日志文件中。

  6. sarstat:此命令可能存在于某些旧版本的sysstat包中,但现在通常由sar命令代替,用于处理和展示sadc收集的数据。

  7. sadf:用来读取由 sadc 收集并存储的数据,并以多种格式(例如CSV、XML或JSON)显示这些数据。它允许用户查看历史性能报告,分析系统过去的资源利用情况,以及生成可视化图表(如SVG)来更好地理解系统的负载变化趋势。

  8. vmstat:用于报告虚拟内存统计信息,如进程、内存、paging、block IO、CPU 活动等。它可以帮助你监控系统的性能和资源使用情况。

Sysstat可以通过cron任务定时收集系统统计信息,并将其保存在 /var/log/sa/ 或者 /var/log/sysstat 目录下的每日日志文件中。这些数据对于长期趋势分析和系统瓶颈排查非常有用。通过配置/etc/sysconfig/sysstat/etc/default/sysstat(根据不同Linux发行版),可以定制sysstat的收集频率和日志保留策略。

安装

sysstat 是一个用于监控系统性能的工具集,包括 iostatmpstatpidstatsar 等工具。要在不同的操作系统上安装 sysstat,请按照以下说明进行操作:

对于基于 Debian 的系统(如 Ubuntu):

sudo apt-get update
sudo apt-get install sysstat

对于基于 RHEL 的系统(如 CentOS、Fedora):

sudo yum install sysstat

sar命令

sar命令很强大,是分析系统性能的重要工具之一

通过sar指令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。

sar使用格式为:

sar [options] [-o filename] [interval [count] ]

各个选项及参数含义如下:

options 为命令行选项

sar命令的选项很多,下面只列出常用选项:

  • -A:显示系统所有资源设备(CPU、内存、磁盘)的运行状况。

  • -u:显示系统所有CPU在采样时间内的负载状态。默认

  • -P:显示当前系统中指定CPU的使用情况。

  • -d:显示系统所有硬盘设备在采样时间内的使用状况。

  • -r:显示系统内存在采样时间内的使用状况。

  • -b:显示缓冲区在采样时间内的使用情况。

  • -v:显示进程、文件、I节点和锁表状态。

  • -n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。它们可以单独或者一起使用。

  • -q:显示运行列表中的进程数、进程大小、系统平均负载等

  • interval:表示采样间隔时间,是必须有的参数。

  • count:表示采样次数,是可选参数,默认值是1。

CPU使用情况

$ sar -u 3 5 #查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

21时00分58秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
21时01分01秒     all      0.00      0.00      0.00      0.00      0.00    100.00
21时01分04秒     all      0.00      0.00      0.33      0.00      0.00     99.67
21时01分07秒     all      0.00      0.00      0.00      0.00      0.00    100.00
21时01分10秒     all      0.00      0.00      0.00      0.00      0.00    100.00
21时01分13秒     all      0.00      0.00      0.00      0.00      0.00    100.00
平均时间:     all      0.00      0.00      0.07      0.00      0.00     99.93

$ sar -P 0 #0号cpu的负载情况
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

20时00分16秒       LINUX RESTART

20时10分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
20时20分01秒       0      0.01      0.00      0.07      0.00      0.00     99.93
20时30分01秒       0      0.21      0.00      0.19      0.01      0.00     99.59
20时40分01秒       0      0.00      0.00      0.07      0.00      0.00     99.93
20时50分01秒       0      0.00      0.00      0.07      0.00      0.00     99.93
21时00分01秒       0      0.00      0.00      0.07      0.00      0.00     99.93
21时10分01秒       0      0.00      0.00      0.07      0.00      0.00     99.93
平均时间:       0      0.04      0.00      0.09      0.00      0.00     99.87

输出说明

  • %user:用于表示用户模式下消耗的 CPU 时间的比例;
  • %nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例;
  • %system:系统模式下消耗的 CPU 时间的比例;
  • %iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
  • %steal:虚拟机偷走的时间比例;
  • %idle:CPU 空闲时间比例。

块使用情况

$ sar -d 3 2 #查看每个块的读写性能 3秒一次 统计2次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

21时03分52秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
21时03分55秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时03分55秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

21时03分55秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
21时03分58秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时03分58秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • tps: 每秒进程下发的IO读、写请求数量
  • rd_sec/s: 每秒读取扇区的次数
  • wr_sec/s:每秒写扇区的次数;
  • avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区);
  • avgqu-sz:磁盘请求队列的平均长度;
  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒);
  • svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间;
  • %util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和。

内存使用情况

$ sar -r
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

20时00分16秒       LINUX RESTART

20时10分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
20时20分01秒   1559432    468424     23.10      2104    151744    812788     13.06    103848    118948         0
20时30分01秒   1450660    577196     28.46      2104    256724    812788     13.06    189196    138544         0
20时40分01秒   1450768    577088     28.46      2104    256728    812788     13.06    189212    138540         4
20时50分01秒   1451036    576820     28.44      2104    256700    812248     13.05    189040    138524         4
21时00分01秒   1451292    576564     28.43      2104    256812    812248     13.05    189044    138632         0
21时10分01秒   1451208    576648     28.44      2104    256820    812248     13.05    189044    138568         0
平均时间:   1469066    558790     27.56      2104    239255    812518     13.06    174897    135293         1
  • kbmemfree 剩余内存总量
  • kbmemused 使用的内存总量,使用量=总内存-剩余内存-buffer-cache-slab
  • %memused 已使用内存的占比
  • kbbuffers 被内核用来作为buffer的内存量
  • kbcached 被内核用来作为cache的内存量
  • kbcommit 当前工作负载下,可以保证不出现内存不足的内存量
  • %commit 指kbcommit占内存/swap的百分率
  • kbactive 当前活跃内存量。除非万不得已,这部分内存才会被回收
  • kbinact 当前非活跃内存总量,当内存不足时,这部分内存最容易被内核收回
  • kbdirty 脏页大小,脏页指的是暂存于内存还没来得及持久化到硬盘的数据。可以使用sync刷入硬盘

磁盘I/O和传送速率监控

$ sar -b
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

20时00分16秒       LINUX RESTART

20时10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
20时20分01秒      0.09      0.00      0.09      0.05      1.19
20时30分01秒      1.58      1.00      0.58     93.72    264.15
20时40分01秒      0.11      0.00      0.11      0.00      3.54
20时50分01秒      0.07      0.00      0.07      0.00      0.93
21时00分01秒      0.04      0.00      0.03      0.36      0.42
21时10分01秒      0.11      0.00      0.11      0.00      1.59
21时20分01秒      0.02      0.00      0.02      0.00      0.29
平均时间:      0.29      0.14      0.15     13.45     38.87
  • tps 每秒钟物理设备的 I/O 传输总量
  • rtps 每秒钟从物理设备读入的数据总量
  • wtps 每秒钟向物理设备写入的数据总量
  • bread/s 每秒钟从物理设备读入的数据量,单位为 块/s 块的大小等同于一个扇区的大小,512字节
  • bwrtn/s 每秒钟向物理设备写入的数据量,单位为 块/s

inode、文件和其他内核表监控

$ sar -v
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

20时00分16秒       LINUX RESTART

20时10分01秒 dentunusd   file-nr  inode-nr    pty-nr
20时20分01秒     47663      2048     58549         1
20时30分01秒     49873      2080     58855         1
20时40分01秒     49873      2048     58849         1
20时50分01秒     49882      2048     58830         1
21时00分01秒     49908      2048     58834         1
21时10分01秒     49920      2048     58834         1
21时20分01秒     49927      2048     58834         1
平均时间:     49578      2053     58798         1
  • dentunusd 目录高速缓存中未被使用的条目数量
  • file-nr 系统使用的文件句柄数
  • inode-nr 系统使用的inode处理程序数
  • pty-nr 打开的伪终端数,即几个人登陆了系统

对网络的监控

sar -n { <关键词> [,...] | ALL }
网络统计信息
关键词可以是:

  • DEV 网卡
  • EDEV 网卡 (错误)
  • NFS NFS 客户端
  • NFSD NFS 服务器
  • SOCK Sockets (套接字) (v4)
  • IP IP 流 (v4)
  • EIP IP 流 (v4) (错误)
  • ICMP ICMP 流 (v4)
  • EICMP ICMP 流 (v4) (错误)
  • TCP TCP 流 (v4)
  • ETCP TCP 流 (v4) (错误)
  • UDP UDP 流 (v4)
  • SOCK6 Sockets (套接字) (v6)
  • IP6 IP 流 (v6)
  • EIP6 IP 流 (v6) (错误)
  • ICMP6 ICMP 流 (v6)
  • EICMP6 ICMP 流 (v6) (错误)
  • UDP6 UDP 流 (v6)
$ sar -n DEV 2 2
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

21时28分33秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
21时28分35秒     ens37      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分35秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分35秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分35秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分35秒     ens33      0.00      0.00      0.00      0.00      0.00      0.00      0.00

21时28分35秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
21时28分37秒     ens37      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分37秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分37秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分37秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
21时28分37秒     ens33      0.50      0.50      0.03      0.33      0.00      0.00      0.00

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:     ens37      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间: virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:     ens33      0.25      0.25      0.01      0.16      0.00      0.00      0.00

进程队列长度和平均负载状态监控

$ sar -q
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

20时00分16秒       LINUX RESTART

20时10分01秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
20时20分01秒         0       178      0.00      0.01      0.04         0
20时30分01秒         0       179      0.00      0.01      0.05         0
20时40分01秒         0       178      0.00      0.01      0.05         0
20时50分01秒         0       178      0.04      0.03      0.05         0
21时00分01秒         0       177      0.00      0.01      0.05         0
21时10分01秒         0       177      0.00      0.01      0.05         0
21时20分01秒         0       177      0.00      0.01      0.05         0
21时30分01秒         0       177      0.00      0.01      0.05         0
平均时间:         0       178      0.01      0.01      0.05         0
  • runq-sz 运行队列的长度(等待运行的进程数,等待cpu调度的任务数)
  • plist-sz 进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1 最后1分钟的系统平均负载(System load average)
  • ldavg-5 过去5分钟的系统平均负载
  • ldavg-15 过去15分钟的系统平均负载
  • blocked 表示等待I/O完成而被阻塞的任务总数,不为0则需要留意I/O是否存在性能瓶颈

iostat命令

iostat是I/O statistics(输入/输出统计)的缩写

主要的功能是对系统的磁盘I/O操作进行监视

它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU使用情况

iostat使用语法如下:

iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ]

各个选项及参数含义如下:

  • -c:显示CPU的使用情况。

  • -d:显示磁盘的使用情况。

  • -k/-m:每秒以k bytes/m bytes为单位显示数据。

  • -t:打印出统计信息开始执行的时间。

  • -p:显示每块磁盘的分区情况

  • -N:显示磁盘阵列(LVM)信息

  • -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。

  • interval:指定两次统计间隔的时间;

  • count:按照“interval”指定的时间间隔统计的次数。

$ iostat  #从开机到当前时刻的统计信息
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.11    0.00    0.25    0.01    0.00   99.63

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.01         0.56         0.00       1038          0
sda               6.60       136.46        57.60     250973     105947

输出的说明

  • 第一行:分别是版本内核信息 日期 架构 cpu个数
  • avg-cpu部分:
    • %user:用户占用cpu的时间百分比
    • %nice:有优先级的进程占用cpu的时间百分比
    • %system:系统占用cpu时间百分比
    • %iowait:等待IO时间的时间百分比
    • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
    • %idle:CPU空闲时间百分比

当然了,iostat命令的重点不是用来看CPU的,重点是用来监测磁盘性能的。

  • Device部分
    • tps: 每秒进程下发的IO读、写请求数量
    • kB_read/s: 每秒从磁盘读入的数据量,单位为K。
    • kB_wrtn/s: 每秒从磁盘写入的数据量,单位为K。
    • kB_read: 读取的数据总量,单位为K。
    • KB_wrtn: 写入的数据总量,单位为K。
$ iostat -x -k -d 1 2 # 每隔1S输出磁盘IO的详细详细,总共采样2次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 	2022年05月14日 	_x86_64_	(2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.01    0.00     0.58     0.00    90.26     0.00    1.13    1.13    0.00   0.96   0.00
sda               0.02     0.04    6.25    0.51   140.25    58.74    58.89     0.00    0.30    0.25    0.84   0.20   0.13

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

输出说明

  • rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并

  • wrqm/s: 每秒对该设备的写请求被合并次数

  • r/s: 每秒完成的读次数

  • w/s: 每秒完成的写次数

  • rkB/s: 每秒读数据量(kB为单位)

  • wkB/s: 每秒写数据量(kB为单位)

  • avgrq-sz:平均每次设备I/O操作的数据大小(扇区数为单位)

  • avgqu-sz: 平均I/O队列长度

  • await:平均每次设备I/O操作的等待时间 (毫秒),一般地,系统I/O响应时间应该低于5ms,如果大于 10ms就比较大了

  • r_await: 每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间

  • w_await: 每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间 单位毫秒

  • svctm: 平均每次IO请求的处理时间(毫秒为单位)

  • %util: 一秒中有百分之多少的时间用于I/O操作,即被IO消耗的CPU百分比,一般地,如果该参数是100%表示设备已经接近满负荷运行了

mpstat命令

mpstat 是一个在 Linux 系统中用于实时监控多处理器系统(包括单核和多核系统)CPU使用情况的命令行工具。

基本语法

mpstat [选项] [间隔时间 [采样次数]

常用选项

  • -P ALL-P <cpu编号>:显示所有CPU或指定编号CPU的统计信息。
  • -u:显示CPU利用率统计数据,包括用户、系统、空闲、等待I/O等时间百分比。
  • -p:显示每个CPU核心的中断统计信息。
  • -I { SUM | CPU | SCPU | ALL }:显示详细的CPU中断统计。

显示CPU的总体情况

$ mpstat
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时26分17秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时26分17秒  all    0.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.86

显示当前所有CPU的CPU利用率

$ mpstat -P ALL
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时29分20秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时29分20秒  all    0.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.87
17时29分20秒    0    0.07    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.84
17时29分20秒    1    0.06    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.86
17时29分20秒    2    0.04    0.00    0.10    0.00    0.00    0.01    0.00    0.00    0.00   99.85
17时29分20秒    3    0.05    0.00    0.07    0.00    0.00    0.01    0.00    0.00    0.00   99.87
17时29分20秒    4    0.04    0.00    0.07    0.00    0.00    0.00    0.00    0.00    0.00   99.89
17时29分20秒    5    0.04    0.00    0.07    0.00    0.00    0.00    0.00    0.00    0.00   99.88
17时29分20秒    6    0.05    0.00    0.09    0.00    0.00    0.00    0.00    0.00    0.00   99.86
17时29分20秒    7    0.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.87

显示当前每个CPU的CPU利用率

mpstat -I SCPU
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时31分06秒  CPU       HI/s    TIMER/s   NET_TX/s   NET_RX/s    BLOCK/s BLOCK_IOPOLL/s  TASKLET/s    SCHED/s  HRTIMER/s      RCU/s
17时31分06秒    0       0.00      11.88       0.00       0.51       1.08       0.00       0.01       8.16       0.00       5.63
17时31分06秒    1       0.00       8.23       0.00       0.00       0.08       0.00       0.00       4.24       0.00       4.68
17时31分06秒    2       0.00      11.00       0.00       0.81       0.13       0.00       0.00       8.66       0.00       3.60
17时31分06秒    3       0.00      12.39       0.00       0.82       0.16       0.00       0.00       8.20       0.00       4.52
17时31分06秒    4       0.00      10.04       0.20       1.34       0.23       0.00       0.00       8.66       0.00       3.15
17时31分06秒    5       0.00       8.58       0.00       0.01       0.30       0.00       0.00       7.27       0.00       2.56
17时31分06秒    6       0.00      13.89       0.00       0.39       0.24       0.00       0.13      10.44       0.00       4.70
17时31分06秒    7       0.00      15.57       0.00       0.39       0.25       0.00       0.00      11.86       0.00       5.01

每隔5秒输出一次CPU状态,总共输出3次

mpstat 5 3

显示特定CPU(例如CPU0)的状态

mpstat -P 0
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时32分17秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17时32分17秒    0    0.07    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.84

pidstat命令

pidstat是进程分析的终极利器,利用它可以分析进程(包括进程中所有每个线程)的各种信息:

cpu使用(默认就是cpu, -u 也是cpu), 内存使用(-r 包括page fault),IO情况(-d),进程切换(-w),

pidstat 可以使用 -p xxx 指定进程pid,单独分析一个进程及其所有线程;也可以是所有进程 -p ALL,或者是所有活动进程(默认是所有活动进程)

基本语法

pidstat [选项] [间隔时间] [采样次数]

选项

  • -d 显示各进程磁盘IO统计信息。
  • -h 时间会以时间戳的方式显示
  • -l 会完整的显示各进程
  • -r 显示各进程内存使用情况
  • -s 显示进程的内存堆栈使用情况
  • -t 以树的形式展示各进程
  • -U [ <username> ] 只展示该用户的相关进程
  • -u 展示每个进程的CPU利用率 默认选项
  • -w 显示进程的上下文切换(Context Switches)统计信息
  • -C <command> 只显示相关进程名称的进程
  • -p <pid> 显示pid对应的进程

查看所有活动进程的cpu信息

$ pidstat 

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时35分49秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17时35分49秒     0         1    0.00    0.02    0.00    0.02     2  systemd
17时35分49秒     0         2    0.00    0.00    0.00    0.00     6  kthreadd
17时35分49秒     0         6    0.00    0.00    0.00    0.00     0  ksoftirqd/0
17时35分49秒     0         7    0.00    0.00    0.00    0.00     0  migration/0
17时35分49秒     0         9    0.00    0.02    0.00    0.02     6  rcu_sched
17时35分49秒     0        11    0.00    0.00    0.00    0.00     0  watchdog/0
17时35分49秒     0        12    0.00    0.00    0.00    0.00     1  watchdog/1
17时35分49秒     0        13    0.00    0.00    0.00    0.00     1  migration/1
17时35分49秒     0        17    0.00    0.00    0.00    0.00     2  watchdog/2
17时35分49秒     0        18    0.00    0.00    0.00    0.00     2  migration/2


$ pidstat -h

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

#      Time   UID       PID    %usr %system  %guest    %CPU   CPU  Command
 1710496372     0         1    0.00    0.02    0.00    0.02     2  systemd
 1710496372     0         2    0.00    0.00    0.00    0.00     6  kthreadd
 1710496372     0         6    0.00    0.00    0.00    0.00     0  ksoftirqd/0
 1710496372     0         7    0.00    0.00    0.00    0.00     0  migration/0
 1710496372     0         9    0.00    0.02    0.00    0.02     7  rcu_sched
 1710496372     0        11    0.00    0.00    0.00    0.00     0  watchdog/0
 1710496372     0        12    0.00    0.00    0.00    0.00     1  watchdog/1
 1710496372     0        13    0.00    0.00    0.00    0.00     1  migration/1

显示各进程的磁盘IO情况

$ pidstat -d

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时54分21秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
17时54分21秒     0         1     13.99      0.02      0.00  systemd
17时54分21秒     0        78      0.00      0.00      0.00  kworker/u256:1
17时54分21秒     0       306      0.00      0.00      0.00  kworker/u256:2
17时54分21秒     0       440      0.12      0.00      0.00  systemd-journal
17时54分21秒     0       460      0.01      0.00      0.00  lvmetad
17时54分21秒     0       480      2.06      0.00      0.00  systemd-udevd
17时54分21秒     0       611      0.01      0.00      0.00  xfsaild/sda5
17时54分21秒     0       648      0.01      0.04      0.00  auditd
17时54分21秒     0       650      0.01      0.00      0.00  audispd

完整显示各进程名称

$ pidstat -l

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时55分08秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17时55分08秒     0         1    0.00    0.02    0.00    0.02     2  /usr/lib/systemd/systemd --switched-root --system --deserialize 22 
17时55分08秒     0       314    0.00    0.00    0.00    0.00     0  irq/16-vmwgfx
17时55分08秒     0       354    0.00    0.07    0.00    0.07     3  xfsaild/sda2
17时55分08秒     0       440    0.00    0.00    0.00    0.00     5  /usr/lib/systemd/systemd-journald 
17时55分08秒     0       458    0.00    0.00    0.00    0.00     7  kworker/7:2
17时55分08秒     0       480    0.01    0.00    0.00    0.01     0  /usr/lib/systemd/systemd-udevd 
17时55分08秒     0       575    0.00    0.07    0.00    0.07     2  kworker/2:2
17时55分08秒     0       611    0.00    0.07    0.00    0.07     7  xfsaild/sda5
17时55分08秒     0       648    0.00    0.00    0.00    0.00     6  /sbin/auditd 
17时55分08秒     0       650    0.00    0.00    0.00    0.00     6  /sbin/audispd 
17时55分08秒     0       652    0.00    0.00    0.00    0.00     7  /usr/sbin/sedispatch 
17时55分08秒    32       678    0.00    0.00    0.00    0.00     6  /sbin/rpcbind -w 
17时55分08秒     0       681    0.00    0.00    0.00    0.00     5  /usr/sbin/gssproxy -D 
17时55分08秒     0       688    0.00    0.00    0.00    0.00     7  /usr/sbin/ModemManager 
17时55分08秒     0       694    0.00    0.00    0.00    0.01     1  /usr/sbin/irqbalance --foreground 
17时55分08秒     0       697    0.00    0.00    0.00    0.00     0  /usr/sbin/smartd -n -q never 

显示各进程内存使用情况

$ pidstat -r

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时56分24秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
17时56分24秒     0         1      2.21      0.01  191648   4628   0.06  systemd
17时56分24秒     0       440      0.60      0.00   39160   4200   0.05  systemd-journal
17时56分24秒     0       460      0.06      0.00  116644   1272   0.02  lvmetad
17时56分24秒     0       480      0.36      0.00   46284   2612   0.03  systemd-udevd
17时56分24秒     0       648      0.02      0.00   55532    860   0.01  auditd
17时56分24秒     0       650      0.03      0.00   84556    920   0.01  audispd
17时56分24秒     0       652      0.05      0.00   55620   1432   0.02  sedispatch
17时56分24秒    32       678      0.02      0.00   69256   1008   0.01  rpcbind
17时56分24秒     0       681      0.04      0.00  201428   1276   0.02  gssproxy
17时56分24秒     0       688      0.18      0.01  430628   7544   0.09  ModemManager
17时56分24秒     0       694      0.29      0.00   21692   1328   0.02  irqbalance
17时56分24秒     0       697      0.11      0.00   52852   2816   0.03  smartd
17时56分24秒     0       698      0.10      0.00   26384   1776   0.02  systemd-logind
17时56分24秒     0       708      0.11      0.00   90668   3236   0.04  rngd

只显示指定用户的相关进程

$ pidstat -U chrony

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时57分37秒     USER       PID    %usr %system  %guest    %CPU   CPU  Command
17时57分37秒   chrony       734    0.00    0.00    0.00    0.00     4  chronyd

只显示匹配到名称的进程

$ pidstat -C ssh

Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时58分43秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17时58分43秒     0      2964    0.00    0.01    0.00    0.01     4  sshd
17时58分43秒     0      2968    0.00    0.00    0.00    0.00     5  sshd
17时58分43秒     0      3260    0.00    0.00    0.00    0.00     4  sshd
17时58分43秒     0      3264    0.00    0.00    0.00    0.00     4  sshd

根据PID显示

pidstat -p 2964
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 	2024年03月15日 	_x86_64_	(8 CPU)

17时59分34秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17时59分34秒     0      2964    0.00    0.01    0.00    0.01     4  sshd

vmstat命令

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写

可以对操作系统的内存信息、进程状态、CPU活动等进行监视

vmstat使用语法如下:

vmstat [-V] [-n] [delay [count]]

各个选项及参数含义如下:

  • -a:显示活跃和非活跃内存

  • -f:显示从系统启动至今的fork数量。

  • -V:表示打印出版本信息,是可选参数。

  • -n:表示在周期性循环输出时,输出的头部信息仅显示一次。

  • -d:显示磁盘相关统计信息。

  • delay:表示两次输出之间的间隔时间。

  • count:表示按照“delay”指定的时间间隔统计的次数。默认为1。

例如:

vmstat 3

表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。

vmstat 3 5

表示每3秒更新一次输出信息,统计5次后停止输出。

$ vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1662312   2104 169148    0    0   300    32  117  250  0  1 98  0  0
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1662156   2104 169188    0    0   278    30  112  235  0  1 99  0  0
 0  0      0 1662156   2104 169188    0    0     0     0  103  123  0  0 100  0  0
 0  0      0 1662156   2104 169188    0    0     0     0  105  128  0  0 100  0  0
 0  0      0 1662156   2104 169188    0    0     0     0   93  111  0  0 100  0  0
 0  0      0 1662156   2104 169188    0    0     0     0   94  109  0  0 100  0  0

各字段说明

Procs(进程):

  • r: 运行队列中进程数量
  • b: 等待IO的进程数量

Memory(内存):

  • swpd: 使用虚拟内存大小
  • free: 可用内存大小
  • buff: 用作缓冲的内存大小
  • cache: 用作缓存的内存大小

Swap(虚拟内存):

  • si(换⼊):每秒从SWAP(交换分区)读⼊到RAM(swap in)的⼤⼩,单位是KB
  • so(换出):每秒从RAM写出到SWAP(swap out)的大小,单位是KB

IO:(现在的Linux版本块的大小为1024bytes)

  • bi: 每秒从文件系统或SWAP读⼊到RAM(blocks in)的块数,block(1KB磁盘块)为单位
  • bo: 每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位

system(系统):

  • in: 每秒中断数,包括时钟中断。
  • cs: 系统每秒上下文切换数。

CPU(以百分比表示):

  • us: 用户占用cpu的时间百分比(user time)
  • sy: 系统占用cpu时间百分比(system time)
  • id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
  • wa: 等待IO时间的时间百分比
  • st:被虚拟机偷走的cpu时间的百分比
posted @ 2024-03-15 18:08  厚礼蝎  阅读(693)  评论(0编辑  收藏  举报