操作系统性能监测工具
一、vmstat
vmstat
(virtual memory statistics
) 提供有关系统的虚拟内存、进程、CPU 活动、I/O 以及其他系统资源的实时统计信息。
vmstat
命令有多种选项,可以用来指定输出的内容和格式,帮助你更精确地监控和分析系统性能。以下是常见的 vmstat
选项及其功能:
1. 基本用法
1 |
|
delay
:每隔多少秒刷新一次输出。如果不指定,默认显示一次输出。count
:显示多少次输出。如果不指定,则无限次输出,直到用户终止命令。
2. 常见选项
-a
(active/inactive 内存):
显示活动(active)和非活动(inactive)内存信息,增加了active
和inactive
列。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 |
|
vmstat
的输出包括多个列,每列代表不同的系统指标。以下是常见的列及其含义:
1 |
|
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)占用的时间。
us
和sy
合计表示 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 |
|
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
2iostat -k
iostat -m-x
(扩展 I/O 统计信息):
显示更详细的设备 I/O 统计信息,包括平均队列长度、平均服务时间、设备利用率等。1
iostat -x
-p [device]
(显示分区统计信息):
显示指定设备的分区统计信息。如果未指定设备,则显示所有设备的分区统计信息。1
2iostat -p sda
iostat -p**
-t
或-z
(显示时间戳):
使用-t
选项在每行输出前面添加时间戳,使用-z
选项则隐藏所有值为零的设备(减少无用信息)。1
2iostat -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
8Linux 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
5iostat -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.00sda
设备分析:r/s
和w/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
iostat
是 sysstat
软件包的一部分,因此安装sysstat
包即可
1 |
|