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

请教一个 Linux 上的 qbittorrent-nox 问题:在大负荷下载之后 webui 不工作

  •  
  •   AllenHua · 94 天前 · 3183 次点击
    这是一个创建于 94 天前的主题,其中的信息可能已经有所发展或是发生改变。

    qbittorrent-nox 运行在 OpenWrt ,是固件自带的,有 luci 页面。OpenWrt 硬件是 n3150 4C4T ,内存是 4GB 。

    经常在高速下载大文件之后 webui 就 gg 了,IYUU 辅种也会失败。但是 curl 和 telnet 都能连接到对应端口,只是 curl 无法获取返回的内容(后面我会贴上详细的信息),这个问题出现了不止一次了,只是以前没有重视,因为重启 qbit 之后就好了。

    哦,对了,我挂了接近 900 个种子。

    我想出现这个问题的原因应该是我的 CPU 性能太差,下载时速度太快,整个系统内存占用才 1GB ,还有空余 3GB ,带宽是 300Mbps ,遇到比较好的种子,下载速度 30MiB/s ,但是通过 pstree 、ps 等等命令观察 qbit 进程没有被 kill ,而且进程状态是良好的。

    解决办法:

    1. cpu 性能有瓶颈,只能对下载限速
    2. 找到 webui 不工作的原因,对症下药

    我贴出一些信息,希望有 Linux 大佬帮我分析分析问题产生的原因。

    高速下载时的速度,前几天看到有 33 兆每秒了
    0f29c2b665d14ac5fd3ef6d1b71dfd4

    webui 这时候还能访问,但是已经出现了 client is not reachable 的提示了
    411cc1acaf51545b223c0c62a4eb106

    满速下载时的 htop 输出
    7fe569e75d7f393647050fe5062d211

    通过 pstree 发现进程存在,以及子进程,程序通过 dk 这个用户运行
    6cff128cff23d330927eac65fbdeaa6

    kill -0 14824echo $? 返回 0 说明,进程似乎是没问题的。原理:kill -0 不会向进程发送任何信号,但是会进行错误检查,如果返回是 0 说明进程存活,否则说明进程存在问题。

    进程所属用户名和组均是 dk ( uid 和 gid 都是 6802 ) 20220506092459

    curl 和 telnet 均能连接
    20220506092615

    就是 webui 无法访问,是进程出现了什么问题?该怎么排查呢,期待有人帮我分析分析。

    第 1 条附言  ·  92 天前

    原本我用的版本是 4.1.9,现在我在 x86 OpenWrt 上安装了一个还不错的 4.4.2 客户端。作者编译的开源项目在 https://github.com/userdocs/qbittorrent-nox-static

    为此还学习了一下 OpenWrt procd 编写 init.d 启动脚本的一些语法,写了一个在 OpenWrt 下给 qbittorrent-nox 开机自启的脚本

    cat /etc/init.d/qbittorrent-nox

    #!/bin/sh /etc/rc.common
    # Licensed to the public under the Apache License 2.0.
    # ubus call service list
    
    USE_PROCD=1
    START=95
    STOP=15
    
    NAME=qbittorrent-nox
    ARGS=/root/bin/qbittorrent-nox
    QBIT_PROFILE=/mnt/ThreeTB2/qbit_profile_new
    QBIT_PID_FILE=/var/run/qbittorrent-nox.pid
    
    QBIT_INSTANCE="qbittorrent-nox-v4.4.2"
    
    start_service() {
        
        procd_open_instance $QBIT_INSTANCE # 给服务实例定义一个名称
        procd_set_param command $ARGS # 需要在前台被执行的服务
        procd_append_param command --profile="$QBIT_PROFILE" # 给以上命令附加的指令参数
        
        # 如果服务意外中止了,定义 redpawn 可以自动重启它,如果服务命令的确只需要运行一次,需要谨慎设定这里
        # 如果进程在 respawn_threshold 定义的时间内结束了,则判定为进程崩溃并尝试重启它,尝试5次后会停止重启
        procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
    
        procd_set_param stdout 1 # 转发 stdout 输出到 logd
        procd_set_param stderr 1 # same for stderr
        procd_set_param user dk # 以 dk 用户运行服务
        procd_set_param pidfile $QBIT_PID_FILE # 在服务启动时写入一个 pid 文件,在停止服务时删除此 pid 文件
        procd_close_instance # 结束服务实例配置
    }
    
    reload_service() {
        restart
    }
    
    restart() {
        echo "ready to restart qbittorrent-nox service"
        stop
        sleep 5
        start
    }
    

    管理开机自启

    # /etc/init.d/qbittorrent-nox enable
    # /etc/init.d/qbittorrent-nox start
    

    感觉应该蛮少人在 OpenWrt 上装 qbit 的,但还是分享出来了。更加详细的过程我写了一篇文章记录,欢迎阅读: OpenWrt 安装 4.4.2 版本的 qbittorrent-nox

    41 条回复    2022-05-09 00:54:06 +08:00
    Sylv
        1
    Sylv  
       94 天前 via iPhone
    就是高速下载或者种子过多的时候,CPU 性能不够,导致负责 API 的子进程阻塞了。这情况在性能不好的 Seedbox (相比路由器已经好很多了)也经常出现,在性能好的 Seedbox 上就很少出现。所以你只能下载限速和减少做种数量了,要不然就是换到性能好的 PC/NAS 上了。
    whatalittleboy
        2
    whatalittleboy  
       94 天前
    之前我 Windows 端的 qb ,界面非常容易卡死,把 tracker 订阅地址删掉就好了
    ltkun
        3
    ltkun  
       94 天前 via Android
    webui 最多干过 5000 种子 不过 cpu 内存都要给足
    AllenHua
        4
    AllenHua  
    OP
       94 天前
    @Sylv #1 感谢解惑。刚查了一些资料,pstree 里主进程后面的是进程还是线程,我不知道怎么区分,后面那一列的名称和数字,那个数字是 process ID 还是 thread ID ?
    @whatalittleboy #2 这个 qbit 我只用来下 pt ,所以这个 key 的值我这边是空的
    @ltkun #3 5000 种感觉已经很多了……
    Sylv
        5
    Sylv  
       94 天前
    @AllenHua 这个我也不清楚。
    vocaloid
        6
    vocaloid  
       94 天前
    qb 版本是否太低?太低的会出现各种奇奇怪怪的问题,至少要到 4.4.x 才好点
    lslqtz
        7
    lslqtz  
       94 天前
    个人猜测一般 CPU 没满的情况下是 IO 瓶颈等待导致的阻塞,当然有时候也有玄学情况。。。
    @vocaloid 其实都那样,4.4.x 还用了 libtorrent 2.0 ,Windows 下性能降低要不内存直接进行大爆炸
    lslqtz
        8
    lslqtz  
       94 天前
    目前我 Web UI 挂了 6000 ,响应有一点延迟,估计网络问题,还可以接受。
    lslqtz
        9
    lslqtz  
       94 天前
    以及内存的话不要让 qB 去试图使用 SWAP ,这也可能导致 Web UI 卡死。或者你干脆关了 SWAP 也行。。
    个人测试经验,工作集要比磁盘缓存大 1/2 到 1/3 ,然后工作集用总内存的 1/2 比较好。
    LuvF
        10
    LuvF  
       94 天前 via Android
    mark 一下,目前也只能限速处理,看看有没有大佬有解决办法
    imn1
        11
    imn1  
       94 天前
    @vocaloid #6
    切,我是逆向操作,4.4.x 卡死多次,从 4.4.2-->4.4.1-->4.4.0-->4.3.9 OK
    搜了一下,原来是国际问题
    当然说的是 GUI 版本,不是 nox
    lslqtz
        12
    lslqtz  
       94 天前
    Web UI GG 了不影响任务的进行,但是不知道会不会影响 RSS ,没有做过测试。
    我 MT7621 的 OpenWrt 挂 10 个任务同时下载就会卡死,但是任务还会进行。400 个任务不操作也卡死,没救。。CPU 性能炸了
    lslqtz
        13
    lslqtz  
       94 天前
    @imn1 推荐试试看 4.4.2 lt1.2 版本,Linux GUI 当我没说。
    HaoranLi
        14
    HaoranLi  
       94 天前
    QB-EE 4.4.2 ,Windows10 ,CPU-3700X ,内存 64G ,三星 970Pro ,下载速度超过 30MB/s ,GUI ( Web UI )一样卡死。
    CPU ,磁盘占用基本没有,但是还是会卡死
    imn1
        15
    imn1  
       94 天前
    @lslqtz #13
    是 win ,但也不想试了,用着没啥事就不动了
    我是 4.1 看着 pt 别人版本挺高的,直升 4.4 ,在半夜卡了,醒来看到上传流量全部为 0 ,&^)()#$%&^^$^&
    lslqtz
        16
    lslqtz  
       94 天前
    @imn1 我目前都是 4.4.2 lt1.2 ,用下来和 4.3.9 没区别。
    ![19206978-0776-41BD-97E3-C7B5F2EF9484.jpeg]( https://s2.loli.net/2022/05/06/JPfwQ1UBbmYZOTN.jpg)
    lslqtz
        17
    lslqtz  
       94 天前
    ……又忘记回复不能用 MD 了
    V2 的外链限制是不是太严了。。
    创建新回复过程中遇到一些问题:
    请不要在每一个回复中都包括外链,这看起来像是在 spamming
    yanqiyu
        18
    yanqiyu  
       94 天前
    我猜就是 io 卡住了导致卡住了别的线程
    因为 qbittorrent-nox 高负载失去响应的问题我甚至在 32C+128G 内存的服务器上遇见过,显然不会因为是 CPU 瓶颈 /内存瓶颈
    AllenHua
        19
    AllenHua  
    OP
       94 天前
    @vocaloid #6 好像是 4.1.9 ,晚上回去确认。上午重启了一下 frpc 导致家里路由器 ssh 登不上了。。
    @lslqtz #7 好的,谢谢。回头看看首要升级版本
    @lslqtz #9 恩有道理,4GB 内存对于我的系统和相关应用应该足够了,swap 不是很有必要。
    @lslqtz #12 MT7621 还能这么刚,看来我的 n3150 不是问题 😂️
    @lslqtz #17 没办法,确实很严格我也遇到过好几次你这个提示。不过另辟蹊径,可以拆开 url ,http 协议附近,不让 v2 的 editor 把你的文本识别成一个有效的 url 就行了
    @yanqiyu #18 也是有道理的,但是接的一个普通的 3TB sata3 机械硬盘,顺序写速度有个 100 兆以上,为什么 io 会卡住呢
    vocaloid
        20
    vocaloid  
       94 天前 via iPhone
    @imn1 嘛…nox 版低于 4.4 在我这会导致种子内容无法查看,而且如果运行 nox 的服务器做梯子的话还会导致 web 界面延迟巨大(十几秒),十分玄学
    kaedeair
        21
    kaedeair  
       94 天前
    我的情况是高速下载是响应延迟,在创建任务时会无响应一段时间,u 是 4200h ,看 cpu 是 99%-130%,祖传单核优化,wa 大概是 30 多
    AllenHua
        22
    AllenHua  
    OP
       94 天前
    @vocaloid 的确是 v4.1.9
    @lslqtz 想起来了,还可以 base64 啊,虽然很少有人这么用,但是也不失一种方案
    @kaedeair wa 是什么?
    lslqtz
        23
    lslqtz  
       94 天前
    @AllenHua 还不如直接发图片呢。。反正 iOS 已经支持 OCR 文本了 (
    个人还是推荐用 4.3 或 4.4 ,4.1.9 实在太上古了,总不能一直不升级。
    4.4 新的 SQLite 数据库不错,就是要有备份,而且目前官方还没有做向下转换 (技术上可以实现
    kaedeair
        24
    kaedeair  
       93 天前
    @AllenHua wa 是 io 等待时间的 CPU 占比
    yjd
        25
    yjd  
       93 天前
    @whatalittleboy 赞,果然快了不少。原来以为是 qt 在 win 下默认要慢一些导致的。
    yjd
        26
    yjd  
       93 天前
    #18 也是有道理的,但是接的一个普通的 3TB sata3 机械硬盘,顺序写速度有个 100 兆以上,为什么 io 会卡住呢

    原来你是机械盘你不用缓存软件,I/O 不卡死才怪。
    我在 win 下用机械盘+缓存盘,也只能限制 10 个任务+15MB/s 开到 20MB/s 机械盘就 100%了。因为我内存不多划了缓存盘小 512M 。
    用缓存盘速度快了,硬盘也不那么容易坏了。以前单纯机械盘做下载盘。用个 1,2 年就都是坏道,需要屏蔽了。
    现在可以用很久。
    AllenHua
        27
    AllenHua  
    OP
       93 天前
    @kaedeair #24 学习了
    @yjd #26 明白了,那我还是太年轻。用的二手盘,坏了倒是没啥心疼的
    AllenHua
        28
    AllenHua  
    OP
       93 天前
    @lslqtz #23 base64 比 ocr 方便(确信,哈哈哈
    whatalittleboy
        29
    whatalittleboy  
       93 天前
    @yjd 估计是 tracker 太多,搞崩的,我现在就添加十几个 trackers ,以前 200 多个经常卡死
    yjd
        30
    yjd  
       93 天前
    @whatalittleboy 我是把 RSS 智能剧集过滤器勾掉 ,前 2 个以前去掉过了,差这个没去
    lslqtz
        31
    lslqtz  
       93 天前
    @yjd 不需要有缓存盘,qB 本身就内置有内存缓存。。。
    我 seedbox 4x16T ,根本不开缓存的
    yjd
        32
    yjd  
       93 天前
    @AllenHua 我在 win 下用 PrimoCache 做内存缓存盘。这样写入速度快。
    你这用 openwrt ,内存要管够。qb 高级里也有设置缓存大小。
    yjd
        33
    yjd  
       93 天前
    @lslqtz qb 默认写盘策略还不错。起码比迅雷无脑狂写盘要好很多。但是用 PrimoCache 和不用还是有区别的
    chengyiqun
        34
    chengyiqun  
       93 天前
    @whatalittleboy qb 的高级设置里有个获取 tracker 图标的设置, 关掉它, tracker 设置多也不会卡死了.
    lslqtz
        35
    lslqtz  
       93 天前
    @chengyiqun 如果网络大于对等 1Gbps ,那确实有区别。
    chengyiqun
        36
    chengyiqun  
       93 天前
    @lslqtz 回错人了吧.
    lslqtz
        37
    lslqtz  
       93 天前
    @chengyiqun 回错了,抱歉。不过 tracker 图标默认好像就是不获取的吧,是我记错了?确实也没什么必要获取
    @yjd
    yanqiyu
        38
    yanqiyu  
       92 天前
    @AllenHua
    我之前会卡住是因为暂时只能用顺序读写没网速快的盘导致的,后来换了 HC320/HC550 (顺序读写 200M+)也就没卡了

    其实我怀疑 BT 的读写没那么顺序导致了卡住,看看 iowait 应该能看出来端倪
    monster33
        39
    monster33  
       92 天前
    可能是缓存或者 IP 冲突的原因
    AllenHua
        40
    AllenHua  
    OP
       92 天前
    @vocaloid #6 已经重装了一个 4.4.2 的 qbit 目前使用良好
    @yjd #32 那个缓存高级设置我目前还是 -1 (就是自动的意思,让 qbit 决定缓存大小
    @yanqiyu #38 应该就是 io 跟不上,我研究一下 iowait 谢谢
    @monster33 #39 ip 冲突应该不至于的。
    chengyiqun
        41
    chengyiqun  
       92 天前
    @lslqtz 我从来不记得我改过, 某天我树莓派上导入一个超大种子后崩溃, 从那以后就一直崩溃了, 我重装 qbt 后, 这个就变成勾上的了, 是不是给我闪退一下, 我都不知道为啥.
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1161 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:59 · PVG 03:59 · LAX 12:59 · JFK 15:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.