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 ,而且进程状态是良好的。
解决办法:
我贴出一些信息,希望有 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 客户端。作者编译的开源项目在 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
1
Sylv 2022-05-06 09:58:59 +08:00 via iPhone
就是高速下载或者种子过多的时候,CPU 性能不够,导致负责 API 的子进程阻塞了。这情况在性能不好的 Seedbox (相比路由器已经好很多了)也经常出现,在性能好的 Seedbox 上就很少出现。所以你只能下载限速和减少做种数量了,要不然就是换到性能好的 PC/NAS 上了。
|
2
whatalittleboy 2022-05-06 10:01:31 +08:00
之前我 Windows 端的 qb ,界面非常容易卡死,把 tracker 订阅地址删掉就好了
|
3
ltkun 2022-05-06 10:06:25 +08:00 via Android
webui 最多干过 5000 种子 不过 cpu 内存都要给足
|
4
AllenHua OP @Sylv #1 感谢解惑。刚查了一些资料,pstree 里主进程后面的是进程还是线程,我不知道怎么区分,后面那一列的名称和数字,那个数字是 process ID 还是 thread ID ?
@whatalittleboy #2 这个 qbit 我只用来下 pt ,所以这个 key 的值我这边是空的 @ltkun #3 5000 种感觉已经很多了…… |
6
vocaloid 2022-05-06 12:49:20 +08:00
qb 版本是否太低?太低的会出现各种奇奇怪怪的问题,至少要到 4.4.x 才好点
|
7
lslqtz 2022-05-06 12:52:56 +08:00
个人猜测一般 CPU 没满的情况下是 IO 瓶颈等待导致的阻塞,当然有时候也有玄学情况。。。
@vocaloid 其实都那样,4.4.x 还用了 libtorrent 2.0 ,Windows 下性能降低要不内存直接进行大爆炸 |
8
lslqtz 2022-05-06 12:53:19 +08:00
目前我 Web UI 挂了 6000 ,响应有一点延迟,估计网络问题,还可以接受。
|
9
lslqtz 2022-05-06 12:56:23 +08:00
以及内存的话不要让 qB 去试图使用 SWAP ,这也可能导致 Web UI 卡死。或者你干脆关了 SWAP 也行。。
个人测试经验,工作集要比磁盘缓存大 1/2 到 1/3 ,然后工作集用总内存的 1/2 比较好。 |
10
LuvF 2022-05-06 13:00:27 +08:00 via Android
mark 一下,目前也只能限速处理,看看有没有大佬有解决办法
|
11
imn1 2022-05-06 13:03:49 +08:00
|
12
lslqtz 2022-05-06 13:04:07 +08:00
Web UI GG 了不影响任务的进行,但是不知道会不会影响 RSS ,没有做过测试。
我 MT7621 的 OpenWrt 挂 10 个任务同时下载就会卡死,但是任务还会进行。400 个任务不操作也卡死,没救。。CPU 性能炸了 |
14
HaoranLi 2022-05-06 13:09:44 +08:00
QB-EE 4.4.2 ,Windows10 ,CPU-3700X ,内存 64G ,三星 970Pro ,下载速度超过 30MB/s ,GUI ( Web UI )一样卡死。
CPU ,磁盘占用基本没有,但是还是会卡死 |
15
imn1 2022-05-06 13:12:27 +08:00
|
16
lslqtz 2022-05-06 13:16:31 +08:00
@imn1 我目前都是 4.4.2 lt1.2 ,用下来和 4.3.9 没区别。
![19206978-0776-41BD-97E3-C7B5F2EF9484.jpeg]( https://s2.loli.net/2022/05/06/JPfwQ1UBbmYZOTN.jpg) |
17
lslqtz 2022-05-06 13:17:30 +08:00
……又忘记回复不能用 MD 了
V2 的外链限制是不是太严了。。 创建新回复过程中遇到一些问题: 请不要在每一个回复中都包括外链,这看起来像是在 spamming |
18
yanqiyu 2022-05-06 13:31:03 +08:00
我猜就是 io 卡住了导致卡住了别的线程
因为 qbittorrent-nox 高负载失去响应的问题我甚至在 32C+128G 内存的服务器上遇见过,显然不会因为是 CPU 瓶颈 /内存瓶颈 |
19
AllenHua OP @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 会卡住呢 |
20
vocaloid 2022-05-06 14:31:23 +08:00 via iPhone
@imn1 嘛…nox 版低于 4.4 在我这会导致种子内容无法查看,而且如果运行 nox 的服务器做梯子的话还会导致 web 界面延迟巨大(十几秒),十分玄学
|
21
kaedeair 2022-05-06 16:55:06 +08:00
我的情况是高速下载是响应延迟,在创建任务时会无响应一段时间,u 是 4200h ,看 cpu 是 99%-130%,祖传单核优化,wa 大概是 30 多
|
22
AllenHua OP |
23
lslqtz 2022-05-06 20:40:19 +08:00
@AllenHua 还不如直接发图片呢。。反正 iOS 已经支持 OCR 文本了 (
个人还是推荐用 4.3 或 4.4 ,4.1.9 实在太上古了,总不能一直不升级。 4.4 新的 SQLite 数据库不错,就是要有备份,而且目前官方还没有做向下转换 (技术上可以实现 |
25
yjd 2022-05-07 10:10:53 +08:00
@whatalittleboy 赞,果然快了不少。原来以为是 qt 在 win 下默认要慢一些导致的。
|
26
yjd 2022-05-07 10:22:00 +08:00
#18 也是有道理的,但是接的一个普通的 3TB sata3 机械硬盘,顺序写速度有个 100 兆以上,为什么 io 会卡住呢
原来你是机械盘你不用缓存软件,I/O 不卡死才怪。 我在 win 下用机械盘+缓存盘,也只能限制 10 个任务+15MB/s 开到 20MB/s 机械盘就 100%了。因为我内存不多划了缓存盘小 512M 。 用缓存盘速度快了,硬盘也不那么容易坏了。以前单纯机械盘做下载盘。用个 1,2 年就都是坏道,需要屏蔽了。 现在可以用很久。 |
29
whatalittleboy 2022-05-07 11:25:56 +08:00
@yjd 估计是 tracker 太多,搞崩的,我现在就添加十几个 trackers ,以前 200 多个经常卡死
|
30
yjd 2022-05-07 11:30:18 +08:00
@whatalittleboy 我是把 RSS 智能剧集过滤器勾掉 ,前 2 个以前去掉过了,差这个没去
|
32
yjd 2022-05-07 11:34:01 +08:00
@AllenHua 我在 win 下用 PrimoCache 做内存缓存盘。这样写入速度快。
你这用 openwrt ,内存要管够。qb 高级里也有设置缓存大小。 |
34
chengyiqun 2022-05-07 12:01:31 +08:00
@whatalittleboy qb 的高级设置里有个获取 tracker 图标的设置, 关掉它, tracker 设置多也不会卡死了.
|
35
lslqtz 2022-05-07 17:32:35 +08:00
@chengyiqun 如果网络大于对等 1Gbps ,那确实有区别。
|
36
chengyiqun 2022-05-07 23:26:10 +08:00
@lslqtz 回错人了吧.
|
37
lslqtz 2022-05-08 00:11:06 +08:00
|
38
yanqiyu 2022-05-08 12:14:11 +08:00
@AllenHua
我之前会卡住是因为暂时只能用顺序读写没网速快的盘导致的,后来换了 HC320/HC550 (顺序读写 200M+)也就没卡了 其实我怀疑 BT 的读写没那么顺序导致了卡住,看看 iowait 应该能看出来端倪 |
39
monster33 2022-05-08 13:41:47 +08:00
可能是缓存或者 IP 冲突的原因
|
40
AllenHua OP |
41
chengyiqun 2022-05-09 00:54:06 +08:00
@lslqtz 我从来不记得我改过, 某天我树莓派上导入一个超大种子后崩溃, 从那以后就一直崩溃了, 我重装 qbt 后, 这个就变成勾上的了, 是不是给我闪退一下, 我都不知道为啥.
|
42
LoneFireBlossom 320 天前
@lslqtz #8 群晖 920+ docker qb 5000+种,延迟很明显,尤其是给种子内文件文件夹重命名时……慢得要死😢
|