打开的文件太多错误,但 lsof 显示合法数量的打开文件
我的 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)...
以下是 中的关键行。他们将用户的最大文件数设置为 500k:/etc/security/limits.conf
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
我跑去计算打开的文件数 - 无论是全局还是jvm进程。我检查了 中的计数器。一切似乎都还好。我的进程只打开了4301个文件,限制是500k:lsof
/proc/sys/fs
:~# 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
这是一个Ubuntu 11.04服务器。我甚至重新启动了,所以我肯定这些参数正在被使用。
我不知道它是否相关,但该过程由upstart脚本启动,该脚本使用setuidgid启动该过程,如下所示:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
我错过了什么?