最近在用 Transmission web control 的时候 , 文件一大就很容易遇到 Unable to save resume file: Too many open files (3) 错误提示 .
而在 terminal 查看 transmission-daemon 并没有打开多少文件 .
根据在其它地方找到的资料 , 看了下具体的文件限制 .
cat /proc/4222/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 3823 3823 processes
Max open files 1024 1048576 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 3823 3823 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
可以看到 transmission-daemon soft Max open files 写死了只能是 1024 . 我在 debian 写了系统级 ulimit , 所以不会是系统问题 . 这就很尴尬了 , 根据这里给出的解释 , 新版 tr 没有可设置项 , 写死了 . 这怎么行 , 难道要放弃 tr ???
好在谷狗中文搜索还凑合能用 , 在这里找到了解决方法 .
解决
以下内容参考 飘云博客的文章
用C程序动态的去更改进程的最大文件和socket数量,喜欢折腾朋友可以编译以下C程序:
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
int main(int argc, char** argv) {
pid_t pid;
struct rlimit new_limit;
int result;
if (argc < 2) {
return 1;
}
pid = atoi(argv[1]);
new_limit.rlim_cur = 60000;
new_limit.rlim_max = 60000;
result = prlimit(pid, RLIMIT_NOFILE, &new_limit, NULL);
return result;
}
群晖不自带GCC编译器,需要自己折腾,比较麻烦,我这边已经编译好了相关的二进制程序,大家拿去可以直接用,使用方法如下:
wget https://dl.777521.xyz/devs/rlimit
chmod 744 rlimit
ps -ef|grep trans #返回的数字即为 pid
./rlimit 12345
cat /proc/12345/limits
备用下载地址 :
治好了我的腰酸背痛腿抽筋 , 真棒 .
评论区