我的Java程序失败了
Caused by: java.io.IOException: Too many open files
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)...
Run Code Online (Sandbox Code Playgroud)
以下是关键线/etc/security/limits.conf.他们将用户的最大文件设置为500k:
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
Run Code Online (Sandbox Code Playgroud)
我跑去lsof计算打开的文件数 - 全局和jvm进程.我检查了柜台/proc/sys/fs.一切似乎都好.我的进程只打开4301个文件,限制为500k:
:~# lsof | wc -l
5526
:~# lsof -uusername | wc -l
4301
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-max
744363
:~# cat /proc/sys/fs/file-nr
4736 0 744363
Run Code Online (Sandbox Code Playgroud)
这是一个Ubuntu 11.04服务器.我甚至重新启动所以我很肯定这些参数正在被使用.
我不知道它是否相关,但是这个过程是由一个upstart脚本启动的,它使用setuidgid启动进程,如下所示:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
Run Code Online (Sandbox Code Playgroud)
我错过了什么?