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