MacOs:增加打开文件的最大值不适用于Java程序

时间:2018-08-01 06:28:50

标签: java server configuration macos-sierra ulimit

我的操作系统是MacOs sierra,我使用以下命令来增加每个进程的已打开文件的最大数量,并使它们永久受影响:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n

当我使用ulimit -a来查看终端中的限制时,它确实有效。

但是,当我运行Java服务器程序时,套接字连接何时达到5110,

“打开的文件过多,仍然引发异常”

因此,我编写以下代码来查看java运行时的内核参数:

String [] cmd={"/bin/bash","-c","ulimit -a"};
Process proc = Runtime.getRuntime().exec(cmd);
InputStream stderr = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line;
while ( (line = br.readLine()) != null) {
      System.out.println(line);
}

结果显示

open files                      (-n) 10240

这很困惑,因为我试图在我知道的任何地方都增加限制。

* ~/.bash_profile: initialization for login (bash-)shells
* ~/.bashrc: initialization for all interactive (bash-)shells
* ~/.profile
* /etc/bashrc: meant for functions and aliases
* /etc/profile: all types of initialization scripts'

任何人都可以给我有关此问题的任何提示吗? 非常感谢您。

0 个答案:

没有答案