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 ,而且进程状态是良好的。
解决办法:

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

我贴出一些信息,希望有 Linux 大佬帮我分析分析问题产生的原因。
高速下载时的速度,前几天看到有 33 兆每秒了

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

满速下载时的 htop 输出

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

kill -0 14824、echo $? 返回 0 说明,进程似乎是没问题的。原理:kill -0 不会向进程发送任何信号,但是会进行错误检查,如果返回是 0 说明进程存活,否则说明进程存在问题。
进程所属用户名和组均是 dk ( uid 和 gid 都是 6802 )

curl 和 telnet 均能连接

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

原本我用的版本是 4.1.9,现在我在 x86 OpenWrt 上安装了一个还不错的 4.4.2 客户端。作者编译的开源项目在 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

就是高速下载或者种子过多的时候,CPU 性能不够,导致负责 API 的子进程阻塞了。这情况在性能不好的 Seedbox (相比路由器已经好很多了)也经常出现,在性能好的 Seedbox 上就很少出现。所以你只能下载限速和减少做种数量了,要不然就是换到性能好的 PC/NAS 上了。

之前我 Windows 端的 qb ,界面非常容易卡死,把 tracker 订阅地址删掉就好了

webui 最多干过 5000 种子 不过 cpu 内存都要给足

#1 感谢解惑。刚查了一些资料,pstree 里主进程后面的是进程还是线程,我不知道怎么区分,后面那一列的名称和数字,那个数字是 process ID 还是 thread ID ?
#2 这个 qbit 我只用来下 pt ,所以这个 key 的值我这边是空的
#3 5000 种感觉已经很多了……

这个我也不清楚。

qb 版本是否太低?太低的会出现各种奇奇怪怪的问题,至少要到 4.4.x 才好点

个人猜测一般 CPU 没满的情况下是 IO 瓶颈等待导致的阻塞,当然有时候也有玄学情况。。。
其实都那样,4.4.x 还用了 libtorrent 2.0 ,Windows 下性能降低要不内存直接进行大爆炸

目前我 Web UI 挂了 6000 ,响应有一点延迟,估计网络问题,还可以接受。

以及内存的话不要让 qB 去试图使用 SWAP ,这也可能导致 Web UI 卡死。或者你干脆关了 SWAP 也行。。
个人测试经验,工作集要比磁盘缓存大 1/2 到 1/3 ,然后工作集用总内存的 1/2 比较好。

mark 一下,目前也只能限速处理,看看有没有大佬有解决办法

#6
切,我是逆向操作,4.4.x 卡死多次,从 4.4.2-->4.4.1-->4.4.0-->4.3.9 OK
搜了一下,原来是国际问题
当然说的是 GUI 版本,不是 nox

Web UI GG 了不影响任务的进行,但是不知道会不会影响 RSS ,没有做过测试。
我 MT7621 的 OpenWrt 挂 10 个任务同时下载就会卡死,但是任务还会进行。400 个任务不操作也卡死,没救。。CPU 性能炸了

推荐试试看 4.4.2 lt1.2 版本,Linux GUI 当我没说。

QB-EE 4.4.2 ,Windows10 ,CPU-3700X ,内存 64G ,三星 970Pro ,下载速度超过 30MB/s ,GUI ( Web UI )一样卡死。
CPU ,磁盘占用基本没有,但是还是会卡死

#13
是 win ,但也不想试了,用着没啥事就不动了
我是 4.1 看着 pt 别人版本挺高的,直升 4.4 ,在半夜卡了,醒来看到上传流量全部为 0 ,&^)()#$%&^^$^&

我目前都是 4.4.2 lt1.2 ,用下来和 4.3.9 没区别。
19206978-0776-41BD-97E3-C7B5F2EF9484.jpeg

……又忘记回复不能用 MD 了
V2 的外链限制是不是太严了。。
创建新回复过程中遇到一些问题:
请不要在每一个回复中都包括外链,这看起来像是在 spamming

我猜就是 io 卡住了导致卡住了别的线程
因为 qbittorrent-nox 高负载失去响应的问题我甚至在 32C+128G 内存的服务器上遇见过,显然不会因为是 CPU 瓶颈 /内存瓶颈

#6 好像是 4.1.9 ,晚上回去确认。上午重启了一下 frpc 导致家里路由器 ssh 登不上了。。
#7 好的,谢谢。回头看看首要升级版本
#9 恩有道理,4GB 内存对于我的系统和相关应用应该足够了,swap 不是很有必要。
#12 MT7621 还能这么刚,看来我的 n3150 不是问题 😂️
#17 没办法,确实很严格我也遇到过好几次你这个提示。不过另辟蹊径,可以拆开 url ,http 协议附近,不让 v2 的 editor 把你的文本识别成一个有效的 url 就行了
#18 也是有道理的,但是接的一个普通的 3TB sata3 机械硬盘,顺序写速度有个 100 兆以上,为什么 io 会卡住呢

嘛…nox 版低于 4.4 在我这会导致种子内容无法查看,而且如果运行 nox 的服务器做梯子的话还会导致 web 界面延迟巨大(十几秒),十分玄学

我的情况是高速下载是响应延迟,在创建任务时会无响应一段时间,u 是 4200h ,看 cpu 是 99%-130%,祖传单核优化,wa 大概是 30 多

的确是 v4.1.9
想起来了,还可以 base64 啊,虽然很少有人这么用,但是也不失一种方案
wa 是什么?

还不如直接发图片呢。。反正 iOS 已经支持 OCR 文本了 (
个人还是推荐用 4.3 或 4.4 ,4.1.9 实在太上古了,总不能一直不升级。
4.4 新的 SQLite 数据库不错,就是要有备份,而且目前官方还没有做向下转换 (技术上可以实现

wa 是 io 等待时间的 CPU 占比

赞,果然快了不少。原来以为是 qt 在 win 下默认要慢一些导致的。

#18 也是有道理的,但是接的一个普通的 3TB sata3 机械硬盘,顺序写速度有个 100 兆以上,为什么 io 会卡住呢

原来你是机械盘你不用缓存软件,I/O 不卡死才怪。
我在 win 下用机械盘+缓存盘,也只能限制 10 个任务+15MB/s 开到 20MB/s 机械盘就 100%了。因为我内存不多划了缓存盘小 512M 。
用缓存盘速度快了,硬盘也不那么容易坏了。以前单纯机械盘做下载盘。用个 1,2 年就都是坏道,需要屏蔽了。
现在可以用很久。

#24 学习了
#26 明白了,那我还是太年轻。用的二手盘,坏了倒是没啥心疼的

#23 base64 比 ocr 方便(确信,哈哈哈

估计是 tracker 太多,搞崩的,我现在就添加十几个 trackers ,以前 200 多个经常卡死

我是把 RSS 智能剧集过滤器勾掉 ,前 2 个以前去掉过了,差这个没去

不需要有缓存盘,qB 本身就内置有内存缓存。。。
我 seedbox 4x16T ,根本不开缓存的

我在 win 下用 PrimoCache 做内存缓存盘。这样写入速度快。
你这用 openwrt ,内存要管够。qb 高级里也有设置缓存大小。

qb 默认写盘策略还不错。起码比迅雷无脑狂写盘要好很多。但是用 PrimoCache 和不用还是有区别的

qb 的高级设置里有个获取 tracker 图标的设置, 关掉它, tracker 设置多也不会卡死了.

如果网络大于对等 1Gbps ,那确实有区别。

回错人了吧.

回错了,抱歉。不过 tracker 图标默认好像就是不获取的吧,是我记错了?确实也没什么必要获取

我之前会卡住是因为暂时只能用顺序读写没网速快的盘导致的,后来换了 HC320/HC550 (顺序读写 200M+)也就没卡了

其实我怀疑 BT 的读写没那么顺序导致了卡住,看看 iowait 应该能看出来端倪

可能是缓存或者 IP 冲突的原因

#6 已经重装了一个 4.4.2 的 qbit 目前使用良好
#32 那个缓存高级设置我目前还是 -1 (就是自动的意思,让 qbit 决定缓存大小
#38 应该就是 io 跟不上,我研究一下 iowait 谢谢
#39 ip 冲突应该不至于的。