如何监控磁盘io?

cam*_*ase 326 linux disk

我想在 debian linux 服务器上进行一些常规的磁盘 io 监控。关于监视器磁盘 io,我应该了解哪些工具,以便我可以查看磁盘的性能是否在一天中的特定时间达到最大值或峰值?

jor*_*anm 278

对于磁盘 I/O 趋势,有几个选项。我个人最喜欢的是sar来自sysstat. 默认情况下,它提供如下输出:

09:25:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
09:35:01 AM     all      0.11      0.00      0.01      0.00      0.00     99.88
09:45:01 AM     all      0.12      0.00      0.01      0.00      0.00     99.86
09:55:01 AM     all      0.09      0.00      0.01      0.00      0.00     99.90
10:05:01 AM     all      0.10      0.00      0.01      0.02      0.01     99.86
Average:        all      0.19      0.00      0.02      0.00      0.01     99.78
Run Code Online (Sandbox Code Playgroud)

%iowait是等待 I/O 所花费的时间。使用 Debian 软件包,您必须/etc/default/sysstat在软件包安装后通过配置文件启用统计收集器。

要查看按设备划分的当前利用率,您也可以使用iostatsysstat 包中的命令:

$ iostat -x 1
Linux 3.5.2-x86_64-linode26 (linode)    11/08/2012      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.84    0.00    0.08    1.22    0.07   97.80

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.09     1.02    2.58    0.49   112.79    12.11    40.74     0.15   48.56   3.88   1.19
xvdb              1.39     0.43    4.03    1.82    43.33    18.43    10.56     0.66  112.73   1.93   1.13
Run Code Online (Sandbox Code Playgroud)

可以在趋势图中显示磁盘使用情况的其他一些选项是munincacti

  • 请注意, %iowait 仅显示内核除了等待 IO 之外无事可做的时间。在 100% CPU 绑定的服务器上,无论它执行多少 IO,这都将为零。 (12认同)
  • 要启用“sar”,只需执行“vim /etc/default/sysstat”将“false”设置为“true”即可保存文件然后执行“sudo service sysstat restart” (2认同)

tin*_*ink 130

看看iotop

Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                             
    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]
    4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    6 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [mm_percpu_wq]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
Run Code Online (Sandbox Code Playgroud)

或者iodump,如果这更符合您的思维方式。

注意:这至少需要内核 2.6.20才能工作。

  • @camomileCase - 您没有在问题中指定... (12认同)

jip*_*pie 113

我喜欢dstat。它可以显示每个磁盘甚至 md-devices (RAID) 的总数和统计信息,还可以使用颜色来更好地概览:

$ dstat -tdD total,sda,sdb,sdc,md1 60 
----system---- -dsk/total----dsk/sda-----dsk/sdb-----dsk/sdc-----dsk/md1--
     time     | read  writ: read  writ: read  writ: read  writ: read  writ
08-11 22:08:17|3549k  277k: 144k   28k: 851k   62k: 852k   60k:  25k   82k
08-11 22:09:17|  60k  258k:1775B   15k:  13k   63k:  15k   60k:  68B   74k
08-11 22:10:17| 176k  499k:   0    14k:  41k  122k:  41k  125k: 273B  157k
08-11 22:11:17|  42k  230k:   0    14k:9830B   54k:  14k   51k:   0    70k
08-11 22:11:52|  28k  132k:   0  5032B:5266B   33k:9479B   28k:   0    37k
Run Code Online (Sandbox Code Playgroud)
  • -t 对于时间戳
  • -d 用于磁盘统计
  • -D 指定要报告的确切设备
  • 60平均超过 60 秒。显示每秒钟更新一次,但每 60 秒只会开始一次新行。

  • 本例中未使用,但-c可以报​​告等待 IO 百分比,这在大多数情况下与 CPU 等待来自磁盘的数据有关。

它可用于大多数 Linux 发行版,但有时需要从存储库安装。


cha*_*dge 61

仅从您计算机上的文件(假设使用最新内核),您可以询问/sys/block/sda/stat/proc/diskstats. 然而,它需要一些翻译。但是对于快速而肮脏的检查来说很好。

  • `/sys/block/sda/stat` 记录在 [https://www.kernel.org/doc/Documentation/block/stat.txt](https://www.kernel.org/doc/Documentation/block /stat.txt) (28认同)
  • `/proc/diskstats` 记录在 https://www.kernel.org/doc/Documentation/iostats.txt (15认同)
  • 这个答案的一大优势是不需要安装任何工具。它就在那里。(可能:-) (4认同)
  • 例如回声“读取 io 合并扇区滴答写 io 合并扇区滴答 inflight ioticks timeinqueu”;cat /sys/block/vda/vda1/stat ;sleep 10; 猫 /sys/block/vda/vda1/stat (3认同)

lan*_*oxx 50

另一种选择是使用: sudo iotop -aoP

-a    Will show accumulated output
-o    Will only output 
-P    Will only show processes instead of threads
Run Code Online (Sandbox Code Playgroud)

该程序将告诉您自 iotop 启动以来进程已写入磁盘和从磁盘读取的数量。


Bra*_*ram 10

我是它的作者diskgraph,它是一个命令行工具,可以在终端中绘制磁盘 IO。您可以选择哪个磁盘作为命令行上的参数,例如sdanvme0n1

$ ./diskgraph nvme0n1
Run Code Online (Sandbox Code Playgroud)

磁盘图截图

红色:写入带宽

绿色:读取带宽

橙色:正在进行的 IO 操作数。


请注意,该实用程序依赖于 Linux 5 中引入的功能。换句话说,它不适用于 Linux 4 或更早版本。


小智 9

监控磁盘 Io 可以通过多种工具完成,如下所示。

  1. 稳定器
  2. 臭氧
  3. 特区
  4. 虚拟机

还有一些重要的操作系统概念对于理解它们是非常必要的..阅读Linux IO 完整教程

  • iozone 用于测试,而不是监控:“Iozone 是一个文件系统基准测试工具。该基准测试生成并测量各种文件操作。” (3认同)

Aar*_*lla 8

另一个快速概览负载来源的好工具是 atop

它可以向您显示所有资源(CPU、内存/交换、网络和磁盘 I/O)的概览,或者您可以深入查看单个资源并按进程消耗量对进程进行排序。


Ste*_*owe 7

为什么不试试nmon。它使用进程处理磁盘和网络。最初用于 AIX,但现在已移植到 Linux 多年。