简介
Sysstat 是一套在Linux系统中广泛使用的性能监控工具集,主要用于收集和分析系统的各种性能统计信息。它包含了多个命令行工具,这些工具能够帮助系统管理员和开发人员实时或周期性地监控服务器的CPU使用率、内存使用、磁盘I/O、网络流量以及其他重要的系统资源指标。
主要包含的工具如下:
-
sar (System Activity Reporter):用于报告系统的CPU、内存、进程、I/O设备以及网络等资源的利用率和统计数据。可以生成实时报告,也可以读取先前记录的日志文件生成历史报告。
-
iostat:用于监视系统的中央处理器(CPU)使用情况以及磁盘操作的统计信息,包括每块硬盘的读写操作数、数据量和延迟时间等。
-
mpstat:多处理器状态监控工具,用于显示每个CPU核心的活动以及整个系统的平均CPU负载。
-
pidstat:用来监控进程级别的CPU、内存、I/O和上下文切换等资源使用情况。
-
sadc:sysstat数据收集器,负责根据配置定期收集系统性能数据并存储到日志文件中。
-
sarstat:此命令可能存在于某些旧版本的sysstat包中,但现在通常由
sar
命令代替,用于处理和展示sadc
收集的数据。 -
sadf:用来读取由
sadc
收集并存储的数据,并以多种格式(例如CSV、XML或JSON)显示这些数据。它允许用户查看历史性能报告,分析系统过去的资源利用情况,以及生成可视化图表(如SVG)来更好地理解系统的负载变化趋势。 -
vmstat:用于报告虚拟内存统计信息,如进程、内存、paging、block IO、CPU 活动等。它可以帮助你监控系统的性能和资源使用情况。
Sysstat可以通过cron任务定时收集系统统计信息,并将其保存在 /var/log/sa/
或者 /var/log/sysstat
目录下的每日日志文件中。这些数据对于长期趋势分析和系统瓶颈排查非常有用。通过配置/etc/sysconfig/sysstat
或 /etc/default/sysstat
(根据不同Linux发行版),可以定制sysstat的收集频率和日志保留策略。
安装
sysstat
是一个用于监控系统性能的工具集,包括 iostat
、mpstat
、pidstat
和 sar
等工具。要在不同的操作系统上安装 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时间的百分比