什么是 jbd2/dm-0-8,为什么它会消耗我所有的 I/O 使用量并导致 I/O 等待?
无论如何要禁用它?
Bonnie++ 结果:http : //pastebin.com/iQCWP1qp
$ sudo hdparm -t /dev/sda1
/dev/sda1:
Timing buffered disk reads: 108 MB in 3.02 seconds = 35.71 MB/sec
Run Code Online (Sandbox Code Playgroud) 我知道wa(in top) 测量等待 I/O 的 CPU 时间。很多文章都这么说。
但我很困惑,基于 2 个知识点:
对?
似乎没有时间让 CPU 等待 I/O...会发生什么?
如果推荐一些书籍或文章让我进一步阅读,那就更好了。
我最近为我的 Debian 服务器购买了一个新的 16TB 硬盘。我首先通过我的类似 Ubuntu 的桌面在其上创建了一个分区 (gpt),对其进行了格式化 (ext4),并在其上 rsync 了旧数据。该磁盘现在可以使用,因此我将其插入到我的服务器中。现在开始一个我无法识别的奇怪的 I/O。
iotop -ao报告 3MB/s,Current DISK WRITE 但没有任何迹象表明是谁在执行此操作fatrace -c -t报告没有写入或读取,但如果我自己有touch一个文件,请报告它。dstat -tdD /dev/sdx --top-io报告每秒稳定的 3072k 写入,与 一致iotop,但也没有罪魁祸首,只是在i/o process应该有名称的地方有一个空白,但它确实确认了 I/O 操作是在所述磁盘上,这是我最初推断的它发出的噪音……现在我知道 iotop 标头显示的内容与 I/O 写入和/或从进程读取的总和之间可能存在不一致,如此处所述。但与之前的帖子相反,当时:
几个小时后(至少 10,不超过 20)噪音消失了,磁盘上不再有 3MB/s 的输入。
我的问题是:编写一些缓存系统、初始化表或类似的东西可以解释这个恒定的 3MB/s 写入 10-20 小时是否是正常行为(虽然我以前从未观察到过)(可能来自内核?) ?
我最初想到的是加密/随机病毒,但即使以 3MB/s 的速度运行 20 小时也不可能覆盖 16 个可用磁盘上写入的 12TB。
这有什么合乎逻辑的解释吗?
我知道这iotop让我可以实时测量任何或所有进程使用的磁盘带宽。iotop -a测量累积的磁盘带宽,这更接近我想要的。
但是,当我运行的进程终止时,它在 iotop 中消失得太快了,我无法确切地看到进程自启动以来总共使用了多少 I/O。有没有办法在进程结束时记录进程的总 I/O 使用情况,并且可能将其保存到某个文件中以供进一步分析?
请注意,我只是在寻找 Linux 独有的答案,特别是 Ubuntu。
我有一个 cron 基本上在晚上做一个简单的“tar zcf”。
服务器有:
正如您在监控屏幕主机上看到的:
在 tar 的几乎所有时间里,磁盘 I/O 都超过 90%,并使所有其他应用程序(mysql、apache)变慢很多。
2个问题:
谢谢!
我在大量虚拟化服务 (Azure) 和产品 (vmware、kvm、hyperv) 上看到 I/O 和系统在繁重的 I/O 工作负载下停顿。
我的问题是:
当一个 Linux 服务器正在处理许多并发请求以读取许多不同的文件时,它是否:
查找 File_1,读取整个文件,然后查找 File_2,读取整个文件,然后查找 File_3,等等
查找 File_1,读取其中的一部分(直到预读值?),然后查找 File_2,读取其中的一部分,然后查找返回到 File_1 停止的地方,阅读更多内容,然后查找 File_3,等等,等等
如果是第 2 种情况,则服务器执行的搜索比必要的要多得多,这会显着减慢速度。在这种情况下,我可以做任何调整吗?
我的 CPU I/O 等待稳定在 50% 左右,但是当我运行时,iostat 1它几乎没有显示磁盘活动。
是什么导致没有 iops 的等待?
注意:这里没有 NFS 或 FUSE 文件系统,但它使用 Xen 虚拟化。

有很多方法可以监控块设备性能:dstat 和 iostat,哎呀,甚至 sar 也会为您提供有关块设备 I/O 速率的数据。不幸的是,我不知道有什么好的临时工具来监视像磁带驱动器这样的字符设备的性能。
我知道有一些工具可以监控性能,如果您事先记得这样做(pv、dd + SIGUSR1,可能还有其他),但是假设您在工作 2 小时后可能需要 3 小时或 30 小时,具体取决于性能,而你不知道它是哪个。
我能想到的唯一一件事就是精心使用 strace 或类似的东西,解析写入的字节的输出,可能带有时间戳。是否有我忘记或从未听说过的常用工具?
出于调整大小的目的,我需要了解应用程序对 I/O 子系统的要求。我很想做我所谓的 I/O 嗅探,并像这样从块层获取事件列表:
initiator XYZ requests block 4711 from device 0815
initiator BLA writes block 1234 to device 9876
Run Code Online (Sandbox Code Playgroud)
有人告诉我 blktrace 是我正在寻找的,但我无法从该工具中获取此信息。
io ×10
linux ×6
performance ×3
ubuntu ×2
backup ×1
block ×1
centos ×1
cpu-usage ×1
debian ×1
filesystems ×1
hard-drive ×1
hdd ×1
kernel ×1
linux-kernel ×1
tape ×1
tapedrive ×1
trace ×1