高 iowait 到底是什么引起的?

2022-07-13 19:20:55 +08:00
 cxtrinityy

最近在 docker 上跑 jellyfin 的时候碰到一个问题, 但是我不知道是怎么引起的, 对 io 这块的硬件处理不熟悉.

表现情况为, 当出现该问题时, iowait 直接 90%以上, 但是磁盘读取只有 10MB/s 左右, 没有大量的写入, 就我观察其他正常运行的程序磁盘读取 15MB/s 也不会引起高 cpu 使用乃至 90%的 iowait, 那这种情况应该不是磁盘瓶颈的问题吧?

同时 ps 查看进程后, docker 内 jellyfin 的 ffprobe 子进程(应该是正常的扫媒体文件)的 state 为 D(uninterruptible sleep (usually IO)), 而且 grep 后 D 状态的进程都是 ffprobe.

所以我粗略估计, 高 iowait 的问题应该是 jellyfin 扫库引起的, 但是扫库的时候该问题不是必现, 这是其一, 其二是如果不是磁盘的读写瓶颈, 到底为什么会导致 iowait, 是代码的问题?

2122 次点击
所在节点    Linux
5 条回复
billlee
2022-07-13 20:01:20 +08:00
看一下 iops
chenxytw
2022-07-13 20:07:07 +08:00
从描述看,就是磁盘读写引起的 iowait 。
关于磁盘繁忙程度的判断,不应该仅关心速度,还有 IOPS 。

从速度描述值 15 MiB/s 和行为来看,应该是机械硬盘,且发生大量随机小数据量读写。机械硬盘由于其特性,这种场景的读写能力很弱。如果还是多进程做这件事情,是很容易发生高 iowait 的。

题外话:单从速度来讲,无论是机械硬盘还是固态硬盘,大量小数据随机读写的表现出来的读写速度是远低于顺序读写的。
cxtrinityy
2022-07-13 20:11:23 +08:00
@billlee
@chenxytw
好的, 多谢指路, 我研究下 iops 再分析分析
aru
2022-07-13 23:52:09 +08:00
iostat -x 3
执行上面的命令,看下磁盘使用率
cxtrinityy
2022-07-14 14:16:45 +08:00
@aru 磁盘使用率是 90%+, 就是磁盘使用率太高了, 但是读取写入速度又不快我才奇怪的, 估计是跟楼上说的一样, iops 的问题, 虽然暂时没有复现问题去验证, 但是我当初打印 jellyfin 日志的时候看到扫的文件夹是有很多小文件的, 我的媒体库是按照 emby 的方式建立文件夹的, 每部剧一个文件夹, 里面按季分, 自动字幕下载程序会下载非常多的匹配字幕文件, 导致一个文件夹肯能有 500-1000 个文件, 那部剧有 7 季, 将尽几千的小文件了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX