V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
cxtrinityy
V2EX  ›  Linux

高 iowait 到底是什么引起的?

  •  
  •   cxtrinityy · 2022-07-13 19:20:55 +08:00 · 2338 次点击
    这是一个创建于 895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在 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, 是代码的问题?

    5 条回复    2022-07-14 14:16:45 +08:00
    billlee
        1
    billlee  
       2022-07-13 20:01:20 +08:00
    看一下 iops
    chenxytw
        2
    chenxytw  
       2022-07-13 20:07:07 +08:00   ❤️ 1
    从描述看,就是磁盘读写引起的 iowait 。
    关于磁盘繁忙程度的判断,不应该仅关心速度,还有 IOPS 。

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

    题外话:单从速度来讲,无论是机械硬盘还是固态硬盘,大量小数据随机读写的表现出来的读写速度是远低于顺序读写的。
    cxtrinityy
        3
    cxtrinityy  
    OP
       2022-07-13 20:11:23 +08:00
    @billlee
    @chenxytw
    好的, 多谢指路, 我研究下 iops 再分析分析
    aru
        4
    aru  
       2022-07-13 23:52:09 +08:00
    iostat -x 3
    执行上面的命令,看下磁盘使用率
    cxtrinityy
        5
    cxtrinityy  
    OP
       2022-07-14 14:16:45 +08:00
    @aru 磁盘使用率是 90%+, 就是磁盘使用率太高了, 但是读取写入速度又不快我才奇怪的, 估计是跟楼上说的一样, iops 的问题, 虽然暂时没有复现问题去验证, 但是我当初打印 jellyfin 日志的时候看到扫的文件夹是有很多小文件的, 我的媒体库是按照 emby 的方式建立文件夹的, 每部剧一个文件夹, 里面按季分, 自动字幕下载程序会下载非常多的匹配字幕文件, 导致一个文件夹肯能有 500-1000 个文件, 那部剧有 7 季, 将尽几千的小文件了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.