Linux#open-file limit

时间:2011-10-25 14:49:32

标签: linux

我们面临的情况是,由于用完了打开的文件限制而导致进程陷入困境。全局设置file-max设置得非常高(在sysctl.conf中设置)&在/etc/security/limits.conf中,每用户值也设置为高值。甚至ulimit -n反映了作为无头用户(进程所有者)运行时的每用户值。所以问题是,这种变化是否需要系统重启(我的理解是不是)?有没有人遇到类似的问题?我正在运行ubuntu lucid&该应用程序是一个java进程。短暂的端口范围也足够高,&在问题期间检查时,进程已打开#1024(注意默认值)文件(由lsof报告)。

2 个答案:

答案 0 :(得分:3)

您可能遇到的一个问题是fd_set使用的select仅限于FD_SETSIZE,它在编译时固定(在本例中为JRE),并且限制为1024

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

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

答案 1 :(得分:2)

考虑到您已正确编辑了sysctl.conf/etc/security/limits.conf中的文件最大值;然后:

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

然后再做

#ulimit -n unlimited

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