侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux dstat命令教程:如何监控系统资源的使用情况(附实例详解和注意事项)

Linux dstat命令介绍

dstat命令是一个用来替代vmstat、iostat、netstat、nfsstat和ifstat等命令的通用工具,它可以显示关于系统资源的统计信息,如CPU使用率、磁盘IO、网络流量、内存使用、进程数量等。dstat命令的全称是Dstat: Versatile resource statistics tool,它的特点是可以自定义输出的列,以及支持插件扩展。dstat命令可以帮助系统管理员监控系统性能,分析系统瓶颈,优化系统配置。

Linux dstat命令适用的Linux版本

dstat命令可以在大多数Linux发行版中使用,如Ubuntu、Debian、Fedora、CentOS等。如果系统中没有安装dstat命令,可以通过以下方式安装:

  • Ubuntu/Debian: 使用apt-get install dstat命令安装。
  • Fedora/CentOS: 使用yum install dstat命令安装。
  • CentOS 8: 使用dnf install dstat命令安装。

安装命令的示例:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install dstat
[sudo] password for linux: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  dstat
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 68.9 kB of archives.
After this operation, 287 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 dstat all 0.7.4-1 [68.9 kB]
Fetched 68.9 kB in 1s (96.9 kB/s)        
Selecting previously unselected package dstat.
(Reading database ... 215377 files and directories currently installed.)
Preparing to unpack .../dstat_0.7.4-1_all.deb ...
Unpacking dstat (0.7.4-1) ...
Setting up dstat (0.7.4-1) ...
Processing triggers for man-db (2.9.1-1) ...

Linux dstat命令的基本语法

dstat命令的基本语法格式如下:

dstat [options] [delay [count]]

其中,options是指定输出的列和其他设置的选项,delay是指定每次刷新的间隔时间(单位为秒),count是指定刷新的次数。如果不指定delay和count,dstat命令会每隔1秒刷新一次,直到按下Ctrl+C结束。

Linux dstat命令的常用选项或参数说明

dstat命令有很多选项和参数,可以用dstat --helpman dstat查看详细的说明。这里列举一些常用的选项和参数:

选项/参数说明
-a, --all等同于-cdngy选项的组合,显示所有默认的系统资源统计信息
-c, --cpu显示CPU相关的统计信息,包括usr(用户占用CPU的百分比)、sys(系统占用CPU的百分比)、idl(CPU空闲的百分比)、wai(等待IO的百分比)、hiq(处理硬件中断的百分比)、siq(处理软件中断的百分比)
-d, --disk显示磁盘相关的统计信息,包括read(每秒读取的数据量,单位为kB)、writ(每秒写入的数据量,单位为kB)
-g, --page显示内存分页相关的统计信息,包括in(每秒发生的内存换入次数)、out(每秒发生的内存换出次数)
-i, --int显示每秒发生的中断次数
-l, --load显示系统负载相关的统计信息,包括1m(过去1分钟的平均负载)、5m(过去5分钟的平均负载)、15m(过去15分钟的平均负载)
-m, --mem显示内存相关的统计信息,包括used(已使用的内存量,单位为MB)、buff(用作缓冲的内存量,单位为MB)、cach(用作缓存的内存量,单位为MB)、free(空闲的内存量,单位为MB)
-n, --net显示网络相关的统计信息,包括recv(每秒接收的数据量,单位为kB)、send(每秒发送的数据量,单位为kB)
-p, --proc显示进程相关的统计信息,包括run(正在运行的进程数量)、blk(被阻塞的进程数量)、new(每秒创建的进程数量)
-s, --swap显示交换分区相关的统计信息,包括used(已使用的交换分区量,单位为MB)、free(空闲的交换分区量,单位为MB)
-t, --time显示当前的日期和时间
-y, --sys显示系统相关的统计信息,包括int(每秒发生的中断次数)、csw(每秒发生的上下文切换次数)
--aio显示异步IO相关的统计信息,包括in(每秒完成的IO请求数)、out(每秒发出的IO请求数)
--fs显示文件系统相关的统计信息,包括files(打开的文件数量)、inodes(分配的索引节点数量)
--ipc显示进程间通信相关的统计信息,包括msg(消息队列的数量)、sem(信号量的数量)、shm(共享内存的数量)
--lock显示文件锁相关的统计信息,包括posix(POSIX文件锁的数量)、flock(文件锁的数量)、read(读锁的数量)、write(写锁的数量)
--raw显示原始的数值,而不是百分比或单位
--tcp显示TCP连接相关的统计信息,包括active(每秒主动发起的TCP连接数量)、passive(每秒被动接受的TCP连接数量)、iseg(每秒接收的TCP段数量)、oseg(每秒发送的TCP段数量)
--udp显示UDP数据报相关的统计信息,包括idgm(每秒接收的UDP数据报数量)、odgm(每秒发送的UDP数据报数量)、noport(每秒发送到无效端口的UDP数据报数量)、idmer(每秒接收到的错误的UDP数据报数量)
--vm显示虚拟内存相关的统计信息,包括nr_dirty(脏页的数量)、nr_writeback(等待回写的脏页的数量)、nr_unstable(不稳定的页的数量)、nr_page_table_pages(页表页的数量)、nr_mapped(映射页的数量)、nr_slab(slab分配器使用的页的数量)

Linux dstat命令的实例

实例1:使用dstat命令显示所有默认的系统资源统计信息

使用dstat -adstat --all命令,可以显示所有默认的系统资源统计信息,包括CPU、磁盘、网络、内存、分页、系统等。这相当于使用dstat -cdngy命令。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -a
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  1   1  98   0   0   0|  10k   12k|   0     0 |   0     0 |  77   109 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  66    93 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  68    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  67    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  68    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  67    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  68    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  67    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  68    94 
  0   0 100   0   0   0|   0     0 |  60B   60B|   0     0 |  67    94 

从输出中可以看到,每一列的第一行是列的名称,每一行的第一列是时间,每隔1秒刷新一次。如果想要改变刷新的间隔和次数,可以在命令后面加上delay和count参数,例如dstat -a 5 10表示每隔5秒刷新一次,总共刷新10次。

实例2:使用dstat命令显示CPU相关的统计信息

使用dstat -cdstat --cpu命令,可以显示CPU相关的统计信息,包括usr、sys、idl、wai、hiq、siq等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
  1   1  98   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0
  0   0 100   0   0   0

从输出中可以看到,CPU的使用率主要由用户占用(usr)、系统占用(sys)、空闲(idl)、等待IO(wai)、处理硬件中断(hiq)和处理软件中断(siq)组成。这些百分比的总和应该接近100%。如果想要显示每个CPU核心的使用率,可以使用-C--cpu-adv选项,例如dstat -C 0,1表示显示CPU0和CPU1的使用率。

实例3:使用dstat命令显示磁盘相关的统计信息

使用dstat -ddstat --disk命令,可以显示磁盘相关的统计信息,包括read和writ等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -d
-dsk/total-
 read  writ
  10k   12k
   0     0 
   0     0 
   0     0 
   0     0 
   0     0 
   0     0 
   0     0 
   0     0 
   0     0 

从输出中可以看到,磁盘的读写速度是以每秒的数据量(单位为kB)来表示的。如果想要显示每个磁盘设备的读写速度,可以使用-D--disk-adv选项,例如dstat -D sda,sdb表示显示sda和sdb两个磁盘设备的读写速度。

实例4:使用dstat命令显示网络相关的统计信息

使用dstat -ndstat --net命令,可以显示网络相关的统计信息,包括recv和send等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -n
-net/total-
 recv  send
   0     0 
  60B   60B
  60B   60B
  60B   60B
  60B   60B
  60B   60B
  60B   60B
  60B   60B
  60B   60B
  60B   60B

从输出中可以看到,网络的接收和发送速度是以每秒的数据量(单位为kB)来表示的。如果想要显示每个网络接口的接收和发送速度,可以使用-N--net-adv选项,例如dstat -N eth0,eth1表示显示eth0和eth1两个网络接口的接收和发送速度。

实例5:使用dstat命令显示内存相关的统计信息

使用dstat -mdstat --mem命令,可以显示内存相关的统计信息,包括used、buff、cach和free等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -m
----memory-usage----
 used  buff  cach  free
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G
  66M  1.0M  1.1G  2.8G

从输出中可以看到,内存的使用量是以MB为单位来表示的。其中,used表示已使用的内存量,buff表示用作缓冲的内存量,cach表示用作缓存的内存量,free表示空闲的内存量。如果想要显示内存的使用率,可以使用-g--page选项,例如dstat -g表示显示内存的分页信息,包括in和out等。

实例6:使用dstat命令显示系统相关的统计信息

使用dstat -ydstat --sys命令,可以显示系统相关的统计信息,包括int和csw等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -y
---system--
 int   csw 
  77   109 
  66    93 
  68    94 
  67    94 
  68    94 
  67    94 
  68    94 
  67    94 
  68    94 
  67    94 

从输出中可以看到,系统的统计信息是以每秒的次数来表示的。其中,int表示每秒发生的中断次数,csw表示每秒发生的上下文切换次数。如果想要显示系统的负载信息,可以使用-l--load选项,例如dstat -l表示显示系统的负载信息,包括1m、5m和15m等。

实例7:使用dstat命令显示交换分区相关的统计信息

使用dstat -sdstat --swap命令,可以显示交换分区相关的统计信息,包括used和free等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -s
--swap--
 used  free
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G
   0   3.9G

从输出中可以看到,交换分区的使用量是以MB为单位来表示的。其中,used表示已使用的交换分区量,free表示空闲的交换分区量。如果想要显示交换分区的使用率,可以使用-g--page选项,例如dstat -g表示显示内存的分页信息,包括in和out等。

实例8:使用dstat命令显示进程相关的统计信息

使用dstat -pdstat --proc命令,可以显示进程相关的统计信息,包括run、blk和new等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -p
--procs--
run blk new
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0
  0   0   0

从输出中可以看到,进程的统计信息是以每秒的次数来表示的。其中,run表示正在运行的进程数量,blk表示被阻塞的进程数量,new表示每秒创建的进程数量。如果想要显示进程的状态信息,可以使用-P--proc-adv选项,例如dstat -P 1,2表示显示进程1和进程2的状态信息,包括cpu、mem、read、writ等。

实例9:使用dstat命令显示当前的日期和时间

使用dstat -tdstat --time命令,可以显示当前的日期和时间。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat -t
----system----
     time     
25-12 17:14:41
25-12 17:14:42
25-12 17:14:43
25-12 17:14:44
25-12 17:14:45
25-12 17:14:46
25-12 17:14:47
25-12 17:14:48
25-12 17:14:49
25-12 17:14:50

从输出中可以看到,当前的日期和时间是以dd-mm hh:mm:ss的格式来表示的。如果想要显示当前的纪元时间,可以使用-T--epoch选项,例如dstat -T表示显示当前的纪元时间,即从1970年1月1日开始的秒数。

实例10:使用dstat命令显示异步IO相关的统计信息

使用dstat --aio命令,可以显示异步IO相关的统计信息,包括in和out等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat --aio
--aio/total-
 in  out 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 
  0    0 

从输出中可以看到,异步IO的统计信息是以每秒的次数来表示的。其中,in表示每秒完成的IO请求数,out表示每秒发出的IO请求数。如果想要显示每个异步IO设备的统计信息,可以使用--aio-adv选项,例如dstat --aio-adv aio0,aio1表示显示aio0和aio1两个异步IO设备的统计信息。

实例11:使用dstat命令显示文件系统相关的统计信息

使用dstat --fs命令,可以显示文件系统相关的统计信息,包括files和inodes等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat --fs
--filesystem--
files inodes
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%
  320   0.1%

从输出中可以看到,文件系统的统计信息是以数量和百分比来表示的。其中,files表示打开的文件数量,inodes表示分配的索引节点数量。如果想要显示每个文件系统的统计信息,可以使用--fs-adv选项,例如dstat --fs-adv /,/home表示显示根目录和/home目录的文件系统的统计信息。

实例12:使用dstat命令显示进程间通信相关的统计信息

使用dstat --ipc命令,可以显示进程间通信相关的统计信息,包括msg、sem和shm等。命令的输出如下:

[linux@bashcommandnotfound.cn ~]$ dstat --ipc
--interprocess-communication--
 msg  sem  shm 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 
   0    0    0 

从输出中可以看到,进程间通信的统计信息是以每秒的次数来表示的。其中,msg表示消息队列的数量,sem表示信号量的数量,shm表示共享内存的数量。如果想要显示每个进程间通信设备的统计信息,可以使用--ipc-adv选项,例如dstat --ipc-adv ipc0,ipc1表示显示ipc0和ipc1两个进程间通信设备的统计信息。

Linux dstat命令的注意事项

  • dstat命令的输出是实时的,因此可能会有一些波动和误差,不一定能反映系统的真实情况。
  • dstat命令的选项和参数可以组合使用,例如dstat -cdm表示显示CPU、磁盘和内存的统计信息。但是,如果选项和参数的数量过多,可能会导致输出的列超过屏幕的宽度,导致显示不完整或混乱。可以使用--output选项将输出重定向到一个文件中,例如dstat -cdm --output dstat.csv表示将输出保存到dstat.csv文件中,该文件是以逗号分隔的格式。
  • dstat命令支持插件机制,可以通过编写Python脚本来扩展dstat命令的功能,例如显示温度、电池、进程名等信息。可以使用--list选项查看可用的插件,例如dstat --list表示显示所有的插件。可以使用--plugin-name选项来使用插件,例如dstat --top-cpu表示显示占用CPU最多的进程的信息。
  • 如果系统中没有安装dstat命令,执行dstat命令时会提示bash: dstat: command not found,这时可以根据不同的Linux发行版使用不同的安装命令来安装dstat命令,如前文所述。

Linux dstat命令相关命令

除了dstat命令,还有一些其他的Linux命令可以用来监控系统性能和资源,例如:

0

评论区