查看 /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 套件
Update -- 20170910
可能是DSM更新的關係,舊有的ipkg 套件安裝的gcc 一直無法編譯成功
目前可直接改用 synologc community 提供的 debian chroot 安裝 gcc
安裝完gcc之後,直接編譯檔案即可成功。
debian chroot 的預設環境是 /volume1/@appstore/debian-chroot/var/chroottarget
編譯完可直接執行或拉到其他目錄下使用。