收起左侧

【完整诊断】关于fnOS偶发/持续高iowait问题的系统级排查与线索

5
回复
162
查看
[ 复制链接 ]

6

主题

31

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2025-12-29 22:22:53 显示全部楼层 阅读模式

1. 问题核心特征

  • 现象:系统CPU的 iowait 指标间歇性或持续飙高(可达20%-100%),即使在系统空闲时也频繁出现。
  • 关键模式iostat -x 显示,在 iowait 飙升的瞬间,往往伴随系统盘 (sda) 极微量的写入(如每秒3-4次,共12KB),同时数据盘的 f_await (刷新等待时间) 指标异常高(可达35-40毫秒)。这表明问题并非持续大流量读写,而是高频、微小、强制同步的I/O操作

2. 已排除的常见原因

  • 非硬盘故障smartctl 检查所有硬盘健康状态为 PASSED
  • 非端口冲突:已排除。
  • 非某个具体应用持续读写:使用 pidstat -diotop 长时间监控,在iowait峰值出现时,并未捕获到任何用户态进程在进行高强度的磁盘读写。这指向问题可能在内核态或与文件系统同步机制有关。

3. 诊断与排查步骤及发现(关键)
以下是我在问题出现时,通过命令行工具捕获到的核心信息:

  • A. 使用 iostat 捕捉I/O模式(关键证据)
    bash

    iostat -x 1 3
    

    典型输出节选(iowait高达24%时)
    text

    avg-cpu:  %user  %nice %system %iowait %steal  %idle
               2.01   0.00    2.51   24.06   0.00   71.43
    
    Device   ...   w/s    wkB/s  w_await  aqu-sz  %util
    sda      ...   3.00   12.00    0.00    0.00    0.00
    sdb      ...   0.00    0.00    0.00    0.00    0.00
    
    • 发现iowait 高时,系统盘 sda 有固定的3次/秒、共12KB的微小写入,且 %util 利用率极低。这强烈暗示是同步I/O(如 fsync/fdatasync)导致的等待
  • B. 使用 iotop 定位瞬间I/O进程(锁定嫌疑人)
    bash

    iotop -b -o -d 2 -n 30
    

    在多次采样中,以下内核线程和进程频繁出现

    TID  PRIO  USER     DISK WRITE  COMMAND
    254  be/3 root        66.68 K/s  [jbd2/sda2-8]
    327616 be/4 root      19.61 K/s  [kworker/u16:1-flush-8:0]
    2289  be/4 root       ...        /usr/trim/bin/trim_sac
    2222  be/4 root       1996 B/s   trim_sac (或其衍生进程)
    
    • 发现:Ext4文件系统日志线程 jbd2、内核回写线程 kworkertrim_sac(Trim System Apps Control)服务是主要的I/O关联者。
  • C. 检查进程与系统服务
    bash

    ps aux | grep trim_sac
    systemctl status trim_sac
    
    • 发现trim_sac 服务是 trim_main.service 的核心组件之一,负责管理系统应用。它及其关联的PostgreSQL数据库进程非常活跃。
  • D. 系统负载与CPU绑定
    类似帖子T40694中用户发现单个CPU核心 iowait 达到100%,可以使用以下命令复现排查:
    bash

    sar -P ALL 1 3
    ps -eo pid,psr,state,%cpu,comm,args | awk '$2 == [出现iowait的CPU核心编号]'
    

4. 初步结论与猜测
根据以上诊断,问题很可能与 trim 服务层 的运行机制有关。推测是 trim_sac 或与之交互的某个服务(如相册AI识别、状态同步服务),为了保持状态一致性,以极高的频率(可能达到秒级甚至更高)执行了某些需要立即同步磁盘的元数据操作。这导致了:

  1. 频繁唤醒 jbd2 线程提交文件系统日志。
  2. 即使每次写入量极小,但同步操作的特性使得CPU必须等待每次I/O完成,从而推高 iowait
  3. 在配备较低IOPS(尤其是随机写入)的SSD(如SATA SSD或入门级NVMe)上,此问题会被显著放大。

5. 建议的排查方向

  1. ** trim_sac 服务:检查其内部任务调度逻辑,是否存在过于频繁的定时状态保存、检查点或日志刷新操作。
  2. **相关应用:特别是相册(trim.photos)、AI识别、文件索引等服务在完成主要任务(如识别照片)后,是否有后台线程仍在持续进行元数据整理或写入。
  3. I/O模式分析:使用 strace -f -p <trim_sac_PID> -e trace=fsync,fdatasync,sync_file_range 或通过 perf 工具,追踪 trim_sac 及相关进程对同步系统调用的使用频率。
  4. 文件系统与挂载选项:已尝试优化 /etc/fstab(添加 noatime,commit=60),但对由固定频率服务触发的同步写入改善有限。

6. 我的系统环境

  • fnOS版本: [1.1.8]
  • CPU: Intel N5105
  • 系统盘: GeIL N3L SATA 256GB SSD(实测连续写入约6.9MB/s,推测随机写入IOPS较低)
  • 数据盘: 5块HDD组成的存储池
  • 问题重现: 系统空载时随机出现,与特定用户操作(如相册同步)无必然绑定,但 trim_sac 持续活跃。

Device ... w/s wkB/s w_await aqu-sz %util sda ... 3.00 12.00 0.00 0.00 0.00 sdb ... 0.00 0.00 0.00 0.00 0.00

code

收藏
送赞
分享

6

主题

31

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2025-12-29 22:34:06 楼主 显示全部楼层

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
Total DISK READ: 0.00 B/s | Total DISK WRITE: 19.61 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 621.65 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.77 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 5.88 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
330439 be/4 root 0.00 B/s 2008.12 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.76 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.76 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.76 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 107.87 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 609.94 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 66.68 K/s ?unavailable? [jbd2/sda2-8]
327616 be/4 root 0.00 B/s 19.61 K/s ?unavailable? [kworker/u16:1-flush-8:0]
224633 be/4 root 0.00 B/s 11.77 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 5.88 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
188515 be/4 root 0.00 B/s 2008.30 B/s ?unavailable? ./docservice
224889 be/4 docker-c 0.00 B/s 2008.30 B/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir [HangWatcher]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.74 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.74 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.74 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 56.74 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 105.65 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 29.35 K/s ?unavailable? [jbd2/sda2-8]
327616 be/4 root 0.00 B/s 15.65 K/s ?unavailable? [kworker/u16:1-writeback]
224633 be/4 root 0.00 B/s 11.74 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 37.02 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 592.35 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
3504 be/4 root 0.00 B/s 15.59 K/s ?unavailable? trim-media --port=8005 --root=/usr/local/apps/@appdata/trim.media --meta=/vol1/@appmeta/trim.media --static=/usr/local/apps/@appcenter/trim.media --trim-appname=trim.media --trim-username=trim-media --log-dir=/usr/local/apps/@appdata/trim.media/logs
224633 be/4 root 0.00 B/s 11.69 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 9.74 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
3523 be/4 root 0.00 B/s 0.00 B/s ?unavailable? trim-media --port=8005 --root=/usr/local/apps/@appdata/trim.media --meta=/vol1/@appmeta/trim.media --static=/usr/local/apps/@appcenter/trim.media --trim-appname=trim.media --trim-username=trim-media --log-dir=/usr/local/apps/@appdata/trim.media/logs
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.67 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.72 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.72 K/s ?unavailable? s6-supervise svc-pulseaudio
330439 be/4 root 0.00 B/s 2000.00 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30
Total DISK READ: 0.00 B/s | Total DISK WRITE: 47.30 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 542.24 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
274487 be/4 root 0.00 B/s 23.41 K/s ?unavailable? [kworker/u16:0-efi_rts_wq]
224633 be/4 root 0.00 B/s 11.70 K/s ?unavailable? s6-supervise svc-pulseaudio
254 be/3 root 0.00 B/s 9.75 K/s ?unavailable? [jbd2/sda2-8]
224889 be/4 docker-c 0.00 B/s 1997.31 B/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir [HangWatcher]
924 be/4 root 0.00 B/s 499.33 B/s ?unavailable? [txg_sync]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.66 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 15.61 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.71 K/s ?unavailable? s6-supervise svc-pulseaudio
1224 be/4 root 0.00 B/s 1997.92 B/s ?unavailable? rsyslogd -n -iNONE [rs:main Q:Reg]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 19.47 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 46.74 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.68 K/s ?unavailable? s6-supervise svc-pulseaudio
254 be/3 root 0.00 B/s 3.89 K/s ?unavailable? [jbd2/sda2-8]
224863 be/4 docker-c 0.00 B/s 3.89 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.67 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 498.10 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.67 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.66 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 38.68 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.71 K/s ?unavailable? s6-supervise svc-pulseaudio
1224 be/4 root 0.00 B/s 1998.05 B/s ?unavailable? rsyslogd -n -iNONE [rs:main Q:Reg]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 31.23 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 599.25 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 17.57 K/s ?unavailable? [jbd2/sda2-8]
224633 be/4 root 0.00 B/s 11.71 K/s ?unavailable? s6-supervise svc-pulseaudio
224889 be/4 docker-c 0.00 B/s 1998.79 B/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir [HangWatcher]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.66 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.71 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.71 K/s ?unavailable? s6-supervise svc-pulseaudio
330439 be/4 root 0.00 B/s 1998.47 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30
Total DISK READ: 0.00 B/s | Total DISK WRITE: 40.93 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 66.27 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 29.23 K/s ?unavailable? [jbd2/sda2-8]
224633 be/4 root 0.00 B/s 11.69 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.64 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 534.10 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.70 K/s ?unavailable? s6-supervise svc-pulseaudio
2222 be/4 root 0.00 B/s 1996.04 B/s ?unavailable? trim_sac
Total DISK READ: 0.00 B/s | Total DISK WRITE: 17.52 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 17.52 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.68 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 5.84 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
Total DISK READ: 0.00 B/s | Total DISK WRITE: 39.12 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 502.71 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 17.60 K/s ?unavailable? [jbd2/sda2-8]
224633 be/4 root 0.00 B/s 11.74 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 7.82 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
330439 be/4 root 0.00 B/s 2003.03 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.67 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.67 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.67 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 25.42 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 41.06 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
254 be/3 root 0.00 B/s 13.69 K/s ?unavailable? [jbd2/sda2-8]
224633 be/4 root 0.00 B/s 11.73 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.64 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.69 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.69 K/s ?unavailable? s6-supervise svc-pulseaudio
330439 be/4 root 0.00 B/s 1995.65 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.69 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.73 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.73 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 2002.48 B/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.66 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 577.39 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.66 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 11.67 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 15.55 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.67 K/s ?unavailable? s6-supervise svc-pulseaudio
Total DISK READ: 0.00 B/s | Total DISK WRITE: 62.33 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 44.80 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
311522 be/4 root 0.00 B/s 42.85 K/s ?unavailable? [kworker/u16:3-efi_rts_wq]
224633 be/4 root 0.00 B/s 11.69 K/s ?unavailable? s6-supervise svc-pulseaudio
254 be/3 root 0.00 B/s 3.90 K/s ?unavailable? [jbd2/sda2-8]
224863 be/4 docker-c 0.00 B/s 3.90 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.68 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 570.85 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.73 K/s ?unavailable? s6-supervise svc-pulseaudio
1224 be/4 root 0.00 B/s 2001.87 B/s ?unavailable? rsyslogd -n -iNONE [rs:main Q:Reg]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 13.65 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.70 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.70 K/s ?unavailable? s6-supervise svc-pulseaudio
224889 be/4 docker-c 0.00 B/s 1996.84 B/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir [HangWatcher]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 21.96 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 519.15 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.71 K/s ?unavailable? s6-supervise svc-pulseaudio
254 be/3 root 0.00 B/s 7.81 K/s ?unavailable? [jbd2/sda2-8]
1224 be/4 root 0.00 B/s 1998.53 B/s ?unavailable? rsyslogd -n -iNONE [rs:main Q:Reg]
924 be/4 root 0.00 B/s 499.63 B/s ?unavailable? [txg_sync]
Total DISK READ: 0.00 B/s | Total DISK WRITE: 17.59 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 11.72 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
224633 be/4 root 0.00 B/s 11.72 K/s ?unavailable? s6-supervise svc-pulseaudio
224863 be/4 docker-c 0.00 B/s 3.91 K/s ?unavailable? chromium --show-component-extension-options --enable-gpu-rasterization --no-default-browser-check --disable-pings --media-router=0 --enable-remote-extensions --load-extension= https://www.linuxserver.io/ --ignore-gpu-blocklist --no-first-run --password-store=basic --simulate-outdated-no-au=Tue, 31 Dec 2099 23:59:59 GMT --start-maximized --user-data-dir
330439 be/4 root 0.00 B/s 2000.95 B/s ?unavailable? python3 /usr/sbin/iotop -b -o -d 2 -n 30

6

主题

31

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2025-12-29 23:33:20 楼主 显示全部楼层

(排查二)dsmgr过时Docker API + containerd cgroup错误导致系统iowait高

紧急:dsmgr过时Docker API和containerd cgroup错误共同导致系统iowait持续20%+

问题描述

在fnOS系统中发现两个严重问题共同导致系统iowait持续高达20-30%:

  1. dsmgr使用过时Docker APIdsmgr进程使用Docker API v1.24,而系统Docker是v1.52,导致每10秒产生API版本错误
  2. containerd cgroup v2兼容性问题:在cgroup v2环境下,containerd无法解析AdGuard Home容器的hugetlb配置,每秒产生错误日志

这两个问题的错误日志大量写入syslog,频繁的磁盘写入导致系统iowait异常高,严重影响系统性能。

系统环境

  • 系统版本: fnOS(1.1.8)
  • 内核版本: 6.12.18-trim
  • Cgroup版本: v2 (cgroup2fs)
  • Docker版本: 29.1.2(API v1.52,最低支持1.44)
  • containerd版本: v2.2.0
  • 硬件配置: 4 CPU,系统盘SSD,存储盘HDD

问题表现

  1. 系统iowait持续20-30%
  2. syslog文件快速增长(每小时可达几十MB)
  3. 磁盘频繁写入,ext4 journal活跃
  4. 系统响应缓慢,特别是IO操作

错误日志示例

问题1:dsmgr Docker API版本错误(每10秒)

text

2025-12-29T23:25:08.854593+08:00 fnOS dsmgr[46063]: time="2025-12-29T23:25:08+08:00" level=error msg="runStats err:Error response from daemon: client version 1.24 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version"
2025-12-29T23:25:18.859579+08:00 fnOS dsmgr[46063]: [Stats]Close the channel, err:Error response from daemon: client version 1.24 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version"

问题2:containerd cgroup解析错误(每1秒)

text

2025-12-29T23:10:49.338915+08:00 fnOS containerd[1820]: time="2025-12-29T23:10:49.338470902+08:00" level=error msg="unable to parse \"max 0\" as a uint from Cgroup file \"/sys/fs/cgroup/system.slice/docker-9d176292c4734fd5b6684981ceeabf431eabec39c6a706b46b205ab1c3b2a0c5.scope/hugetlb.2MB.events\""

诊断信息

1. 系统状态检查

bash

# Cgroup版本:v2
stat -fc %T /sys/fs/cgroup/  # 输出: cgroup2fs

# Docker cgroup配置
docker info | grep -i cgroup
# 输出:
#  Cgroup Driver: systemd
#  Cgroup Version: 2

# containerd配置:无配置文件,使用默认
ls -la /etc/containerd/config.toml  # 不存在

2. 问题影响分析

  • 错误频率
    • dsmgr:每10秒2条错误 → 720条/小时
    • containerd:每1秒1条错误 → 3600条/小时
    • 总计:4320条错误日志/小时
  • 磁盘写入量
    • 每条错误约300字节
    • 每小时约1.3MB错误日志写入
    • 加上ext4 journal开销,实际磁盘写入更大

已尝试的解决方案

对于dsmgr问题:

  1. ❌ 停止服务:sudo systemctl stop dsmgr → 自动重启
  2. ❌ 禁用服务:sudo systemctl disable dsmgr → 仍然重启
  3. ❌ 设置环境变量:DOCKER_API_VERSION=1.44 → 无效
  4. ✅ 日志过滤:部分缓解,但问题根源未解决

对于containerd问题:

  1. ❌ 重新创建AdGuard Home容器 → 错误依旧
  2. ✅ 创建containerd配置:disable_hugetlb_controller = true → 有效但需要配置文件
  3. ❌ 切换cgroup v1 → 需要系统重启,影响大

根本原因分析

问题1:dsmgr Docker API版本不匹配

  • 根源: /usr/trim/bin/dsmgr二进制文件静态链接了过时的Docker客户端库(API v1.24)
  • 表现: 硬编码使用v1.24,无法通过环境变量修改
  • 影响: 每10秒产生错误,写入syslog

问题2:containerd cgroup v2兼容性

  • 根源: 系统使用cgroup v2,但containerd默认配置不兼容hugetlb控制器
  • 表现: 解析cgroup文件时遇到 "max 0"字符串,期望是数字
  • 触发: AdGuard Home容器使用了hugetlb资源
  • 影响: 每秒产生错误,写入syslog

建议的修复方案

方案A:更新相关组件(推荐)

  1. 更新dsmgr:使用与系统Docker版本兼容的API客户端
  2. 提供containerd配置:默认包含cgroup v2优化配置
  3. 更新AdGuard Home镜像:优化cgroup配置

方案B:系统级配置优化

  1. fnOS默认containerd配置

toml

[plugins."io.containerd.grpc.v1.cri"]
disable_hugetlb_controller = true
  1. dsmgr配置选项
  • 添加Docker API版本配置参数
  • 或自动检测并使用系统Docker API版本

方案C:错误处理优化

  1. 降低日志级别:API版本不匹配应记录为警告而非错误
  2. 优雅降级:检查失败时降低频率而非持续报错
  3. 智能重试:检测到问题后延长检查间隔

临时缓解措施(用户可操作)

对于dsmgr问题:

bash

# 创建rsyslog过滤规则
sudo tee /etc/rsyslog.d/99-filter-dsmgr.conf << 'EOF'
:programname, isequal, "dsmgr" ~
EOF
sudo systemctl restart rsyslog

对于containerd问题:

bash

# 创建containerd配置
sudo mkdir -p /etc/containerd
sudo tee /etc/containerd/config.toml << 'EOF'
version = 2
[debug]
level = "warn"
[plugins."io.containerd.grpc.v1.cri"]
disable_hugetlb_controller = true
EOF
sudo systemctl restart containerd

影响范围评估

受影响的用户:

  1. 所有使用Docker功能的fnOS用户(dsmgr问题)
  2. 在cgroup v2环境下运行容器的用户(containerd问题)
  3. 特别是运行AdGuard Home等可能使用hugetlb的容器用户

严重性等级:

  • dsmgr问题: P1(紧急)- 影响所有用户,高频错误
  • containerd问题: P2(高)- 影响部分容器用户

复现步骤

  1. 安装fnOS并启用Docker
  2. 运行AdGuard Home容器
  3. 监控syslog:sudo tail -f /var/log/syslog
  4. 查看iowait:iostat -x 1

请求研发团队

请优先处理以下问题:

  1. 立即修复:更新dsmgr组件,支持Docker API v1.44+
  2. 配置优化:提供默认的containerd cgroup v2兼容配置
  3. 长期方案:建立组件版本兼容性检查机制

附加技术信息

相关文件位置:

  • dsmgr二进制:/usr/trim/bin/dsmgr
  • containerd配置:/etc/containerd/config.toml(不存在)
  • Docker配置:/etc/docker/daemon.json
  • 系统日志:/var/log/syslog

系统监控数据:

bash

# 典型问题状态
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.02    0.00    2.53   23.74    0.00   71.72

# 错误频率统计
# dsmgr: 6次/分钟,containerd: 60次/分钟

ScreenShot_2025-12-29_234122_203.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

6

主题

31

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2025-12-29 23:36:13 楼主 显示全部楼层

问题2:containerd cgroup v2兼容性问题

问题描述
在cgroup v2环境下,containerd无法解析AdGuard Home容器的hugetlb配置,每秒产生错误日志,导致系统iowait高。

错误信息

text

containerd: unable to parse "max 0" as a uint from Cgroup file ".../hugetlb.2MB.events"

原因分析

  1. 系统使用cgroup v2(现代Linux默认)
  2. containerd默认配置不兼容cgroup v2的hugetlb控制器
  3. AdGuard Home容器可能使用了hugetlb资源
  4. 每秒1条错误日志,持续写入磁盘

临时解决方案

bash

# 创建containerd配置
sudo mkdir -p /etc/containerd
sudo tee /etc/containerd/config.toml << 'EOF'
version = 2
[debug]
level = "warn"
[plugins."io.containerd.grpc.v1.cri"]
disable_hugetlb_controller = true
EOF
sudo systemctl restart containerd

建议修复
fnOS应提供默认的containerd cgroup v2兼容配置,或更新containerd版本。

影响
所有在cgroup v2环境下运行容器的用户,特别是使用AdGuard Home等容器的用户。

1

主题

8

回帖

0

牛值

江湖小虾

2026-1-8 21:06:23 显示全部楼层

我也遇到了持续高iowait的情况,一直维持在25%左右。我用的是ssd。

通过 iotop 分析主要是这些进程导致的高频小数据写入:

内核进程

    • [jbd2/nvme0n1p2-8] → ext4 日志
    • [btrfs-transaction] → Btrfs 事务提交
    • [kworker/...-btrfs-endio-write] → Btrfs 异步写完成回调
    • [kworker/...-flush-btrfs-1] → Btrfs 缓存刷盘
  • 用户进程:
    • rslsync(Resilio Sync)
    • backup_service
    • homeassistant
    • prometheus
    • qbittorrent-nox
    • xunlei-pan-cli(迅雷网盘客户端)
    • dockerd / containerd
[jbd2/nvme0n1p2-8] → ext4 日志 [btrfs-transaction] → Btrfs 事务提交 你看看这俩的实时或历史日志吧  详情 回复
2026-1-8 22:23

6

主题

31

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

2026-1-8 22:23:12 楼主 显示全部楼层
朝雨绫萧 发表于 2026-1-8 21:06
我也遇到了持续高iowait的情况,一直维持在25%左右。我用的是ssd。
通过 iotop 分析主要是这些进程导致的高 ...

[jbd2/nvme0n1p2-8] → ext4 日志
[btrfs-transaction] → Btrfs 事务提交
你看看这俩的实时或历史日志吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则