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
命令。
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
参数用来指定显示的进程数。
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
工具已经预装了,如果没有,可以使用以下命令安装:
$ sudo apt-get install sysstat
使用方法
以下是常用的sar
命令及其参数:
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
命令的一般形式为:
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时间占用。
在这个示例中,我们可以观察到每秒钟系统性能指标的变化情况,以及系统的负载情况。