Linux#打开文件限制

Linux#打开文件限制,linux,Linux,我们正面临这样一种情况:进程由于超出打开文件的限制而被卡住。全局设置文件max被设置得非常高(在sysctl.conf中设置)&每个用户的值在/etc/security/limits.conf中也被设置为很高的值。甚至ulimit-n在作为无头用户(进程所有者)运行时也反映了每用户值。所以问题是,这个更改是否需要重新启动系统(我的理解是不需要)?有没有人面临过类似的问题?我正在运行ubuntulucid&这个应用程序是一个java进程#临时端口范围太大,在问题期间检查时,进程已打开了1024个(

我们正面临这样一种情况:进程由于超出打开文件的限制而被卡住。全局设置文件max被设置得非常高(在sysctl.conf中设置)&每个用户的值在/etc/security/limits.conf中也被设置为很高的值。甚至ulimit-n在作为无头用户(进程所有者)运行时也反映了每用户值。所以问题是,这个更改是否需要重新启动系统(我的理解是不需要)?有没有人面临过类似的问题?我正在运行ubuntulucid&这个应用程序是一个java进程#临时端口范围太大,在问题期间检查时,进程已打开了1024个(注意默认值)文件(由lsof报告)。

您可能遇到的一个问题是
select
使用的
fd_集
被限制为fd_setize,这在编译时是固定的(在JRE的情况下),这限制在1024个

#define FD_SETSIZE      __FD_SETSIZE
/usr/include/bits/typesizes.h:#define   __FD_SETSIZE        1024

幸运的是,c库和内核都可以处理任意大小的
fd_集
,因此,对于已编译的c程序,可以提高该限制。

考虑到您已在
sysctl.conf
/etc/security/limits.conf
中正确编辑了文件max value;然后:

edit /etc/pam.d/login, adding the line: 
session required /lib/security/pam_limits.so
然后呢

#ulimit -n unlimited

请注意,在更改生效之前,您可能需要注销并重新登录

你不需要重新启动。尝试(作为root)ulimit-hn100000、ulimit-sn100000并在同一个shell下重新启动您的项目。您可能还需要检查/proc/sys/fs/file-max。无论如何,对于1000多个文件,您应该使用类似epool的东西。也许可以使用strace来查看系统调用java正在做什么。