编辑:我现在有一个解决方案,但我真的很清楚简要描述不同的限制是什么,即由FD_SIZE,launchtl限制文件,sysctl -w kern.maxfilesperproc,ulimit等设置的限制.
有人可以帮我理解OSX上打开文件句柄的限制.ulimit给了我一个答案:
$ ulimit -a
...
open files (-n) 256
Run Code Online (Sandbox Code Playgroud)
我无法ulimit
改变这一点,但人们建议使用launchctl
(例如http://usrinapto.wordpress.com/2010/03/06/mac-os-x-10-6-max-open-files-too-many -open-files /)
但是,使用它不会改变报告的限制ulimit
.
但是,我的应用程序似乎能够在崩溃之前打开10k文件lsof
,例如:
$ lsof -p 87599 | wc
10279 92505 1418903
Run Code Online (Sandbox Code Playgroud)
(它可靠地在10279和10305打开的文件之间崩溃)
所以有明显不同的限制.我也看过(在上面的链接上)的谈话FD_SETSIZE
.
有人可以向我解释不同的限制是什么,以及它们是如何设置的?
如果它是相关的,我正在使用SWIG包装一个用于Java的C/C++库.
编辑:我也尝试过:
sudo sysctl -w kern.maxfiles=20000
Run Code Online (Sandbox Code Playgroud)
没有成功.也
#define FD_SETSIZE 20000
Run Code Online (Sandbox Code Playgroud)
没有效果.
编辑:也尝试过
launchctl limit maxfiles 20000 20000
Run Code Online (Sandbox Code Playgroud)
没有效果.
编辑:解决方案:
sysctl -w kern.maxfilesperproc=20000
Run Code Online (Sandbox Code Playgroud)
(来自http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/)
编辑:我已经编写了一个小程序来测试它(基于如何在Mac OS X上增加C中"最大打开文件"的限制),并发现我可以要求的最大打开文件数是10240:
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
struct rlimit limit;
void setLimit( int l );
void getLimit();
int main( int argc, char* argv[] )
{
getLimit();
setLimit(10240);
getLimit();
return 1;
}
void setLimit( int lim )
{
limit.rlim_cur = lim;
limit.rlim_max = lim;
printf( "Setting limit to %d, %d\n", limit.rlim_cur, limit.rlim_max );
if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
printf("setrlimit() failed with errno=%d\n", errno);
exit(1);
}
}
void getLimit()
{
/* Get max number of files. */
if (getrlimit(RLIMIT_NOFILE, &limit) != 0)
{
printf("getrlimit() failed with errno=%d\n", errno);
exit(1);
}
printf("The soft limit is %llu\n", limit.rlim_cur);
printf("The hard limit is %llu\n", limit.rlim_max);
}
Run Code Online (Sandbox Code Playgroud)
mo-*_*eph 23
在http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/上找到:
sysctl -w kern.maxfilesperproc=20000
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28240 次 |
最近记录: |