 测试
总共8项
性能监控各指令详解人生如逆旅,我亦是行人。
最后更新于2025-03-12 17:54:26

常用命令

  1. 常用的性能指标分析工具
性能指标 工具 说明
平均负载 uptime
top
uptime最简单
top提供了更全的指标
系统整体CPU使用率 vmstat
mpstat
top
sar
/proc/stat
top、vmstat、mpstat只可以动态查看,而sar还可以记录历史数据,/proc/stat是其他性能工具的来源
进程CPU使用率 top
pidstat
ps
htop
atop
top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程,htop和atop以不同颜色显示更直观
系统上下文切换 vmstat 除了上下文切换次数,还提供运行状态和不可中断状态进程的数量
进程上下文切换 pidstat 注意加上-w选项
软中断 top
/proc/softirqs
mpstat
top提供软中断CPU使用率。而/proc/softirqs和mpstat提供了各种软中断在每个CPU上运行的累计次数
硬中断 vmstat
/proc/interrupts
vmstat提供总的中断次数,而/proc/interrupts提供各种中断在每个CPU上运行的累积次数
网络 dstat
sar
tcpdump
dstat和sar提供总的网络接收和发送情况,而tcpdump则是动态抓取正在进行的网络通讯
I/O dstat
sar
iostat
dstat和sar都提供了I/O的整体情况
CPU个数 /proc/cpuinfo
lscpu
lscpu更直观
事件剖析 perf
execsnoop
perf可以用来分析CPU的缓存以及内核调用链,execsnoop用来监控短时进程

附录:

安装mpstat sar pidstat命令

apt-get install sysstat

安装execsnoop命令

git clone --depth 1 https://github.com/brendangregg/perf-tools

安装atop, htop命令

apt insatll atop htop

安装dstat命令

apt insatll dstat

命令详解

Linux系统查看命令详解,可能用man命令来看,比如man iostat这种格式。

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中的资源占用状况

1. 指标详解

进入linux服务器,输入top命令,展示以下界面,各种进程是按照CPU的占用量来排序的:

top - 14:01:50 up 5 days, 21:52,  1 user,  load average: 0.45, 0.49, 0.46
Tasks: 258 total,   2 running, 256 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.9 us,  1.2 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32782800 total, 12324952 free, 11637784 used,  8820064 buff/cache
KiB Swap: 32948220 total, 32948220 free,        0 used. 20842336 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4100 root      20   0 12.319g 1.958g  35072 S   1.7  6.3   8:43.25 java
 3610 root      20   0 11.759g 731148  30100 S   1.3  2.2   3:31.85 java
 3691 root      20   0 11.979g 0.996g  30356 S   1.3  3.2   4:26.58 java
 3794 root      20   0 3957140 415912  13960 S   1.3  1.3   3:33.77 java
 3403 root      20   0 11.803g 0.996g  30572 S   1.0  3.2   4:13.56 java
 3551 root      20   0 11.756g 828176  30900 S   1.0  2.5   3:28.33 java
 3962 root      20   0 11.902g 741900  34856 S   1.0  2.3   3:44.89 java
 1053 rabbitmq  20   0 3365540  90616   4696 S   0.7  0.3  54:54.88 beam.smp
 2219 mysql     20   0 12.168g 1.094g  10360 S   0.7  3.5  51:50.41 mysqld
 3874 root      20   0 11.641g 530360  29816 S   0.7  1.6   2:29.60 java
   13 root      20   0       0      0      0 S   0.3  0.0   3:44.90 rcu_sched
  478 root      20   0  237904  91436  88128 S   0.3  0.3  50:40.08 systemd-journal

显示信息可以分为两大块:

(1)统计信息-前5行

(2)进程信息

统计信息 说明
14:01:50 当前时间
up 5 days, 21:52 系统运行时间,格式为天,时:分
1 user 当前登录用户数
load average: 0.45, 0.49, 0.46 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。这个数一般认为不应该超过服务器 CPU 的核数
进程信息 说明
Tasks: 258 total 系统中的进程总数
2 running 正在运行的进程数
256 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
CPU信息 说明
0.2% us 用户空间占用CPU百分比
0.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.7% id 空闲CPU百分比
0.0% wa 等待IO的CPU时间百分比
0.0% hi 硬件中断时间百分比
0.0% si 软件中断时间百分比
0.0% st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
物理内存信息 说明
16267716 total 物理内存总量 KB
9197036 free 空闲内存总量
4680308 used 使用的物理内存总量
2390188 buff/cache 用作内核缓存的内存量
交换分区信息 说明
16777212 total 交换分区(虚拟内存)的总大小
16777212 free 空闲交换分区的大小
0 used 已经使用的交换分区的大小
11141172 avail Mem 实际可用内存
2. 进程信息
列名 含义
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程虚拟内存的大小,
RES 常驻内存的大小,也就是进程实际使用的物理内存大小
SHR 共享内存的大小,比如与其他进程共同使用的共享、加载的动态链接库以及程序的代码段等,单位kb
S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用物理内存占系统总内存的百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
3. top命令的一些用法
选项 含义
-b 批处理。
-c 显示完整的命令。
-d 表示top命令显示的页面更新一次的间隔,默认是 5 秒。
-I 忽略失效过程。
-s 保密模式。
-S 累积模式。
-i<时间> 设置间隔时间。
-u<用户名> 指定用户名。
-p<进程号> 指定进程。
-n<次数> 循环显示的次数。
交互指令 含义
?, h 显示交互模式的帮助。
P 按照 CPU 的使用率排序,默认就是此选项。
M 按照内存的使用率排序。
N 按照 PID 排序。
T 按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序。
k 按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号。
r 按照 PID 给某个进程重设优先级(Nice)值。
q 退出 top 命令。

在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:

top - 14:33:51 up 5 days, 22:24,  1 user,  load average: 0.18, 0.24, 0.41
Tasks: 259 total,   1 running, 258 sleeping,   0 stopped,   0 zombie
%Cpu0  :  3.3 us,  1.3 sy,  0.0 ni, 95.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.0 us,  1.0 sy,  0.0 ni, 96.6 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  3.0 us,  1.0 sy,  0.0 ni, 96.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  2.0 us,  1.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32782800 total, 12410600 free, 11485304 used,  8886896 buff/cache
KiB Swap: 32948220 total, 32948220 free,        0 used. 20994224 avail Mem

再次输入1,可回到之前的视图,按所有CPU平均值显示

uptime

uptime命令显示系统已经运行了多长时间,它依次显示下列信息:当前时间、系统已经运行了多长时间、有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。平均负载是指单位时间内,系统处于可运行状态和不可中断的平均进程数,也就是平均活跃进程数。

 14:44:20 up 5 days, 22:35,  1 user,  load average: 0.13, 0.34, 0.40
1. 指标详解
统计信息 说明
14:44:20 系统当前时间
up 5 days, 22:35 主机已运行时间,时间越大,说明你的机器越稳定。
1 user 用户连接数,是总连接数而不是用户数
load average: 0.13, 0.34, 0.40 系统平均负载,统计最近1,5,15分钟的系统平均负载
2. uptime命令的一些用法

watch -d uptime命令可持续观测系统负载情况,-d是高亮显示变化值

wacth -d uptime
Every 2.0s: uptime                                                                                                          

 14:45:03 up 5 days, 22:36,  1 user,  load average: 0.06, 0.29, 0.38

vmstat

vmstat命令可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,可以看到整个机器的CPU、内存、IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

1. 指标详解

vmstat命令使用的一般格式为:vmstat 2 5,其中2表示每隔2秒,5表示采样次数,共打印5次信息。

vmstat 2 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 12393280 659532 8275800    0    0     0    21    5   10  4  3 92  1  0
 0  0      0 12392696 659532 8275812    0    0     0    88 7264 16765  2  1 97  0  0
 0  0      0 12393100 659532 8275820    0    0     0   571 7361 16875  2  1 96  1  0
 2  0      0 12393212 659532 8275728    0    0     0     0 7650 17094  2  1 97  0  0
 0  0      0 12392668 659532 8275740    0    0     0    28 7431 16937  2  1 97  0  0

procs

项目 含义 说明
r 等待执行的任务数 包括了ready和running的线程,展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈
b 等待IO的进程数量

memory

项目 含义 说明
swpd 正在使用虚拟的内存大小,单位k
free 空闲物理内存大小
buff 已用的buff大小,对块设备的读写进行缓冲
cache 已用的cache大小,文件系统的cache

swap

项目 含义 说明
si 每秒从交换区写入内存的大小(单位:kb/s)
so 每秒从内存写到交换区的大小

io

项目 含义 说明
bi 每秒读取的块数(读磁盘) 块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes
bo 每秒写入的块数(写磁盘) 块设备每秒发送的块数量,单位是block

system

项目 含义 说明
in 每秒中断数,包括时钟中断 这两个值越大,会看到由内核消耗的cpu时间sy会越多
cs 每秒上下文切换数 秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目

cpu(以百分比表示)

项目 含义 说明
us 用户进程执行消耗cpu时间(user time)百分比 us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
sy 系统进程消耗cpu时间(system time)百分比 sys的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,我们应该检查原因。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足
Id 空闲时间(包括IO等待时间)百分比 一般来说 us+sy+id=100
wa 等待IO时间百分比 wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。
2. 常用参数
选项 含义
-a 显示活动内页
-f 显示启动后创建的进程总数
-m 显示slab信息
-n 头信息仅显示一次
-s 以表格方式显示事件计数器和内存状态
-d 报告磁盘状态
-p 显示指定的硬盘分区状态
-S 输出信息的单位。

pidstat

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

1. 指标详解

直接执行pidstat,输出系统启动后所有活动进程的cpu统计信息

Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:45:19 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:45:19 PM     0         1    0.07    0.45    0.00    0.07    0.52     0  systemd
03:45:19 PM     0         2    0.00    0.00    0.00    0.00    0.00     0  kthreadd
03:45:19 PM     0        12    0.01    0.00    0.00    0.04    0.01     0  ksoftirqd/0
03:45:19 PM     0        13    0.01    0.02    0.00    0.08    0.03     0  rcu_sched
03:45:19 PM     0        14    0.00    0.00    0.00    0.00    0.00     0  migration/0
03:45:19 PM     0        17    0.14    0.00    0.00    0.00    0.14     1  migration/1
03:45:19 PM     0        18    0.01    0.00    0.00    0.05    0.01     1  ksoftirqd/1
03:45:19 PM     0        26    0.00    0.06    0.00    0.04    0.06     0  kworker/0:2-mpt_poll_0
03:45:19 PM     0        30    0.00    0.00    0.00    0.01    0.01     1  kcompactd0
03:45:19 PM     0        32    0.00    0.02    0.00    0.00    0.02     1  khugepaged
03:45:19 PM     0        56    0.00    0.04    0.00    0.00    0.04     0  kworker/0:1H-kblockd
03:45:19 PM     0       127    0.00    0.03    0.00    0.00    0.03     1  kworker/1:1H-kblockd
统计信息 说明
%usr 用户空间CPU占用率
%system 内核空间CPU占用率
%guest 客户 CPU 使用率
%CPU 总的cpu占用率
CPU cpu编号信息
Command 拉起进程对应的命令
2. pidstat命令的一些用法

执行命令: pidstat 2 5;2表示每隔2s采样一次,5表示共采样5次;跟采样周期跟采样次数时,持续输出信息;也可只跟采样周期,测试时可持续观测

Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:46:07 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:46:09 PM     0        26    0.00    0.50    0.00    0.00    0.50     0  kworker/0:2-events
03:46:09 PM     0       445    0.50    0.00    0.00    0.00    0.50     1  vmtoolsd
03:46:09 PM  1000       980    0.00    0.50    0.00    0.00    0.50     0  panel-8-pulseau
03:46:09 PM     0      1573    0.00    0.50    0.00    0.00    0.50     1  kworker/1:0-events
03:46:09 PM  1000      1580    0.00    0.50    0.00    0.00    0.50     0  pidstat

03:46:09 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:46:11 PM     0       445    0.50    0.00    0.00    0.00    0.50     1  vmtoolsd
03:46:11 PM  1000      1569    0.00    0.50    0.00    0.00    0.50     0  sshd

03:46:11 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:46:13 PM  1000      1580    0.50    0.50    0.00    0.00    1.00     0  pidstat

03:46:13 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:46:15 PM     0        13    0.00    0.50    0.00    0.00    0.50     1  rcu_sched
03:46:15 PM     0       445    0.50    0.00    0.00    0.00    0.50     0  vmtoolsd
03:46:15 PM  1000      1580    0.00    0.50    0.00    0.00    0.50     1  pidstat

03:46:15 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:46:17 PM     0       445    0.00    0.50    0.00    0.00    0.50     1  vmtoolsd
03:46:17 PM  1000       980    0.50    0.00    0.00    0.00    0.50     0  panel-8-pulseau
03:46:17 PM     0      1573    0.00    0.50    0.00    0.00    0.50     1  kworker/1:0-events

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0        13    0.00    0.10    0.00    0.00    0.10     -  rcu_sched
Average:        0        26    0.00    0.10    0.00    0.00    0.10     -  kworker/0:2-events
Average:        0       445    0.30    0.10    0.00    0.00    0.40     -  vmtoolsd
Average:     1000       980    0.10    0.10    0.00    0.00    0.20     -  panel-8-pulseau
Average:     1000      1569    0.00    0.10    0.00    0.00    0.10     -  sshd
Average:        0      1573    0.00    0.20    0.00    0.00    0.20     -  kworker/1:0-events
Average:     1000      1580    0.10    0.30    0.00    0.00    0.40     -  pidstat

命令格式:pidstat -u (后面可以跟间隔时间及采样次数);使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。

pidstat -u 1 3
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:47:47 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:47:48 PM  1000      1582    1.98    0.00    0.00    0.00    1.98     0  pidstat

03:47:48 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:47:49 PM     0       445    1.00    0.00    0.00    0.00    1.00     0  vmtoolsd
03:47:49 PM     0      1573    0.00    1.00    0.00    0.00    1.00     1  kworker/1:0-mm_percpu_wq

03:47:49 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:47:50 PM  1000      1582    0.99    0.00    0.00    0.00    0.99     0  pidstat

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0       445    0.33    0.00    0.00    0.00    0.33     -  vmtoolsd
Average:        0      1573    0.00    0.33    0.00    0.00    0.33     -  kworker/1:0-mm_percpu_wq
Average:     1000      1582    0.99    0.00    0.00    0.00    0.99     -  pidstat

命令格式: pidstat -r 1

使用-r选项,pidstat将显示各活动进程的内存使用统计

输出的各指标详情:

minflt/s:每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数

majflt/s:每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生

VSZ:该进程使用的虚拟内存(以kB为单位)

RSS:该进程使用的物理内存(以kB为单位)

%MEM:该进程使用内存的百分比

Command:拉起进程对应的命令

pidstat -r 1
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:49:39 PM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
03:49:40 PM     0       445      0.99      0.00  162680    6876   0.17  vmtoolsd

命令格式: pidstat -p $pid 2 3

使用-p选项,pidstat将显示制定进程的CPU使用统计

pidstat -p 990 2 3
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:51:42 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
03:51:44 PM  1000       990    0.00    0.00    0.00    0.00    0.00     0  applet.py
03:51:46 PM  1000       990    0.00    0.00    0.00    0.00    0.00     0  applet.py
03:51:48 PM  1000       990    0.00    0.00    0.00    0.00    0.00     0  applet.py
Average:     1000       990    0.00    0.00    0.00    0.00    0.00     -  applet.py

命令格式:pidstat -d 2 3

使用-d选项,我们可以查看进程IO的统计信息

输出的各指标详情:

kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)

kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)

Command: 拉起进程对应的命令

pidstat -d 2 3
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:52:20 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

03:52:22 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

03:52:24 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command

命令格式:pidstat -w 2 3

使用-w选项,可以查看进程上下文切换情况,也可结合-p来查看指定进程的上下文切换情况

输出的各项指标详情:

cswch/s ,表示每秒自愿上下文切换的次数(是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。)

nvcswch/s ,表示每秒非自愿上下文切换的次数(是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换)

pidstat -w 2 3
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:53:19 PM   UID       PID   cswch/s nvcswch/s  Command
03:53:21 PM     0        13      4.48      0.00  rcu_sched
03:53:21 PM     0        14      0.50      0.00  migration/0
03:53:21 PM     0        17      0.50      0.00  migration/1
03:53:21 PM     0        26      4.48      0.00  kworker/0:2-events
03:53:21 PM     0        30      1.49      0.00  kcompactd0
03:53:21 PM     0       256      0.50      0.00  kworker/u256:26-flush-8:0
03:53:21 PM     0       445     11.44      0.00  vmtoolsd
03:53:21 PM     0       546      0.50      0.00  wpa_supplicant
03:53:21 PM  1000       858      1.00      0.00  dbus-daemon
03:53:21 PM  1000       905      0.50      0.00  ssh-agent
03:53:21 PM  1000       980      1.99      0.00  panel-8-pulseau
03:53:21 PM     0      1586      3.48      0.00  kworker/1:1-events
03:53:21 PM  1000      1604      0.50      0.00  pidstat

-wt参数表示输出线程的上下文切换指标,可显示当前进程的多个线程的上下文切换情况

pidstat -wt -p 990 2
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

03:54:12 PM   UID      TGID       TID   cswch/s nvcswch/s  Command
03:54:14 PM  1000       990         -      0.00      0.00  applet.py
03:54:14 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:16 PM  1000       990         -      0.00      0.00  applet.py
03:54:16 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:18 PM  1000       990         -      0.00      0.00  applet.py
03:54:18 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:20 PM  1000       990         -      0.00      0.00  applet.py
03:54:20 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:22 PM  1000       990         -      0.00      0.00  applet.py
03:54:22 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:24 PM  1000       990         -      0.00      0.00  applet.py
03:54:24 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:26 PM  1000       990         -      0.00      0.00  applet.py
03:54:26 PM  1000         -       990      0.00      0.00  |__applet.py
03:54:28 PM  1000       990         -      0.00      0.00  applet.py

mpstat

mpstat命令指令主要用于多CPU环境下,它显示各个可用CPU的状态。这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

1. 指标详解
mpstat
Linux 4.19.0-17-amd64 (debian)  08/23/2021      _x86_64_        (2 CPU)

09:39:48 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:39:48 AM  all    0.18    0.00    0.64    0.08    0.00    0.14    0.00    0.00    0.00   98.95
统计信息 说明
CPU 处理器编号。关键字all表示统计信息计算为所有处理器之间的平均值。
%usr 显示在用户级(应用程序)执行时发生的CPU利用率百分比。
%nice 显示以优先级较高的用户级别执行时发生的CPU利用率百分比。
%sys 显示在系统级(内核)执行时发生的CPU利用率百分比。请注意,这不包括维护硬件和软件的时间中断。
%iowait 显示系统具有未完成磁盘I / O请求的CPU或CPU空闲的时间百分比。
%irq 显示CPU或CPU用于服务硬件中断的时间百分比。
%soft 显示CPU或CPU用于服务软件中断的时间百分比。
%steal 显示虚拟CPU或CPU在管理程序为另一个虚拟处理器提供服务时非自愿等待的时间百分比。
%guest 显示CPU或CPU运行虚拟处理器所花费的时间百分比。
%gnice 显示CPU或CPU运行niced客户机所花费的时间百分比。
%idle 显示CPU或CPU空闲且系统没有未完成的磁盘I / O请求的时间百分比。
2. 常用参数
选项 含义
-P 指定CPU编号

每2秒产生一个报告,总共产生3个。

mpstat -P ALL 2 3
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

04:29:11 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:29:13 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:29:13 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:29:13 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

04:29:13 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:29:15 PM  all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.75
04:29:15 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:29:15 PM    1    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.50

04:29:15 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:29:17 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:29:17 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
04:29:17 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.00    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.92
Average:       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       1    0.00    0.00    0.17    0.00    0.00    0.00    0.00    0.00    0.00   99.83

iostat

iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。

1. 指标详解
iostat
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.47    0.00    0.69    0.26    0.00   98.58

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda              11.54       409.15        68.23         0.00     432195      72072          0
sr0               0.01         0.00         0.00         0.00          2          0          0
标示 说明
Device 监测设备名称
rrqm/s 每秒需要读取需求的数量
wrqm/s 每秒需要写入需求的数量
r/s 每秒实际读取需求的数量
w/s 每秒实际写入需求的数量
rsec/s 每秒读取区段的数量
wsec/s 每秒写入区段的数量
rkB/s 每秒实际读取的大小,单位为KB
wkB/s 每秒实际写入的大小,单位为KB
avgrq-sz 需求的平均大小区段
avgqu-sz 需求的平均队列长度
await 等待I/O平均的时间(milliseconds)
svctm I/O需求完成的平均时间
%util 被I/O需求消耗的CPU百分比
2. 常用参数
参数 说明
-c 仅显示CPU使用情况
-d 仅显示设备利用率
-k 显示状态以千字节每秒为单位,而不使用块每秒
-m 显示状态以兆字节每秒为单位
-p 仅显示块设备和所有被使用的其他分区的状态
-t 显示每个报告产生时的时间
-V 显示版号并退出
-x 显示扩展状态

1秒展示一次结果

iostat -x 1
Linux 5.10.0-8-amd64 (debian)   08/19/2021      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.47    0.00    0.68    0.25    0.00   98.59

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
sda              8.89    401.89     4.48  33.50    0.42    45.19    2.49     67.36     1.65  39.94    0.92    27.08    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.01   0.91
sr0              0.01      0.00     0.00   0.00    1.40     0.20    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    0.00    0.00   0.00

dstat

dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;而且dstat支持即时刷新,譬如输入dstat 3 5即每三秒收集一次,共收集5次,但最新的数据都会每秒刷新显示。和sysstat相同的是,dstat也可以收集指定的性能资源,譬如dstat -c即显示CPU的使用情况。

1. 指标详解
dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  0   0  99   0   0   0|7706B  164k|   0     0 |   0     0 | 189   225
  0   0 100   0   0   0|   0     0 |4436B  826B|   0     0 | 195   248
  1   0  99   0   0   0|   0     0 |4744B  346B|   0     0 | 203   242
  0   0 100   0   0   0|   0     0 |5080B  346B|   0     0 | 206   242
  0   1  99   0   0   0|   0     0 |5458B  444B|   0     0 | 214   244
  1   0  99   0   0   0|   0     0 |5080B  346B|   0     0 | 208   242
分组 分组含义及子项字段含义
CPU状态 CPU的使用率。显示了用户占比,系统占比、空闲占比、等待占比、硬中断和软中断情况。
磁盘统计 磁盘的读写,分别显示磁盘的读、写总数。
网络统计 网络设备发送和接受的数据,分别显示的网络收、发数据总数。
分页统计 系统的分页活动。分别显示换入(in)和换出(out)。
系统统计 统计中断(int)和上下文切换(csw)。
2. 常用参数
参数 说明
-c 显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息。
-C 当有多个CPU时候,此参数可按需分别显示cpu状态,例:-C 0,1 是显示cpu0和cpu1的信息。
-d 显示磁盘读写数据大小。
-D hda,total include hda and total。
-n 显示网络状态。
-N eth1,total 有多块网卡时,指定要显示的网卡。
-l 显示系统负载情况。
-m 显示内存使用情况。
-g 显示页面使用情况。
-p 显示进程状态。
-s 显示交换分区使用情况。
-S 类似D/N。
-r I/O请求情况。
-y 系统状态。
--ipc 显示ipc消息队列,信号等信息。
--socket 用来显示tcp udp端口状态。
-a 此为默认选项,等同于-cdngy。
-v 等同于 -pmgdsc -D total。
--output 文件 此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中,以便日后查看。例:dstat --output /root/dstat.csv & 此时让程序默默的在后台运行并把结果输出到/root/dstat.csv文件中。

如想监控swap,process,sockets,filesystem并显示监控的时间:

dstat -tsp --socket --fs
----system---- ----swap--- ---procs--- ------sockets------ --filesystem-
  date/time   | used  free|run blk new|tot tcp udp raw frg|files  inodes
26-07 09:23:48|   0     0 |  0   0 0.0|104   8   5   0   0|  704   6488
26-07 09:23:49|   0     0 |  0   0   0|104   8   5   0   0|  704   6488
26-07 09:23:50|   0     0 |  0   0   0|104   8   5   0   0|  704   6489
26-07 09:23:51|   0     0 |  0   0   0|104   8   5   0   0|  704   6489
26-07 09:23:52|   0     0 |  0   0   0|104   8   5   0   0|  704   6489
26-07 09:23:53|   0     0 |  0   0   0|104   8   5   0   0|  704   6489

若要将结果输出到文件可以加--output filename

dstat -tsp --socket --fs --output /tmp/ds.csv
----system---- ----swap--- ---procs--- ------sockets------ --filesystem-
  date/time   | used  free|run blk new|tot tcp udp raw frg|files  inodes
26-07 09:25:31|   0     0 |  0   0 0.0|104   8   5   0   0|  736   6493
26-07 09:25:32|   0     0 |  0   0   0|104   8   5   0   0|  736   6493
26-07 09:25:33|   0     0 |  0   0   0|104   8   5   0   0|  736   6493
26-07 09:25:34|   0     0 |  0   0   0|104   8   5   0   0|  736   6493
26-07 09:25:35|   0     0 |  0   0   0|104   8   5   0   0|  736   6494
26-07 09:25:36|   0     0 |  0   0   0|104   8   5   0   0|  736   6494

通过dstat --list可以查看dstat能使用的所有参数,其中上面internal是dstat本身自带的一些监控参数,下面/usr/share/dstat中是dstat的插件,这些插件可以扩展dstat的功能,如可以监控电源(battery)、mysql等。

下面这些插件并不是都可以直接使用的,有的还依赖其他包,如想监控mysql,必须要装python连接mysql的一些包。

dstat --list
internal:
        aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm
/usr/share/dstat:
        battery, battery-remain, cpufreq, dbus, disk-util, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, mysql5-io, mysql5-keys,
        net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, rpc, rpcd, sendmail, snooze, thermal, top-bio, top-cpu, top-cputime, top-cputime-avg, top-io, top-latency, top-latency-avg, top-mem, top-oom, utmp,
        vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi

free

free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

1. 指标详解
free
               total        used        free      shared  buff/cache   available
Mem:         3993720      549132     2950872       12320      493716     3201568
Swap:         998396           0      998396
统计信息 说明
total 总内存大小
used 已使用内存的大小,包含了共享内存
free 未使用内存的大小
shared 共享内存的大小
buff/cache 缓存和缓冲区的大小
available 新进程可用内存的大小;不仅包含未使用内存,还包括了可回收的缓存,所以一般会比未使用内存更大。不过,并不是所有缓存都可以回收,因为有些缓存可能正在使用中
2. free命令的一些用法
free -m
              total        used        free      shared  buff/cache   available
Mem:           1970         105        1770           3          94        1743
Swap:           974           0         974

perf

perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。

1. perf命令
序号 命令 作用
1 annotate 解析perf record生成的perf.data文件,显示被注释的代码。
2 archive 根据数据文件记录的build-id,将所有被采样到的elf文件打包。利用此压缩包,可以再任何机器上分析数据文件中记录的采样数据。
3 bench perf中内置的benchmark,目前包括两套针对调度器和内存管理子系统的benchmark。
4 buildid-cache 管理perf的buildid缓存,每个elf文件都有一个独一无二的buildid。buildid被perf用来关联性能数据与elf文件。
5 buildid-list 列出数据文件中记录的所有buildid。
6 diff 对比两个数据文件的差异。能够给出每个符号(函数)在热点分析上的具体差异。
7 evlist 列出数据文件perf.data中所有性能事件。
8 inject 该工具读取perf record工具记录的事件流,并将其定向到标准输出。在被分析代码中的任何一点,都可以向事件流中注入其它事件。
9 kmem 针对内核内存(slab)子系统进行追踪测量的工具
10 kvm 用来追踪测试运行在KVM虚拟机上的Guest OS。
11 list 列出当前系统支持的所有性能事件。包括硬件性能事件、软件性能事件以及检查点。
12 lock 分析内核中的锁信息,包括锁的争用情况,等待延迟等。
13 mem 内存存取情况
14 record 收集采样信息,并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析。
15 report 读取perf record创建的数据文件,并给出热点分析结果。
16 sched 针对调度器子系统的分析工具。
17 script 执行perl或python写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等。
18 stat 执行某个命令,收集特定进程的性能概况,包括CPI、Cache丢失率等。
19 test perf对当前软硬件平台进行健全性测试,可用此工具测试当前的软硬件平台是否能支持perf的所有功能。
20 timechart 针对测试期间系统行为进行可视化的工具
21 top 类似于linux的top命令,对系统性能进行实时分析。
22 trace 关于syscall的工具。
23 probe 用于定义动态检查点。
2. 全局性概况

perf list查看当前系统支持的性能事件;

perf bench对系统性能进行摸底;

perf test对系统进行健全性测试;

perf stat对全局性能进行统计;

全局细节:

perf top可以实时查看当前系统进程函数占用率情况;

perf probe可以自定义动态事件;

特定功能分析:

perf kmem针对slab子系统性能分析;

perf kvm针对kvm虚拟化分析;

perf lock分析锁性能;

perf mem分析内存slab性能;

perf sched分析内核调度器性能;

perf trace记录系统调用轨迹;

最常用功能perf record,可以系统全局,也可以具体到某个进程,更甚具体到某一进程某一事件;可宏观,也可以很微观。

pref record记录信息到perf.data;

perf report生成报告;

perf diff对两个记录进行diff;

perf evlist列出记录的性能事件;

perf annotate显示perf.data函数代码;

perf archive将相关符号打包,方便在其它机器进行分析;

perf script将perf.data输出可读性文本;

可视化工具perf timechart

perf timechart record记录事件;

perf timechart生成output.svg文档;

3. 常用命令

pef bench: perf中内置的benchmark,目前包括两套针对调度器和内存管理子系统的benchmark。

pef list: 列出当前系统支持的所有性能事件。包括硬件性能事件、软件性能事件以及检查点。

pef record: 收集采样信息,并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析。

pef report: 读取perf record创建的数据文件,并给出热点分析结果。

pef sched: 针对调度器子系统的分析工具。

pef stat: 执行某个命令,收集特定进程的性能概况,包括CPI、Cache丢失率等。

pef timechart: 针对测试期间系统行为进行可视化的工具

pef top: 类似于linux的top命令,对系统性能进行实时分析。

pef trace: 关于syscall的工具。

pef probe: 用于定义动态检查点。

sar

sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

1. 指标详解
sar -u 1 3
Linux 4.19.0-17-amd64 (debian)  08/23/2021      _x86_64_        (2 CPU)

10:07:35 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:07:36 AM     all      0.00      0.00      0.51      0.00      0.00     99.49
10:07:37 AM     all      0.50      0.00      0.00      0.50      0.00     98.99
10:07:38 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.17      0.00      0.17      0.17      0.00     99.50
统计信息 说明
%user 用户空间的CPU使用
%nice 改变过优先级的进程的CPU使用率
%system 内核空间的CPU使用率
%iowait CPU等待IO的百分比
%steal 虚拟机的虚拟机CPU使用的CPU
%idle 空闲的CPU
2. 常用参数
选项 含义
-A 显示所有的报告信息
-b 显示I/O速率
-B 显示换页状态
-c 显示进程创建活动
-d 显示每个块设备的状态
-e 设置显示报告的结束时间
-f 从指定文件提取报告
-i 设状态信息刷新的间隔时间
-P 报告每个CPU的状态
-R 显示内存状态
-u 显示CPU利用率
-v 显示索引节点,文件和其他内核表的状态
-w 显示交换分区状态
-x 显示给定进程的状态

execsnoop

execsnoop-专门用于为追踪短时进程(瞬时进程)设计的工具;它通过 ftrace 实时监控进程的 exec() 行为,并输出短时进程的基本信息,包括进程 PID、父进程 PID、命令行参数以及执行的结果。

#./execsnoop
59187  59186 /usr/local/bin/stress -t 1 -d 1
59188  28775            <...>-59188 [000] d... 40067.137167: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59191  59188 /usr/local/bin/stress -t 1 -d 1
59190  28778            <...>-59190 [003] d... 40067.138913: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59192  28776            <...>-59192 [003] d... 40067.139103: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59194  59192 /usr/local/bin/stress -t 1 -d 1
59196  59190 /usr/local/bin/stress -t 1 -d 1
59198  28770            <...>-59198 [001] d... 40067.145500: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59199  28779            <...>-59199 [001] d... 40067.146228: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59200  59198 /usr/local/bin/stress -t 1 -d 1
59202  59199 /usr/local/bin/stress -t 1 -d 1
59204  28778            <...>-59204 [002] d... 40067.155150: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59206  28775            <...>-59206 [001] d... 40067.157282: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59208  59206 /usr/local/bin/stress -t 1 -d 1
59209  28770            <...>-59209 [003] d... 40067.158381: execsnoop_sys_execve: (SyS_execve+0x0/0x30)
59205  59204 /usr/local/bin/stress -t 1 -d 1
59207  28776            <...>-59207 [002] d... 40067.158882: execsnoop_sys_execve: (SyS_execve+0x0/0x30)

可以看到有大量的stress进程,不断的在启用,造成系统的负载和CPU使用率升高。

atop

ATOP是一款用于观察Linux性能的ASCII全屏交互式工具。类似于top,每隔一段时间报告 CPU,Memory,Disk,Network 等硬件的性能信息,对于严重过载的资源会高亮显示。 除此之外,还包括进程级的相关统计信息。比如进程的CPU、内存、磁盘利用率,用户名,进程状态,启动时间,进程ID等。对于在上一个周期内退出的进程还会显示退出状态码。所有进程信息默认按CPU占用率降序排列。

1. 指标详解

使用atop就可以直接进行交互模式,默认情况下是每10秒更新,分别显示了进程数量、CPU使用率、负载、内存、SWAP、磁盘以及网卡等信息,所有的信息都在同一行上面展示。

2. atop命令的一些用法

有如下模式:

排序命令:

查看历史:

htop

htop是Linux系统下一个基本文本模式的、交互式的进程查看器,主要用于控制台或shell中,可以替代top,或者说是top的高级版。

1. htop命令优点
1) 快速查看关键性能统计数据,如CPU(多核布局)、内存/交换使用;
2) 可以横向或纵向滚动浏览进程列表,以查看所有的进程和完整的命令行;
3) 杀掉进程时可以直接选择而不需要输入进程号;
4) 通过鼠标操作条目;
5) 比top启动得更快
2. htop常用功能键
F1 : 查看htop使用说明
F2 : 设置
F3 : 搜索进程
F4 : 过滤器,按关键字搜索
F5 : 显示树形结构
F6 : 选择排序方式
F7 : 减少nice值,这样就可以提高对应进程的优先级
F8 : 增加nice值,这样可以降低对应进程的优先级
F9 : 杀掉选中的进程
F10 : 退出htop

/ : 搜索字符
h : 显示帮助
l :显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
u :显示所有用户,并可以选择某一特定用户的进程
s : 将调用strace追踪进程的系统调用
t : 显示树形结构

H :显示/隐藏用户线程
I :倒转排序顺序
K :显示/隐藏内核线程    
M :按内存占用排序
P :按CPU排序    
T :按运行时间排序

上下键或PgUP, PgDn : 移动选中进程
左右键或Home, End : 移动列表    
Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
3. 指标详解

最上面的三行,1~2 表示的是CPU的核数,本文中CPU是2核的。 然后下面左边部分从上至下,分别为,内存、交换分区的使用情况 右边部分为:Tasks为进程总数,当前运行的进程数、Load average为系统1分钟,5分钟,10分钟的平均负载情况、Uptime为系统运行的时间。

指标区各指标解释:

PID:进行的标识号
USER:运行此进程的用户
PRI:进程的优先级
NI:进程的优先级别值,默认的为0,可以进行调整
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名