我的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)...
这是来自的关键行/etc/security/limits.conf。他们将用户的最大文件数设置为500k:
root soft nofile 500000
root hard nofile 500000
* soft nofile 500000
* hard nofile 500000
我跑去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
这是Ubuntu 11.04服务器。我什至已经重新启动,所以我很肯定正在使用这些参数。
我不知道它是否相关,但是该过程由upstart脚本启动,该脚本使用setuidgid启动该过程,如下所示:
exec setuidgid username java $JAVA_OPTS -jar myprogram.jar
我缺少什么?
博主遇到Java程序因文件数量超过限制(500k)崩溃问题,分析了/etc/security/limits.conf设置、系统资源使用情况(lsof)和upstart脚本。文章将探讨如何解决Ubuntu 11.04服务器上Java进程文件限制问题。
2150

被折叠的 条评论
为什么被折叠?



