操作系统性能监测工具

一、vmstat

vmstatvirtual memory statistics) 提供有关系统的虚拟内存、进程、CPU 活动、I/O 以及其他系统资源的实时统计信息。

vmstat 命令有多种选项,可以用来指定输出的内容和格式,帮助你更精确地监控和分析系统性能。以下是常见的 vmstat 选项及其功能:

1. 基本用法

1
vmstat [options] [delay [count]]
  • delay:每隔多少秒刷新一次输出。如果不指定,默认显示一次输出。
  • count:显示多少次输出。如果不指定,则无限次输出,直到用户终止命令。

2. 常见选项

  • -a(active/inactive 内存)
    显示活动(active)和非活动(inactive)内存信息,增加了 activeinactive 列。

    1
    vmstat -a
  • -f(forks)
    显示自系统启动以来的进程创建(fork)次数。

    1
    vmstat -f
  • -m(slabinfo)
    显示内存中 slab 信息,包括缓存对象的使用统计数据。该选项需要更高级别权限

    1
    vmstat -m
  • -n(no header)
    仅在第一次报告中显示头信息,以后不再重复显示头信息。这对于连续输出时有用,减少视觉干扰。

    1
    vmstat -n 2 5
  • -s(statistics summary)
    显示自系统启动以来的系统资源统计摘要信息,包括内存、CPU、交换等方面的统计数据。

    1
    vmstat -s
  • -d(disk statistics)
    显示磁盘设备的 I/O 统计信息。

    1
    vmstat -d
  • -p [partition](partition statistics)
    显示指定磁盘分区的 I/O 统计信息。

    1
    vmstat -p sda1
  • -t(timestamp)
    在每行输出的开头显示当前时间戳,有助于记录数据的时间点。

    1
    vmstat -t 2 5
  • -S [unit](unit size)
    S为大写

    指定输出单位,可以是 k(千字节)、m(兆字节)或 b(块,1024 字节)。

    1
    vmstat -S m 2 5
  • -w(wide output)
    使输出更宽,以包含更完整的信息。

    1
    vmstat -w

3、输出解读

1
2
3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st

vmstat 的输出包括多个列,每列代表不同的系统指标。以下是常见的列及其含义:

1
2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
  • procs(进程)

    • r:处于运行队列中的进程数,或者准备运行的进程数。如果这个值大于 CPU 核心数量,表示系统可能存在 CPU 瓶颈。
    • b:处于不可中断睡眠状态的进程数,通常表示等待 I/O 操作完成。
  • memory(内存)

    • swpd:已使用的交换空间大小(以 KB 为单位)。
    • free:空闲物理内存大小(以 KB 为单位)。
    • buff:用于缓冲的内存大小(以 KB 为单位),通常用于块设备的缓冲。
    • cache:用于缓存的内存大小(以 KB 为单位),通常用于文件系统的缓存。
  • swap(交换空间)

    • si:从交换空间调入内存的交换大小(以 KB 为单位),表示系统将数据从交换区调入内存的速率。
    • so:从内存调出到交换空间的交换大小(以 KB 为单位),表示系统将数据从内存调出到交换区的速率。
  • io(I/O)

    • bi:块设备读取操作的速率(以 KB 为单位),表示每秒从块设备读取的数据量。
    • bo:块设备写入操作的速率(以 KB 为单位),表示每秒向块设备写入的数据量。
  • system(系统)

    • in:每秒的中断数,包括硬件和软件中断。
    • cs:每秒的上下文切换次数,表示进程之间的切换频率。
  • cpu(CPU 使用情况)

    • us:用户态 CPU 使用率,表示 CPU 在用户进程上花费的时间百分比。

    • sy:内核态 CPU 使用率,表示 CPU 在内核进程上花费的时间百分比。

    • id:空闲 CPU 时间百分比。

    • wa:等待 I/O 完成的 CPU 时间百分比。

    • st:虚拟机偷取的 CPU 时间百分比(stolen time),指虚拟机管理程序(如 KVM、Xen)占用的时间。

    ussy合计表示 CPU 总使用率

4、 使用示例

  • 监控磁盘 I/O 活动,每隔 2 秒更新一次,输出 10 次:

    1
    vmstat -d 2 10
  • 显示活动和非活动内存信息,包含时间戳,每秒更新一次:

    1
    vmstat -a -t 1
  • 每秒更新一次统计数据,显示 5 次,并使用兆字节作为单位:

    1
    vmstat -S m 1 5
  • 查看系统的统计摘要:

    1
    vmstat -s

二、iostat

iostat 显示 CPU 的使用情况以及磁盘 I/O 的统计信息,帮助用户分析系统瓶颈,尤其是与存储设备相关的性能问题。

1. iostat 的基本功能

  • 监控 CPU 使用情况:显示系统总体的 CPU 使用情况,包括用户态、系统态、I/O 等待时间等。
  • 监控设备 I/O 性能:显示每个块设备的 I/O 活动统计信息,包括读写速率、每秒传输块数、平均请求时间等。

2. 基本用法

1
iostat [options] [delay [count]]
  • delay:每隔多少秒刷新一次输出。如果不指定,默认显示一次输出。
  • count:显示多少次输出。如果不指定,则无限次输出,直到用户终止命令。

3. 常见选项

  • -c(显示 CPU 使用情况)
    显示 CPU 使用情况统计,包括用户态、系统态、I/O 等待时间等。

    1
    iostat -c
  • -d(显示磁盘 I/O 统计信息)
    显示块设备的 I/O 统计数据。默认情况下,iostat 会同时显示 CPU 和磁盘 I/O 的统计信息,使用 -d 选项可以仅显示磁盘 I/O。

    1
    iostat -d
  • **-k-m(指定单位)
    将 I/O 统计数据以千字节 (-k) 或兆字节 (-m) 为单位显示。

    1
    2
    iostat -k
    iostat -m
  • -x(扩展 I/O 统计信息)
    显示更详细的设备 I/O 统计信息,包括平均队列长度、平均服务时间、设备利用率等。

    1
    iostat -x
  • -p [device](显示分区统计信息)
    显示指定设备的分区统计信息。如果未指定设备,则显示所有设备的分区统计信息。

    1
    2
    iostat -p sda
    iostat -p
  • **-t-z(显示时间戳)
    使用 -t 选项在每行输出前面添加时间戳,使用 -z 选项则隐藏所有值为零的设备(减少无用信息)。

    1
    2
    iostat -t
    iostat -z
  • -N(显示 LVM 逻辑卷统计信息)
    显示 LVM(逻辑卷管理器)逻辑卷的统计信息。

    1
    iostat -N
  • -p ALL(显示所有分区和设备)
    使用 -p ALL 显示所有设备和其分区的详细统计信息。

    1
    iostat -p ALL

4. iostat 输出解读

基本输出格式

典型的 iostat 输出包括两部分:CPU 使用情况和设备 I/O 使用情况。以下是一个基本输出的例子:

1
2
3
4
5
6
7
8
Linux 5.4.0-42-generic (hostname) 	08/21/2024 	_x86_64_	(4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
10.05 0.02 2.03 1.15 0.00 86.75

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 5.00 256.00 512.00 123456 654321
sdb 2.00 128.00 256.00 65432 321654

  • CPU 使用情况 (avg-cpu):

    • %user:在用户态执行的 CPU 时间百分比。
    • %nice:在用户态执行的、优先级调整过的进程的 CPU 时间百分比。
    • %system:在内核态执行的 CPU 时间百分比。
    • %iowait:CPU 等待 I/O 操作完成的时间百分比。
    • %steal:被虚拟化管理程序“窃取”的时间百分比。
    • %idle:CPU 空闲的时间百分比。
  • 设备使用情况(每个块设备):

    • tps(Transfers per second):每秒钟设备 I/O 请求的次数,包括读和写操作。
    • kB_read/s:每秒钟从设备读取的数据量(以 KB 为单位)。
    • kB_wrtn/s:每秒钟向设备写入的数据量(以 KB 为单位)。
    • kB_read:自系统启动以来从设备读取的总数据量(以 KB 为单位)。
    • kB_wrtn:自系统启动以来向设备写入的总数据量(以 KB 为单位)。

扩展的设备统计信息(使用 -x 选项)

iostat -x 提供了更详细的设备统计数据,包含以下信息:

  • **r/s**:每秒钟读取请求的次数。
  • **w/s**:每秒钟写入请求的次数。
  • **rkB/s**:每秒钟读取的数据量(以 KB 为单位)。
  • **wkB/s**:每秒钟写入的数据量(以 KB 为单位)。
  • **avgrq-sz**:平均每次 I/O 请求的数据大小(以扇区为单位)。
  • **avgqu-sz**:平均 I/O 请求队列长度。
  • **await**:每次 I/O 操作的平均等待时间(以毫秒为单位),包括队列中的时间和服务时间。
  • **svctm**:每次 I/O 操作的平均服务时间(以毫秒为单位)。
  • **%util**:设备的利用率,表示设备被占用的时间百分比(在 100% 表示设备始终处于忙碌状态)。

5. 示例分析

  • 使用-x显示磁盘扩展信息

    1
    2
    3
    4
    5
    iostat -x

    Device r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
    sda 25.00 30.00 500.00 600.00 32.00 0.10 4.00 1.50 10.00
    sdb 10.00 15.00 200.00 300.00 40.00 0.50 10.00 3.00 30.00
    • sda 设备分析

      • r/sw/s 表示每秒有 25 次读取和 30 次写入操作。
      • await 是 4 毫秒,表明该设备的 I/O 等待时间较短,I/O 性能良好。
      • %util 是 10%,说明 sda 设备的利用率较低,系统资源尚未饱和。
    • sdb 设备分析

      • avgqu-sz 为 0.50,表示该设备的 I/O 请求队列相对较长。
      • await 为 10 毫秒,比 sda 设备的等待时间高,可能有轻微的 I/O 瓶颈。
      • %util 为 30%,虽然利用率比 sda 高,但仍未达到饱和状态。
    • 每隔 2 秒显示一次 CPU 使用情况和磁盘 I/O 统计信息,共显示 5 次:

      1
      iostat -c -d 2 5
    • 以千字节为单位显示扩展 I/O 统计信息,并隐藏零值设备:

      1
      iostat -xkz
    • 显示所有设备及其分区的 I/O 统计信息,并添加时间戳:

      1
      iostat -p ALL -t
    • 仅显示指定磁盘设备 sda 的分区 I/O 统计信息:

      1
      iostat -p sda
    • 每隔 1 秒显示一次 LVM 逻辑卷的统计信息:

      1
      iostat -N 1

6、iostat安装

6.1 Feodra系统安装iostat

iostatsysstat软件包的一部分,因此安装sysstat包即可

1
2
3
4
5
6
7
8
9
1、更新软件包索引
sudo dnf update

2. 安装 sysstat 软件包
sudo dnf install sysstat

3、验证安装
iostat --version


操作系统性能监测工具
https://probiecoder.cn/java/os_performance_tools.html
作者
duwei
发布于
2025年4月22日
许可协议