四款常用服务器IO测试工具详细分析

2023-09-07 17:59:21 浏览数 (2)

1、Top

top是一个常用的性能监控工具,可以用来实时查看系统资源的使用情况,包括CPU、内存、进程等信息,是Linux系统中常用的一种命令行工具。通过top可以查看系统当前的状态,并且可以对各种系统资源进行监控和管理。

top使用方法

top的使用方法很简单,只需要在终端输入top命令即可。默认情况下,top会以交互式的方式显示当前系统资源的使用情况,可以通过键盘输入不同的命令来进行操作。

top命令的一些常用选项:

  • -d:指定更新的时间间隔,默认是3秒。
  • -p:指定要监控的进程PID。
  • -u:指定要监控的用户。
  • -b:以批处理模式运行,输出到文件或者管道中。

top命令交互模式中,可以使用以下命令:

  • h:显示帮助信息。
  • k:向指定的进程发送信号。
  • q:退出top命令。
  • r:修改进程的优先级。
  • s:修改更新的时间间隔。
  • u:指定要监控的用户。
  • z:切换颜色显示。

top命令实例

例1:监视系统资源的实时变化

代码语言:javascript复制
$ top

执行上述命令后,top会实时地显示系统资源的变化情况。默认情况下,top会按照CPU使用率从高到低的顺序显示进程信息。可以通过按下不同的键来进行排序、筛选等操作。例如:

  • 按下M键,可以按照内存使用率从高到低的顺序排序;
  • 按下P键,可以按照CPU使用率从高到低的顺序排序;
  • 按下T键,可以按照进程运行时间从长到短的顺序排序;
  • 按下Q键,可以退出top命令。
代码语言:javascript复制
top - 15:27:14 up 2 days, 20:39,  2 users,  load average: 0.13, 0.13, 0.12
Tasks: 258 total,   1 running, 257 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15708.3 total,   8288.5 free,   4277.1 used,   4142.7 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  10642.4 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME  COMMAND                                                                                          
 5205 user1     20   0  676100 159372  32720 S  0.3  1.0   0:01.38 gnome-terminal-                                                                                  
 5157 user1     20   0 1744132 616516  25996 S  0.0  3.9   0:58.07 firefox                                                                                          
 3974 user1     20   0 1238404  60724  48344 S  0.0  0.4   0:02.46 gnome-shell                                                                                      
 4272 user1     20   0  684672  38264  30292 S  0.0  0.2   0:00.31 gvfsd-metadata                                                                                   
 5631 user1     20   0  921356  34568  24940 S  0.0  0.2   0:00.21 gnome-system-mo                                                                                  
 5663 user1     20   0  921352  36576  23320 S  0.0  0.2   0:00.09 gnome-system-mo                                                                                  
 4386 user1     20   0  446596  27920  23156 S  0.0  0.2   0:00.28 at-spi-bus-laun                                                                                  
 5167 user1     20   0  916320

例2:按照内存使用率排序并显示前10个进程

代码语言:javascript复制
$ top -o %MEM -n 10

执行上述命令后,top会按照内存使用率从高到低的顺序显示前10个进程的信息。-o参数用来指定排序方式,%MEM表示按照内存使用率排序。-n参数用来指定显示的进程数。

代码语言:javascript复制
top - 15:22:26 up 2 days, 20:35,  2 users,  load average: 0.06, 0.06, 0.05
Tasks: 254 total,   1 running, 253 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15708.3 total,   8340.8 free,   4212.7 used,   4154.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  10636.7 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME  COMMAND                                                                                          
 5157 user1     20   0 1744132 616516  25996 S  0.0  3.9   0:57.97 firefox                                                                                          
 3997 root      20   0  441580 348416 345972 S  0.0  2.2   0:12.48 Xorg                                                                                             
 5205 user1     20   0  676100 159372  32720 S  0.3  1.0   0:01.38 gnome-terminal-                                                                                  
 3974 user1     20   0 1238404  60724  48344 S  0.0  0.4   0:02.45 gnome-shell                                                                                      
 5663 user1     20   0  921352  36576  23320 S  0.0  0.2   0:00.09 gnome-system-mo                                                                                  
 5167 user1     20   0  916320  27592  22976 S  0.0  0.2   0:00.08 Web Content                                                                                      
 5694 user1     20   0  920660  26300  22060 S  0.0  0.2   0:00.04 gnome-calendar                                                                                   
 4963 user1     20   0  921356  22096  14384 S  0.0  0.1   0:05.91 tmux                                                                                             
 4317 root      20   0   83196  16612  10956 S  0.0  0.1  17:38.92 sshd                                                                                             

2、sar

sar(System Activity Reporter)是一个系统性能监控工具,它可以收集系统的各种性能数据,并将其保存到文件中,以便日后进行分析。sar可以用来监控CPU、内存、I/O等系统资源的使用情况,以及进程的运行情况等。

安装

在大多数Linux系统中,sar工具已经预装了,如果没有,可以使用以下命令安装:

代码语言:javascript复制
$ sudo apt-get install sysstat

使用方法

以下是常用的sar命令及其参数:

代码语言:javascript复制
sar [options] [interval [count]]

其中,options表示sar的参数,interval表示每次采集数据的时间间隔(以秒为单位),count表示采集数据的次数。

下面是一些常用的选项:

  • -u:监视CPU使用情况
  • -r:监视内存使用情况
  • -b:监视I/O使用情况
  • -n:监视网络使用情况
  • -q:监视进程队列的长度

下面是一些示例命令:

例1:监视CPU使用率

代码语言:javascript复制
$ sar -u 1 3

执行上述命令后,sar会每秒采集一次CPU的使用情况,共采集3次数据,并将数据输出到终端上。输出的结果包括CPU的平均使用率、用户空间占用率、内核空间占用率、等待I/O的占用率、硬件中断占用率、软件中断占用率等信息。

下面是一段示例输出:

代码语言:javascript复制
Linux 4.15.0-140-generic (hostname)  05/10/23        _x86_64_        (4 CPU)

06:09:12 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:09:13 PM     all      2.01      0.00      0.50      0.00      0.00     97.49
06:09:14 PM     all      2.50      0.00      0.50      0.00      0.00     97.00
06:09:15 PM     all      2.50      0.00      0.50      0.00      0.00     97.00
Average:        all      2.34      0.00      0.50      0.00      0.00     97.16

输出的结果显示了每一秒的CPU使用率,包括用户空间、内核空间、等待I/O等的占用率。

例2:监视内存使用情况

代码语言:javascript复制
$ sar -r 1 3

执行上述命令后,sar会每秒采集一次内存的使用情况,共采集3次数据,并将数据输出到终端上。输出的结果包括内存的平均使用率、空闲内存、已用内存、缓存、缓冲区等信息。

下面是一段示例输出:

代码语言:javascript复制
Linux 4.15.0-140-generic (hostname)  05/10/23        _x86_64_        (4 CPU)

06:14:16 PM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
06:14:17 PM  10443024  10514852  29642808     74.04    101448  16422880   9012316     22.45  18088252  10544208       292
06:14:18 PM  10446192  10518020  29636140     74.02    101460  16422624   9012316     22.45  18088300  10538456       296
06:14:19 PM  10448980  10520708  29633352     74.01    101468  16422484   9012316     22.45   9342200  18794460       292
Average:     10446065  10517860  29637400     74.02    101459  16422629   9012316     22.45  11726234  13259074       293

输出的结果显示了每一秒的内存使用情况,包括空闲内存、已用内存、缓存、缓冲区等信息。%memused表示内存的使用率。

例3:监视磁盘I/O使用情况

代码语言:javascript复制
$ sar -b 1 3

执行上述命令后,sar会每秒采集一次磁盘I/O的使用情况,共采集3次数据,并将数据输出到终端上。输出的结果包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。

下面是一段示例输出:

代码语言:javascript复制
Linux 4.15.0-140-generic (hostname)  05/10/23        _x86_64_        (4 CPU)

06:19:54 PM       tps      rtps      wtps   bread/s   bwrtn/s
06:19:55 PM      0.00      0.00      0.00      0.00      0.00
06:19:56 PM      0.00      0.00      0.00      0.00      0.00
06:19:57 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00

输出的结果显示了每一秒的磁盘I/O使用情况,包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。tps表示每秒钟的I/O请求数,rtps表示每秒钟的读请求数,wtps表示每秒钟的写请求数,bread/s表示每秒钟读取的字节数,bwrtn/s表示每秒钟写入的字节数。

3、iostat

当系统中的进程需要与磁盘进行交互时,就需要监控磁盘I/O的使用情况。iostat是一个用于监控系统磁盘I/O情况的命令行工具,可以显示磁盘I/O活动、CPU使用情况、内存使用情况等信息。

使用方法

iostat命令的一般形式为:

代码语言:javascript复制
iostat [options] [interval] [count]

其中,interval参数指定了数据采样的时间间隔,count参数指定了采样的次数。

iostat命令支持的选项包括:

  • -c:显示CPU使用情况。
  • -d:显示磁盘使用情况。
  • -k:以KB为单位显示信息。
  • -m:以MB为单位显示信息。
  • -N:显示NFS挂载点的I/O统计信息。
  • -t:显示每个时间段的平均值。

使用示例

示例1:监视磁盘I/O使用情况
代码语言:javascript复制
$ iostat -d 1 3

执行上述命令后,iostat会每秒采集一次磁盘I/O的使用情况,共采集3次数据,并将数据输出到终端上。输出的结果包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。

下面是一段示例输出:

代码语言:javascript复制
Linux 4.15.0-140-generic (hostname)  05/10/23        _x86_64_        (4 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               0.04         1.09         0.00         0.00        848          0          0
nvme0n1           0.02         0.02         0.00         0.00         18          0          0

输出的结果显示了每一秒的磁盘I/O使用情况,包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。

示例2:以KB为单位显示磁盘I/O使用情况
代码语言:javascript复制
$ iostat -dk 1 3

执行上述命令后,iostat会每秒采集一次磁盘I/O的使用情况,共采集3次数据,并将数据输出到终端上。使用选项-dk表示以KB为单位显示磁盘I/O使用情况。输出的结果包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。

下面是一段示例输出:

代码语言:javascript复制
Linux 4.15.0-140-generic (hostname)  05/10/23        _x86_64_        (4 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
sda               0.02         0.08         0.00         0.00         0          0          0
nvme0n1           0.00         0.00         0.00         0.00         0          0          0

输出的结果显示了每一秒的磁盘I/O使用情况,包括每秒读写数据的数量、每秒读写数据的大小、平均每次读写的大小、读写延迟等信息。其中,kB_read/s表示每秒读取的数据量,kB_wrtn/s表示每秒写入的数据量。使用了-k选项后,这两个数据会以KB为单位显示。

4、vmstat

vmstat是一款用于显示系统虚拟内存、进程、CPU等性能指标的工具。下面是详细的使用方法和示例。

使用方法
代码语言:javascript复制
vmstat [选项] [时间间隔] [采样次数]

常用选项如下:

  • -a:显示所有指标(默认只显示内存、虚拟内存和CPU的指标)
  • -f:显示fork信息,即每秒创建的进程数
  • -m:显示内存和虚拟内存的详细信息
  • -p <进程ID>:显示指定进程的详细信息
  • -s:显示系统启动以来的虚拟内存和内存使用情况
  • -d:显示磁盘I/O指标

时间间隔和采样次数是可选的。如果不指定,则默认显示一次性的指标。如果指定了时间间隔,则每隔指定的时间间隔会采集一次数据,并在终端输出一行数据;如果指定了采样次数,则会采集指定次数的数据,并在终端输出每次的数据。

示例1:
代码语言:javascript复制
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  48068 300232  42796 400224    0    0     0     0    3   10  3  1 96  0  0

其中,各个字段的含义如下:

  • r:等待运行的进程数。
  • b:处于不可中断(blocked)状态的进程数。
  • swpd:交换分区使用情况,单位是KB。
  • free:空闲内存大小,单位是KB。
  • buff:缓冲区大小,单位是KB。
  • cache:缓存大小,单位是KB。
  • si:从磁盘交换分区读取的数据大小,单位是KB/s。
  • so:向磁盘交换分区写入的数据大小,单位是KB/s。
  • bi:从块设备读取的数据大小,单位是KB/s。
  • bo:向块设备写入的数据大小,单位是KB/s。
  • in:每秒中断数。
  • cs:每秒上下文切换次数。
  • us:每秒用户进程的CPU时间占用。
  • sy:每秒内核进程的CPU时间占用。
  • id:每秒空闲CPU时间占用百分比。
  • wa:每秒等待I/O的CPU时间占用。
  • st:每秒被虚拟化层偷走的CPU时间占用。

可以看到,输出结果中显示了各种系统性能指标,包括CPU占用率、内存使用情况、磁盘I/O、中断数和上下文切换次数等。

示例2:

代码语言:javascript复制
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 18442672 149188 1246844    0    0     0     0 3032 3458 12  5 83  0  0
 0  0      0 18442220 149188 1246852    0    0     0    36 1936 4029 10  5 85  0  0
 1  0      0 18442220 149188 1246852    0    0     0     0 2073 3306 11  4 85  0  0
 0  0      0 18442708 149188 1246852    0    0     0     0 2298 3533 12  5 83  0  0

在这个示例中,我们使用了 vmstat 1 命令,表示每隔1秒钟输出一次系统性能指标。可以看到,输出结果中显示了各种系统性能指标,包括CPU占用率、内存使用情况、磁盘I/O、中断数和上下文切换次数等。其中,各个字段的含义如下:

  • r:等待运行的进程数。
  • b:处于不可中断(blocked)状态的进程数。
  • swpd:交换分区使用情况,单位是KB。
  • free:空闲内存大小,单位是KB。
  • buff:缓冲区大小,单位是KB。
  • cache:缓存大小,单位是KB。
  • si:从磁盘交换分区读取的数据大小,单位是KB/s。
  • so:向磁盘交换分区写入的数据大小,单位是KB/s。
  • bi:从块设备读取的数据大小,单位是KB/s。
  • bo:向块设备写入的数据大小,单位是KB/s。
  • in:每秒中断数。
  • cs:每秒上下文切换次数。
  • us:每秒用户进程的CPU时间占用。
  • sy:每秒内核进程的CPU时间占用。
  • id:每秒空闲CPU时间占用百分比。
  • wa:每秒等待I/O的CPU时间占用。
  • st:每秒被虚拟化层偷走的CPU时间占用。

在这个示例中,我们可以观察到每秒钟系统性能指标的变化情况,以及系统的负载情况。

0 人点赞