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 --help
或man 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 -a
或dstat --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 -c
或dstat --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 -d
或dstat --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 -n
或dstat --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 -m
或dstat --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 -y
或dstat --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 -s
或dstat --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 -p
或dstat --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 -t
或dstat --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命令可以用来监控系统性能和资源,例如:
- iostat命令:用来显示CPU和磁盘I/O的统计信息,包括每个设备的读写速度、传输速率、服务时间等。
- vmstat命令:用来显示虚拟内存、进程、页面交换和CPU活动的统计信息,包括每秒的页面换入换出次数、进程状态、系统负载等。
- netstat命令:用来显示网络连接、路由表、接口状态、多播成员等网络相关的统计信息,包括每个协议的连接数、每个端口的状态、每个接口的流量等。
- nfsstat命令:用来显示NFS客户端和服务器的统计信息,包括每个版本的NFS操作数、每个RPC调用的时间、每个NFS文件系统的挂载情况等。
- ifstat命令:用来显示每个网络接口的统计信息,包括每秒的接收和发送速率、每个接口的错误数、每个接口的队列长度等。
评论区