在Ubuntu下启动java应用时,在控制台输出会抛出打开太多的文错误信息。
open too many file
应用无法启动,google了下,是因为应用打开的文件句柄数超出了系统的限制。使用命令:
ulimit -n
输出1024
解决方案:
1.调整Ubuntu下的文件句柄数。
查看这篇文章:
http://blog.csdn.net/zhaiqi618/article/details/5616998 中的
1. #vi /etc/profile,增加ulimit -HSn 65536 将文件句柄数修改到10240,但执行后,使用
source /etc/profile之后,提示:
bash: ulimit: open files: 无法修改 limit 值: 不允许的操作
于是查找到这篇:
写道
为啥root用户是可以的?普通用户又会遇到这样的问题? 看一下/etc/security/limits.conf大概就会明白。 linux对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限。 超出上限的修改就会出“不允许的操作”这样的错误。
于是我用root权限修改了/etc/security/limits.conf文件,增加以下内容:
* soft nproc 10240 * hard nproc 10240 * soft nofile 10240 * hard nofile 10240
*代表domain,影响到的域,我这里设置了全部。
soft/hard :代表软性或者硬性限制
nproc:max number of processes 设置最大的进程数
nofile:max number of open files 设置最大的文件句柄数
再编辑/etc/pam.d/common-session,加入一行,之所以加入这行,是因为需要在下次重启的时候,能够让用户直接修改
/etc/profile中的文件句柄数生效。http://www.ccs.neu.edu/home/battista/articles/winbind/pam.html (具体这个文件是做什么用的,我在下次再讨论下。)
session required pam_limits.so
再编辑/etc/profile文件,加入刚才的内容:
ulimit -HSn 10240
此时执行:
source /etc/profile 仍然会提示:
bash: ulimit: open files: 无法修改 limit 值: 不允许的操作
这是因为需要重启电脑,否则更改不会立即生效。
检查:
ulimit -a 这个是列出当前系统的所有内容限制
ulimit -n 这个是列出当前系统能够打开最大的文件句柄数。
重启电脑之后,就可以使用root方式进行修改/etc/profile中的
ulimit -HSn 后的
数字,再执行source /etc/profile,就可以马上看到效果了。