Linux系统提供了一套方便的命令,可以帮助您查看磁盘的繁忙程度,而不仅仅是有多满。 在这篇文章中,我们将研究五个非常有用的命令来查看磁盘活动。 可能必须将两个命令(iostat和ioping)添加到您的系统中,这两个命令要求您使用sudo权限,但所有五个命令都提供了查看磁盘活动的有用方法。
可能这些命令中最容易和最明显的一个是dstat。
dstat
尽管dstat命令以字母“d”开头,但它提供的数据不仅仅是磁盘活动。 如果要仅查看磁盘活动,可以使用-d选项。 如下所示,您将获得连续的磁盘读/写测量列表,直到您使用^ c停止显示。 请注意,在第一个报告之后,显示中的每个后续行将在以下时间间隔内报告磁盘活动,默认值仅为一秒。
558idc@558idc:~/www.558idc.com/自由互联$ dstat -d
-dsk/total-
read writ
346k 307k
0 0
0 0
0 44k
520k 0
128k 324k
244k 0
924k 376k
256k 0
在-d选项后面加一个数字会将间隔设置为该秒数。
558idc@558idc:~/www.558idc.com/自由互联$ dstat -d 10
-dsk/total-
read writ
344k 306k
7782B 2048B
354k 300k
4096B 98k
2458B 9421B
9557B 132k
注意,报告的数据可以以许多不同的单位显示 - 例如,M(兆字节),k(千字节)和B(字节)。
如果没有选项,dstat命令也会向您显示许多其他信息 - 指示CPU如何花费时间,显示网络和分页活动,以及报告中断和上下文切换。
558idc@558idc:~/www.558idc.com/自由互联$ dstat
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
5 2 93 0 0| 341k 303k| 0 0 |6755B 41k| 140 548
3 1 96 0 0| 0 0 | 0 0 | 0 0 | 202 731
5 3 91 1 0| 0 48k| 0 0 | 0 0 | 262 782
31 9 60 0 0| 0 0 | 0 0 | 0 0 | 555 1882
41 13 44 3 0|6600k 0 | 0 0 | 0 0 | 444 2309
73 23 0 3 0|6408k 716k| 0 0 | 0 0 | 787 2629
dstat命令提供了对整体Linux系统性能的宝贵见解,几乎用一组结合其功能的灵活而强大的命令取代了vmstat,netstat,iostat和ifstat等旧工具的集合。 有关dstat命令可以提供的其他信息的更多信息,请参阅dstat命令上的这篇文章。
iostat
iostat命令通过观察设备相对于其平均传输速率的活动时间来帮助监视系统输入/输出设备负载。 它有时用于评估磁盘之间的活动平衡。
558idc@558idc:~/www.558idc.com/自由互联$ iostat
Linux 4.20.0-042000-generic (558idc) 2018年12月29日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.76 0.10 2.00 0.17 0.00 92.97
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.01 0.06 0.00 680 0
loop1 0.03 0.19 0.00 2291 0
loop2 0.01 0.02 0.00 219 0
loop3 0.04 0.18 0.00 2215 0
loop4 0.04 0.19 0.00 2256 0
loop5 0.01 0.02 0.00 220 0
loop6 0.01 0.02 0.00 228 0
当然,当您只想专注于磁盘时,Linux环路设备上提供的所有统计信息都会使显示混乱。 但是,该命令提供了-p选项,允许您只查看磁盘 - 如下面的命令所示。
558idc@558idc:~/www.558idc.com/自由互联$ iostat -p sda
Linux 4.20.0-042000-generic (558idc) 2018年12月29日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.76 0.12 2.00 0.17 0.00 92.95
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.59 322.89 310.22 3942493 3787784
sda1 16.58 322.64 310.22 3939409 3787784
请注意,tps指的是每秒传输次数。
您也可以通过iostat提供重复报告。 在下面的示例中,我们使用-d选项每五秒进行一次测量。
558idc@558idc:~/www.558idc.com/自由互联$ iostat -p sda -d 5
Linux 4.20.0-042000-generic (558idc) 2018年12月29日 _x86_64_ (1 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 16.55 321.79 309.15 3944097 3789224
sda1 16.54 321.54 309.15 3941013 3789224
如果您希望省略第一个(启动后的统计信息)报告,请在命令中添加-y。
558idc@558idc:~/www.558idc.com/自由互联$ iostat -p sda -d 5 -y
Linux 4.20.0-042000-generic (558idc) 2018年12月29日 _x86_64_ (1 CPU)
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.64 0.00 10.19 0 48
sda1 0.64 0.00 10.19 0 48
如果是两个磁盘,可以看看第二个磁盘驱动器,命令如下:
558idc@558idc:~/www.558idc.com/自由互联$ iostat -p sdb
iotop
iotop命令是用于查看磁盘I/O的顶级实用程序。 它收集Linux内核提供的I/O使用信息,以便您了解哪些进程在磁盘I/O方面最苛刻。 在下面的示例中,循环时间已设置为5秒。 显示屏将自动更新,覆盖以前的输出。
558idc@558idc:~/www.558idc.com/自由互联$ sudo iotop -d 5
Total DISK READ : 0.00 B/s | Total DISK WRITE : 3.18 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 7.95 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
389 be/3 root 0.00 B/s 3.18 K/s 0.00 % 0.01 % [jbd2/sda1-8]
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init splash
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_gp]
4 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [rcu_par_gp]
6 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/~-kblockd]
8 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [mm_percpu_wq]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
ioping
ioping命令是一种完全不同类型的工具,但它可以报告磁盘延迟 - 磁盘响应请求所需的时间 - 并且可以帮助诊断磁盘问题。
558idc@558idc:~/www.558idc.com/自由互联$ sudo ioping /dev/sda1
[sudo] 558idc 的密码:
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=1 time=937.0 us (warmup)
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=2 time=5.90 ms
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=3 time=3.94 ms
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=4 time=3.88 ms
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=5 time=6.37 ms
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=6 time=5.72 ms
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=7 time=958.4 us (fast)
4 KiB <<< /dev/sda1 (block device 30.0 GiB): request=8 time=93.3 us (fast)
atop
atop命令和top一样,提供了很多关于系统性能的信息,包括一些关于磁盘活动的统计信息。
558idc@558idc:~/www.558idc.com/自由互联$ atop
ATOP - 558idc 2018/12/29 13:57:54 -------------- 10s elapsed
PRC | sys 2.05s | user 1.93s | #proc 337 | #zombie 1 | #exit 12 |
CPU | sys 9% | user 22% | irq 0% | idle 68% | wait 0% |
CPL | avg1 0.55 | avg5 0.24 | avg15 0.13 | csw 25241 | intr 4509 |
MEM | tot 2.8G | free 128.9M | cache 840.2M | buff 123.1M | slab 191.8M |
SWP | tot 1.4G | free 1.0G | | vmcom 5.2G | vmlim 2.8G |
PAG | scan 6661 | steal 5565 | stall 0 | swin 6 | swout 123 |
DSK | sda | busy 112% | read 71 | write 134 | avio 46.2 ms |
NET | transport | tcpi 390 | tcpo 370 | udpi 104 | udpo 104 |
NET | network | ipi 494 | ipo 474 | ipfrw 0 | deliv 494 |
NET | ens33 0% | pcki 753 | pcko 402 | si 614 Kbps | so 43 Kbps |
NET | lo ---- | pcki 72 | pcko 72 | si 4 Kbps | so 4 Kbps |
如果您只想查看磁盘统计信息,可以使用以下命令轻松管理:
558idc@558idc:~/www.558idc.com/自由互联$ atop | grep DSK
DSK | sda | busy 100% | read 163221 | write 43826 | avio 63.9 ms |
DSK | sda | busy 86% | read 12 | write 77 | avio 93.7 ms |
DSK | sda | busy 104% | read 3 | write 40 | avio 231 ms |
DSK | sda | busy 108% | read 110 | write 306 | avio 21.7 ms |
了解磁盘I/O
Linux提供了足够的命令,可以让您深入了解磁盘运行的难度,并帮助您专注于潜在的问题或减速。 希望其中一个命令可以告诉您在询问磁盘性能时需要知道的内容。 偶尔使用这些命令有助于确保在需要检查时特别忙或慢的磁盘是显而易见的。
更多Linux命令相关信息见Linux命令大全 专题页面 https://www.558idc.com/topicnews.aspx?tid=16