setrlimit 不适用于 OS X Maverick 和 Yosemite
setrlimit doesn't work on OS X Maverick and Yosemite
我在公司工作,为各种程序编写音频插件,目前我在 Os X Mavericks 和 Yosemite 上遇到以下逻辑问题。
Logic 会扫描我们所有的插件,并且在某些时候它无法再访问这些文件。 errno 是 24,意思是 "Too Many Open Files"
我们的代码中有以下行,增加了可用的文件描述符:
struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}
我也试过:
struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
limit.rlim_max = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}
然而这并没有帮助。
有趣的是,如果我打开终端,然后 运行 以下命令:
ulimit -n 1024
然后我 运行 终端内的逻辑一切正常,没有描述符问题!!
现在,我认为 setrlimit 应该和 setrlimit 一样,不是吗?
我做错了什么?
P.S。我也试过这个解决方案:
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
没有帮助。
我最终在这篇文章中找到了解决我的问题的方法:
http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X
这也是解决方案(对于 Maverick,不是 Yosemite):
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
但是,setrlimit为什么会失败,目前还不清楚。可能 OS X 错误(或功能)。
如果没有第 3 方软件搞乱 w/ulimit、launchctl 限制最大文件等,上面的代码(第一个变体)不会失败。重新启动您的 mac 并重试。
P.S。让我们不要乘以这样的软件
P.P.S 检查 'errno' 变量的错误代码
我在公司工作,为各种程序编写音频插件,目前我在 Os X Mavericks 和 Yosemite 上遇到以下逻辑问题。 Logic 会扫描我们所有的插件,并且在某些时候它无法再访问这些文件。 errno 是 24,意思是 "Too Many Open Files"
我们的代码中有以下行,增加了可用的文件描述符:
struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}
我也试过:
struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
limit.rlim_max = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}
然而这并没有帮助。 有趣的是,如果我打开终端,然后 运行 以下命令:
ulimit -n 1024
然后我 运行 终端内的逻辑一切正常,没有描述符问题!!
现在,我认为 setrlimit 应该和 setrlimit 一样,不是吗? 我做错了什么?
P.S。我也试过这个解决方案: https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
没有帮助。
我最终在这篇文章中找到了解决我的问题的方法: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X
这也是解决方案(对于 Maverick,不是 Yosemite): https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
但是,setrlimit为什么会失败,目前还不清楚。可能 OS X 错误(或功能)。
如果没有第 3 方软件搞乱 w/ulimit、launchctl 限制最大文件等,上面的代码(第一个变体)不会失败。重新启动您的 mac 并重试。
P.S。让我们不要乘以这样的软件 P.P.S 检查 'errno' 变量的错误代码