2015年8月26日 星期三

transmission too many open file problem on synology is solved

試過網路上許多方法 ulimit、/etc/security/limit.conf、fs.file-max、sysctl 等許多指令都無效

查看 /proc/$PID/limits  open file 限制一樣都是  1024 4096

後來終於發現Linux library 的函數 rlimit 有支援動態更改process open file 的方法

參照網址是:

http://xiezhenye.com/2013/02/%E5%8A%A8%E6%80%81%E4%BF%AE%E6%94%B9%E8%BF%90%E8%A1%8C%E4%B8%AD%E8%BF%9B%E7%A8%8B%E7%9A%84-rlimit.html

由他提供的C程序做些微修改,以下是我的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 = 8192;
    new_limit.rlim_max = 65535;
    result = prlimit(pid, RLIMIT_NOFILE, &new_limit, NULL);
    return result;
    }
#############################################################################

基本上 limit.rlim_cur  <  limit.rlim_max 數字即可 ,不夠大可自行斟酌修改 ;

利用GCC編譯完執行指令即可順利更改open file 限制 ,不用在擔心too many open file 問題
# rlimit  $PID

查看一下 /proc/$PID/limits 內容已修改成功。


註:要在Synology 上編譯需開啟 ssh 功能安裝 ipkg 跟 gcc 套件

ipkg安裝參考網址:
http://blog.allenchou.cc/dsm-bootstrap-ipkg/

Update -- 20170910

可能是DSM更新的關係,舊有的ipkg 套件安裝的gcc 一直無法編譯成功
目前可直接改用 synologc community 提供的 debian chroot 安裝 gcc
安裝完gcc之後,直接編譯檔案即可成功。

debian chroot 的預設環境是 /volume1/@appstore/debian-chroot/var/chroottarget
編譯完可直接執行或拉到其他目錄下使用。