> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/man8/iostat.8.md).

# iostat(8)

`iostat` — 报告 I/O 统计信息

## 名称

`iostat` — I/O 统计信息

## 概要

`iostat [-CdhIKoTxz] [-c count] [-M core] [-n devs] [-N system] [-t type,if,pass] [-w wait] [drives]`

## 描述

`iostat` 工具显示有关终端、设备和 CPU 操作的内核 I/O 统计信息。第一组打印的统计数据是系统正常运行时间内的平均值（除非指定了 `-I`）。本手册中任何对重复次数的提及都隐含包括第一组统计输出。要获取当前活动的信息，应指定合适的等待时间，以便后续打印的统计数据集将按该时间取平均。

可用选项如下：

**`-C`** 显示 CPU 统计信息。默认开启，除非指定了 `-d` 或 `-x`。

**`-c`** 重复显示 `count` 次。如果未指定 `-c` 但指定了等待间隔，默认重复次数为无穷大。如果未指定等待间隔，默认重复次数为 1。

**`-d`** 仅显示设备统计信息。如果开启此标志，则仅显示设备统计信息，除非同时指定了 `-C` 或 `-T` 以启用 CPU 或 TTY 统计信息的显示。

**`-h`** 将 `iostat` 置于 ‘top’ 模式。在此模式下，`iostat` 将按每个测量周期字节数从高到低的顺序显示设备。

**`-I`** 显示给定时间段内的总统计信息，而不是该时间段内每秒的平均统计信息。

**`-K`** 在旧式块传输显示中（`-I` 和 `-o`），以千字节而非设备本机块大小显示块计数。

**`-M`** 从指定的 core 而非默认的 “`/dev/kmem`” 提取与名称列表关联的值。

**`-N`** 从指定的 system 而非默认的 “`/boot/kernel/kernel`” 提取名称列表。

**`-n`** 显示最多 `devs` 个设备。如果存在的设备少于 `devs` 个，`iostat` 工具将显示较少数量的设备。

**`-o`** 显示旧式 `iostat` 设备统计信息。显示每秒扇区数、每秒传输次数和每次寻道毫秒数。如果指定了 `-I`，则显示总块/扇区数、总传输次数和每次寻道毫秒数。

**`-T`** 显示 TTY 统计信息。默认开启，除非指定了 `-d` 或 `-x`。

**`-t`** 指定要显示的设备类型。设备有三种不同的类别：

设备类型（device type）：

**da** 直接访问设备

**sa** 顺序访问设备

**printer** 打印机

**proc** 处理器设备

**worm** 一次写入多次读取设备

**cd** CD 设备

**scanner** 扫描仪设备

**optical** 光存储设备

**changer** 介质更换设备

**comm** 通信设备

**array** 存储阵列设备

**enclosure** 机箱服务设备

**floppy** 软盘设备

接口（interface）：

**IDE** 集成驱动电子设备

**SCSI** 小型计算机系统接口设备

**NVME** NVM Express 接口设备

**other** 任何其他设备接口

直通（passthrough）：

**pass** 直通设备

用户必须指定至少一种设备类型，并且每个类别最多可指定一种设备类型。单个设备类型语句中的多种设备类型必须以逗号分隔，并进行逻辑与（AND）运算。

命令行上可指定任意数量的 `-t` 参数。所有 `-t` 参数进行逻辑或（OR）运算以形成一个匹配表达式，系统中的所有设备都与之比较。任何完全匹配某个 `-t` 参数的设备都将包含在 `iostat` 输出中，最多可达 80 列可显示的设备数量，或用户指定的最大设备数量（`-n`）。

**`-w`** 每次显示之间暂停 `wait` 秒。如果未指定重复次数（`-c`）但指定了等待间隔，默认重复次数为无穷大。如果未指定 `-w` 但指定了重复次数，默认间隔为 1 秒。`iostat` 命令将接受并遵循非整数秒数。注意，间隔仅具有毫秒粒度。更精细的值将被截断。例如，“`-w1.0001`” 与 “`-w1.000`” 相同。该间隔还会受到 `kern.hz` 修改的影响，因此你的实际情况可能有所不同。

**`-x`** 显示扩展磁盘统计信息。每个磁盘单独显示一行，包含所有可用统计信息。如果开启此标志，则仅显示磁盘统计信息，除非同时指定了 `-C` 或 `-T` 以启用 CPU 或 TTY 统计信息的显示。

**`-z`** 如果指定了 `-x`，则省略没有活动的设备行。

`iostat` 工具按以下格式显示信息：

**tty**

**tin** 从终端读取的字符数

**tout** 写入终端的字符数

**devices** 设备操作。该字段的标题是设备名和单元号。`iostat` 工具将显示能放入标准 80 列屏幕的尽可能多的设备，或系统中的最大设备数，取两者中较小者。如果在命令行上指定了 `-n`，`iostat` 将显示所请求数量的设备与系统中最大设备数中较小的一个。要强制 `iostat` 显示特定驱动器，可在命令行上提供其名称。`iostat` 工具不会显示超过 80 列屏幕可容纳的设备数量，除非在命令行上给出 `-n` 参数以指定要显示的最大设备数量。如果命令行上指定的设备数少于 80 列屏幕可容纳的数量，`iostat` 将仅显示指定的设备。

标准的 `iostat` 设备显示包含以下统计信息：

**KB/t** 每次传输的千字节数

**tps** 每秒传输次数

**MB/s** 每秒兆字节数

指定了 `-I` 标志的标准 `iostat` 设备显示包含以下统计信息：

**KB/t** 每次传输的千字节数

**xfrs** 总传输次数

**MB** 传输的总兆字节数

指定了 `-x` 标志的扩展 `iostat` 设备显示包含以下统计信息：

**r/s** 每秒读操作数

**w/s** 每秒写操作数

**kr/s** 每秒读取的千字节数

**kw/s** 每秒写入的千字节数

**qlen** 事务队列长度

**ms/r** 读事务的平均持续时间（毫秒）

**ms/w** 写事务的平均持续时间（毫秒）

**ms/o** 所有其他事务的平均持续时间（毫秒）

**ms/t** 所有事务的平均持续时间（毫秒）

**%b** 设备有一个或多个未完成事务的时间百分比

指定了 `-x` 和 `-I` 标志的扩展 `iostat` 设备显示包含以下统计信息：

**r/i** 每时间段的读操作数

**w/i** 每时间段的写操作数

**kr/i** 每时间段读取的千字节数

**kw/i** 每时间段写入的千字节数

**qlen** 事务队列长度

**tsvc\_t/i** 每时间段事务的总持续时间（秒）

**sb/i** 每时间段设备有一个或多个未完成事务的总时间（秒）

使用 `-o` 的旧式 `iostat` 显示包含以下统计信息：

**sps** 每秒传输的扇区数

**tps** 每秒传输次数

**msps** 每次事务的平均毫秒数

指定了 `-I` 标志的旧式 `iostat` 显示包含以下统计信息：

**blk** 传输的总块/扇区数

**xfr** 总传输次数

**msps** 每次事务的平均毫秒数

**cpu**

**us** 处于用户模式的 CPU 时间百分比

**ni** 处于用户模式运行 niced 进程的 CPU 时间百分比

**sy** 处于系统模式的 CPU 时间百分比

**in** 处于中断模式的 CPU 时间百分比

**id** 处于空闲模式的 CPU 时间百分比

## 文件

**`/boot/kernel/kernel`** 默认内核名称列表。

**`/dev/kmem`** 默认内存文件。

## 实例

```sh
iostat -w 1 da0 da1 cd0
```

每秒显示前两个直接访问设备和第一个 CDROM 设备的统计信息，无限循环。

```sh
iostat -c 2
```

显示系统中前四个设备的统计信息两次，显示间隔为一秒。

```sh
iostat -t da -t cd -w 1
```

每秒显示所有 CDROM 和直接访问设备的统计信息，无限循环。

```sh
iostat -t da,scsi,pass -t cd,scsi,pass
```

为所有提供对直接访问或 CDROM 设备访问的 SCSI 直通设备显示一次统计信息。

```sh
iostat -h -n 8 -w 1
```

每秒显示最多 8 个 I/O 最多的设备，无限循环。

```sh
iostat -dh -t da -w 1
```

省略 TTY 和 CPU 显示，按性能顺序显示设备，并且每秒仅显示直接访问设备，无限循环。

```sh
iostat -Iw 3
```

每三秒显示一次总统计信息，无限循环。

```sh
iostat -odICTw 2 -c 9
```

使用旧式输出格式显示总统计信息 9 次，每次测量/显示之间间隔两秒。`-d` 标志通常会禁用 TTY 和 CPU 显示，但由于给出了 `-T` 和 `-C` 标志，TTY 和 CPU 显示仍将显示。

## 参见

[fstat(1)](/man1/fstat.1.md), [netstat(1)](/man1/netstat.1.md), [nfsstat(1)](/man1/nfsstat.1.md), [ps(1)](/man1/ps.1.md), [systat(1)](/man1/systat.1.md), [devstat(3)](/misc/devstat.3.md), ctlstat(8), gstat(8), pstat(8), [vmstat(8)](/man8/vmstat.8.md)

《Installing and Operating 4.3BSD》中以 “Interpreting system activity” 开头的章节。

## 历史

此版本的 `iostat` 首次出现于 FreeBSD 3.0。

## 作者

Kenneth Merry <ken@FreeBSD.org>

## 缺陷

将 `iostat` 用作崩溃转储的调试工具可能有限，因为目前无法获取仅覆盖崩溃前一段时间的统计信息。

每个 `drives` 参数都会传递给 isdigit()。如果 isdigit() 返回 true，`iostat` 会切换到未记录的传统语法，后续参数（如果有）将不会被解释为驱动器名称。此行为与本手册中记录的行为冲突，并阻止指定以数字开头的驱动器名称。例如，以下命令：

```sh
iostat ada0 ada1 2 3 cd0
```

本文档对 “设备类型”（device type）一词的使用具有误导性。
