Akemi

sysstat性能监控

2025/04/22

主要是对另一些监控命令做一下知识的补充

findmnt

findmnt 是 Linux 中用于查找挂载文件系统信息的实用工具,属于 util-linux 软件包的一部分。它提供了一种灵活且结构化的方式来查询 /proc/self/mountinfo 或 /etc/fstab 中的挂载点信息

参数 含义
-l / –list 以列表格式输出(默认模式)
-t <类型> 仅显示指定文件系统类型的挂载点(如 ext4, xfs, nfs, tmpfs 等)
-n / –noheadings 不显示标题栏(适合脚本处理)
–source <设备> 根据源设备(如 /dev/sda1)过滤挂载点
–target <路径> 根据挂载点路径(如 /mnt/data)过滤
-J / –json 输出 JSON 格式(适合编程解析)

ps风格与常用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ps aux    # BSD风格(无短横线)
ps -ef # UNIX风格(带短横线)
ps --help # GNU长选项

非Linux的Unix系统(如Solaris、AIX):
默认仅支持UNIX风格,BSD风格的命令可能不被识别
选项必须使用短横线(-),例如 -e, -f。
参数组合需分开书写(如 -e -f,不可合并为 -ef,但某些实现允许合并)。

ps -u root # 显示 root 用户的所有进程
ps -fp 1234 # 显示PID为1234的任务完整命令行信息
ps -e --forest # 以树形显示父子进程关系
ps aux --sort=-%cpu # 按CPU占用降序排列(最高占用在前)

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head # 仅显示PID、父PID、命令、CPU/内存占用

ps aux --sort=-%mem | head -n 10 # 列出内存占用最高的前10进程

ps aux | awk '{if ($8=="Z") print}' # 查找僵尸进程(STAT为Z)

维度 UNIX(System V)风格 BSD风格
语法简洁性 选项需带 -(如 -ef),参数需分开 选项无 -(如 aux),参数可合并
默认输出 仅显示当前终端进程,信息较简略 显示所 有进程,包含资源占用(%CPU、%MEM)
标准化程度 符合POSIX标准,兼容性强 非POSIX标准,但广泛支持
典型场景 脚本编写、需严格兼容性的环境 日常命令行快速查看进程状态

sysstat命令

sysstat 是一个功能强大的 Linux 系统性能监控工具包,包含一系列用于收集和分析系统资源使用情况的工具。它常用于服务器性能优化、故障排查和长期资源使用趋势分析。

不需要记住,因为记不住,只要知道有这个东西就行了

  • 数据来源

    /proc 文件系统(如 /proc/stat、/proc/diskstats、/proc/net/dev 等)。

    /sys 文件系统(如块设备调度器参数、CPU 频率等)。

  • 工具举例

    iostat:通过解析 /proc/diskstats 获取磁盘 I/O 统计。

    mpstat:通过 /proc/stat 和 /proc/interrupts 获取 CPU 和中断信息。

    sar:综合读取 /proc 下的多类统计文件。

1
2
3
4
5
6
7
8
9
yum -y install sysstat
rpm -ql sysstat | grep bin
/usr/bin/cifsiostat
/usr/bin/iostat
/usr/bin/mpstat
/usr/bin/pidstat
/usr/bin/sadf
/usr/bin/sar
/usr/bin/tapestat

mpstat(CPU)

CPU实时监控工具,可以查看多核CPU中每个计算核心的统计数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
mpstat -I
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -n ] [ -T ] [ -u ] [ -V ]
[ -I { SUM | CPU | SCPU | ALL } ] [ -N { <node_list> | ALL } ]
[ --dec={ 0 | 1 | 2 } ] [ -o JSON ] [ -P { <cpu_list> | ALL } ]

mpstat -P ALL
Linux 5.14.0-503.33.1.el9_5.x86_64 (1panel) 04/18/25 _x86_64_ (12 CPU)

16:16:32 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
16:16:32 all 0.49 0.00 0.31 0.18 0.28 0.07 0.02 0.00 0.00 98.65
16:16:32 0 0.49 0.00 0.31 0.18 0.27 0.11 0.02 0.00 0.00 98.63
16:16:32 1 0.49 0.00 0.31 0.17 0.27 0.07 0.02 0.00 0.00 98.68
16:16:32 2 0.49 0.00 0.31 0.17 0.27 0.07 0.02 0.00 0.00 98.68
16:16:32 3 0.49 0.00 0.31 0.18 0.28 0.07 0.02 0.00 0.00 98.65
16:16:32 4 0.49 0.00 0.31 0.19 0.28 0.06 0.02 0.00 0.00 98.65
16:16:32 5 0.49 0.00 0.31 0.18 0.28 0.06 0.02 0.00 0.00 98.66
16:16:32 6 0.49 0.00 0.31 0.18 0.28 0.06 0.02 0.00 0.00 98.65
16:16:32 7 0.49 0.00 0.31 0.18 0.28 0.06 0.02 0.00 0.00 98.66
16:16:32 8 0.49 0.00 0.31 0.18 0.28 0.06 0.02 0.00 0.00 98.66
16:16:32 9 0.49 0.00 0.31 0.17 0.28 0.06 0.02 0.00 0.00 98.66
16:16:32 10 0.49 0.00 0.31 0.17 0.30 0.07 0.02 0.00 0.00 98.63
16:16:32 11 0.49 0.00 0.32 0.17 0.28 0.06 0.02 0.00 0.00 98.66

mpstat -I SUM -P ALL
Linux 5.14.0-503.33.1.el9_5.x86_64 (1panel) 04/21/25 _x86_64_ (12 CPU)
# 硬中断时间
10:52:22 CPU intr/s
10:52:22 all 6689.66
10:52:22 0 587.31
10:52:22 1 549.88
10:52:22 2 546.00
10:52:22 3 560.88
10:52:22 4 559.99
10:52:22 5 559.19
10:52:22 6 558.27
10:52:22 7 557.52
10:52:22 8 555.18
10:52:22 9 553.22
10:52:22 10 556.68
10:52:22 11 551.86

mpstat -I CPU -P ALL -o JSON
以json格式进行输出
指标 说明 典型场景
%usr 用户态 CPU 利用率:执行用户空间程序(非特权级代码)的时间占比。 数值高表示应用程序(如 Java、Python)正在大量消耗 CPU。
%nice 低优先级用户态 CPU 利用率:通过 nice 调整优先级的进程占用的 CPU 时间。 后台低优先级任务(如批处理)运行时此值会上升。
%sys 内核态 CPU 利用率:执行系统内核操作(如系统调用、中断处理)的时间占比。 数值高可能因频繁系统调用(如网络/磁盘 I/O)或内核模块(如驱动)负载过重。
%iowait I/O 等待时间占比:CPU 空闲且等待 I/O 操作(磁盘/网络)完成的时间比例。 高值表明系统存在 I/O 瓶颈(如磁盘慢或高负载),CPU 因等待 I/O 而无法工作。
%irq 硬件中断处理时间占比:处理硬件中断(如键盘、网卡)的时间。 网络密集型应用(如高流量服务器)可能导致此值上升。
%soft 软件中断处理时间占比:处理内核软件中断(如定时器、任务队列)的时间。 高值常见于多线程调度或频繁定时任务(如数据库锁竞争)。
%steal 虚拟化环境中的 CPU 争抢时间:被其他虚拟机占用的物理 CPU 时间。 虚拟化环境中,若宿主机超卖资源,此值高表示当前 VM 被抢占 CPU,性能受影响。
%guest 虚拟化客户机 CPU 时间:运行虚拟化客户机(如 KVM 虚拟机)的时间占比。 宿主机的 CPU 时间用于处理虚拟机请求时此值升高。
%gnice 低优先级虚拟化客户机 CPU 时间:运行低优先级虚拟机任务的时间。 类似 %nice,但专用于虚拟化环境中的低优先级客户机任务。
%idle CPU 空闲时间占比:CPU 未被使用且无 I/O 等待的时间。 高值表示 CPU 未被充分利用;低值可能表示 CPU 饱和(需结合 %iowait 判断)。

iostat(磁盘)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
iostat -d (默认参数) 
Linux 5.15.0-136-generic (ws-station) 2025年04月21日 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
8.56 0.11 2.30 0.26 0.00 88.77

Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
loop0 0.01 0.01 0.00 0.00 17 0 0
loop1 0.02 0.14 0.00 0.00 349 0 0
loop10 0.09 1.36 0.00 0.00 3448 0 0
loop11 0.02 0.14 0.00 0.00 347 0 0
loop12 0.86 10.57 0.00 0.00 26794 0 0
loop13 0.17 2.65 0.00 0.00 6721 0 0
loop14 0.00 0.01 0.00 0.00 14 0 0
loop2 0.02 0.14 0.00 0.00 351 0 0
loop3 0.71 2.14 0.00 0.00 5425 0 0
loop4 0.02 0.42 0.00 0.00 1073 0 0
loop5 0.02 0.14 0.00 0.00 361 0 0
loop6 0.02 0.43 0.00 0.00 1082 0 0
loop7 0.03 0.68 0.00 0.00 1728 0 0
loop8 0.02 0.42 0.00 0.00 1074 0 0
loop9 0.02 0.43 0.00 0.00 1101 0 0
nvme0n1 91.23 3030.50 1074.37 0.00 7679868 2722669 0

iostat -c # 查看CPU使用情况
Linux 5.15.0-136-generic (ws-station) 2025年04月21日 _x86_64_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
8.40 0.52 2.36 0.25 0.00 88.47

iostat -c 1 # 每一秒中刷新一次
Linux 5.15.0-136-generic (ws-station) 2025年04月21日 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
8.38 0.54 2.36 0.25 0.00 88.48
avg-cpu: %user %nice %system %iowait %steal %idle
5.26 13.59 2.82 0.00 0.00 78.33

-c 显示 CPU 使用率统计
-d 显示磁盘 I/O 统计(默认)
-x 显示 扩展统计信息(更详细的 I/O 指标)
-k 以 KB/s 为单位显示数据(默认块数为 512B)
-m 以 MB/s 为单位显示数据
数字A 数字B: 每隔A秒刷新一次,一共B次
-y 忽略开机时的读写
-t 记录时间戳

pidstat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-u	监控 CPU 使用率(默认选项)
-r 监控 内存使用(如缺页、虚拟内存等)
-d 监控 磁盘 I/O(读写速率、操作次数)
-s 监控 栈使用(内核栈利用率)
-v 监控 内核表资源(如文件句柄、线程数)
-p PID 监控指定进程(如 -p 1234
-C 进程名 按进程名筛选(如 -C nginx)
-t 显示 线程级统计(监控多线程进程)
--human 人类友好格式(自动单位转换)

pidstat -urd 2 5 --human
均时间: UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
平均时间: 1000 10724 0.0B 1.6k 0.0B 0 feishu
平均时间: 1000 10855 0.0B 409.2B 409.2B 0 feishu
平均时间: 1000 11071 0.0B 409.2B 0.0B 0 feishu
平均时间: 1000 12271 0.0B 48.8k 0.0B 0 firefox
平均时间: 1000 20858 0.0B 818.4B 0.0B 0 chrome
平均时间: 1000 55790 0.0B 24.4k 0.0B 0 cherrystudio

vmstat(虚拟内存)

1
2
3
4
5
6
7
8
vmstat -SM
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
1 0 0 537 204 7039 0 0 134 83 317 638 8 2 90 0 0

若 wa 持续偏高,使用 iostat 检查磁盘性能。(磁盘太慢)
若 si/so 持续大于 0,需优化内存使用或扩容。(正在使用SWAP,内存性能有问题)
若 cs 过高,结合 pidstat 分析具体进程的上下文切换原因。
字段名 字段含义 备注
r (procs) 等待运行的进程数(运行队列长度) 长期超过 CPU 核数可能表示 CPU 饱和。
b (procs) 不可中断睡眠状态的进程数(通常因 I/O 阻塞) 值高可能表示磁盘或网络 I/O 瓶颈。
交换 (swpd) 已使用的虚拟内存(Swap)总量(单位:MB) 值大于 0 可能表示物理内存不足。
空闲 (free) 空闲的物理内存量(单位:MB) 空闲内存较少时,系统可能依赖缓存或触发 Swap。
缓冲 (buff) 内核缓冲区占用的内存(单位:MB),用于临时存储待写入磁盘的数据 缓冲区的数据通常是未落盘的脏数据。
缓存 (cache) 内核缓存占用的内存(单位:MB),用于缓存从磁盘读取的文件 缓存可加速后续文件访问,内存不足时会释放。
si 每秒从 Swap 换入内存的数据量(单位:MB/s) 值高表明系统正在从 Swap 恢复数据,内存不足。
so 每秒从内存换出到 Swap 的数据量(单位:MB/s) 值高表明系统正在将内存数据写入 Swap,内存不足。
bi 每秒从块设备读取的块数(1 块 = 512B 或 4KB) 高值可能表示频繁磁盘读取(如数据库查询)。
bo 每秒向块设备写入的块数 高值可能表示频繁磁盘写入(如日志写入)。
in 每秒中断次数(包括时钟中断、硬件中断等) 中断次数与硬件设备和系统负载相关。
cs 每秒上下文切换次数 高值可能因进程/线程过多或锁竞争(结合 pidstat 分析)。
us (cpu) 用户态 CPU 时间占比(应用程序代码消耗) 高值表示应用程序占用大量 CPU(如计算密集型任务)。
sy (cpu) 内核态 CPU 时间占比(系统内核操作消耗) 高值可能因系统调用频繁(如网络、I/O 操作)。
id (cpu) 空闲 CPU 时间占比 高值表示 CPU 资源充足。
wa (cpu) 等待 I/O 的 CPU 时间占比 高值(如 >20%)表示 I/O 瓶颈(磁盘或网络速度不足)。
st (cpu) 虚拟化环境中被其他虚拟机占用的 CPU 时间占比 仅在虚拟化环境中有效,高值表示宿主机资源被其他虚拟机抢占。

sar(生成系统检测报告)

sar(System Activity Reporter)是 sysstat 工具包中用于收集和报告系统性能数据的核心工具

1
2
3
4
5
6
7
8
9
10
11
12
13
-A	显示所有统计信息(CPU、内存、磁盘、网络等综合报告)
-u 显示 CPU 利用率(默认参数,可省略)
-P ALL 显示每个 CPU 核心的详细利用率(需结合 -u 使用)
-r 报告内存和交换空间使用情况(如 kbmemfree, %memused)
-b 磁盘 I/O 统计(读写速率、IOPS、传输量)
-n DEV 网络接口流量统计(收发包速率、带宽、错误数)
-d 块设备详细活动统计(如 sda, nvme0n1 的读写延迟和队列深度)
-q 系统负载和队列长度(如 runq-sz, ldavg-1)
-w 进程上下文切换统计(自愿/非自愿切换次数)

-f /path/file 从指定文件读取历史数据(默认读取 /var/log/sa/saXX,XX 为日期)
-o file 将数据保存到二进制文件(便于后续分析)
-p 以易读格式显示磁盘设备名(如将 sda 转换为 /dev/sda)

sa1 sa2工具

在较新的 Linux 发行版(如 CentOS 8+/RHEL 8+)中,sysstat 已从 cron 迁移到 systemd timer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# CentOS/RHEL
/usr/lib64/sa/
# Debian/Ubuntu
/usr/lib/sysstat/

sa1:数据采集脚本
通常由 cron 任务定时触发(默认每 10 分钟执行一次)。
配置文件路径:/etc/cron.d/sysstat

sa2:报告生成脚本
调用 sar 工具,生成每日汇总报告,将统计数据以文本格式保存到
/var/log/sa/sarXX
通常在 每天午夜 由 cron 任务触发

ls /var/log/sa/
sa01 sa05 sa09 sa13 sa17 sa21 sa26 sa30 sar03 sar07 sar11 sar15 sar19 sar25 sar29
sa02 sa06 sa10 sa14 sa18 sa22 sa27 sa31 sar04 sar08 sar12 sar16 sar20 sar26 sar30
sa03 sa07 sa11 sa15 sa19 sa24 sa28 sar01 sar05 sar09 sar13 sar17 sar21 sar27 sar31
sa04 sa08 sa12 sa16 sa20 sa25 sa29 sar02 sar06 sar10 sar14 sar18 sar24 sar28

# 查看记录的文件
sar -f /var/log/sa/sa22

cat /usr/lib/systemd/system/sysstat.service
[Unit]
Description=Resets System Activity Logs

[Service]
Type=oneshot
RemainAfterExit=yes
User=root
ExecStart=/usr/lib64/sa/sa1 --boot

[Install]
WantedBy=multi-user.target
Also=sysstat-collect.timer
Also=sysstat-summary.timer

# 配置文件位置
vim /etc/sysconfig/sysstat
vim /etc/sysconfig/sysstat.ioconf

tapestat stat(磁带存储)

cifsiostat(ceph存储)

sysstat的systemd-timer(定时器)—取代cron

timer允许用户激活其他服务单元

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
systemctl status sysstat-collect.timer
每十分钟进行一次系统信息收集
...
Apr 01 21:39:32 1panel systemd[1]: Started Run system activity accounting tool every 10 minutes.

查看其服务文件--每十分钟激活一次
cat /usr/lib/systemd/system/sysstat-collect.timer
[Unit]
Description=Run system activity accounting tool every 10 minutes
[Timer]
**OnCalendar=*:00/10**
[Install]
WantedBy=sysstat.service

如果未指定Unit=,则默认触发同名服务,即sysstat-collect.service

cat /usr/lib/systemd/system/sysstat-collect.service
[Unit]
Description=system activity accounting tool
Documentation=man:sa1(8)
After=sysstat.service
[Service]
Type=oneshot
User=root
ExecStart=/usr/lib64/sa/sa1 1 1
CATALOG
  1. 1. findmnt
  2. 2. ps风格与常用参数
  3. 3. sysstat命令
    1. 3.1. mpstat(CPU)
    2. 3.2. iostat(磁盘)
    3. 3.3. pidstat
    4. 3.4. vmstat(虚拟内存)
    5. 3.5. sar(生成系统检测报告)
    6. 3.6. tapestat stat(磁带存储)
    7. 3.7. cifsiostat(ceph存储)
    8. 3.8. sysstat的systemd-timer(定时器)—取代cron