小樱 发表于 2019/5/3 06:33

linux transmission 2.94报错"unable to save resume file: too many open files 打开文件数量上限限制1024

linux transmission 2.94报错"unable to save resume file: too many open files"的解决方法,打开文件数量限制

2.31 (and older),已经失效,transmission 新版本不加载此配置文件
open-file-limit: Number (default = 32)

首先不要说系统配置问题,贴出来给你们看,也使用su transmission确认过
# ulimit -a
core file size          (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals               (-i) 386495
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues   (bytes, -q) 819200
real-time priority            (-r) 0
stack size            (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes            (-u) 386495
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

cat /etc/security/limits.conf
* soft nofile 1048576
* hard nofile 1048576

查看pid具体限制确实存在
cat /proc/28492/limits | grep files

使用prlimit尝试设置,发现1024的问题存在,原因是源代码使用了过时的select,应当升级为iocp网络模型
prlimit --pid 28492 --nofile=65535

官方配置信息,,默认值23,不过新版本已经废弃了视乎,在系统中修改也无效果,并且系统内核日志没有任何报错,属于transmission自身一个BUG,在挂多个m2ts多文件的pt站中,因为非一个iso,多个peer区块化,一个peer会很容易打开多个文件,很容易复现问题。

查看fdlimit.c文件代码中,写死了1024限制,,看看有什么办法修改它。
tail -f /var/log/messages
May2 20:22:24 localhost transmission-daemon: Changed open file limit from 65535 to 1024 (fdlimit.c:380)

解决方法,无。

缓解方法,限制最大全局连接数为500即可。

参考:https://trac.transmissionbt.com/ticket/5161#comment:3

https://github.com/transmission/transmission/issues/871

最好的解决办法是修改程序源代码 然后重新安装
Changed open file limit from 65535 to 1024 (fdlimit.c:380) 看他们回帖源代码里面关键的一段应该是这个
限制,同时连接数会导致连接的用户量变少 而且一个peer可能打开的文件不止一个 因为会请求多个区块 不同的区块会分散到不同的文件中
改源代码理论就可以彻底解决 ,也不知道软件官方为什么没有改这个代码 可能改了会引起其他的什么问题?
自己看服务器却是输出
Couldn't create socket: Too many open files (fdlimit.c:524)
Unable to save resume file: Too many open files (torrent.c:537)
Couldn't save temporary file "/home/transmission/.config/transmission/stats.json.tmp.G9FIc4": Too many open files (variant.c:1280)
源代码中理论上来说对应的文件是CMakeLists.txt 第124行
set(CMAKE_${L}_FLAGS "${CMAKE_${L}_FLAGS} -DFD_SETSIZE=1024")
据说3.1版本会解决,编译需要libcurl 7.28
https://github.com/transmission/transmission/commit/2da97b25fa43948fb24014535e880efed1a2fbdf
https://github.com/transmission/transmission/pull/893#issuecomment-720727051

页: [1]
查看完整版本: linux transmission 2.94报错"unable to save resume file: too many open files 打开文件数量上限限制1024