服务器跑出异常Too Many Open Files 就是因为打开的文件句柄达到上限。

文件句柄是一个十六位长度的二进制代码(Windows95后为32位无符号整数),代表一个已被打开文件的通道号,借助于这个句柄,你的应用程序即可使用这个相应的句柄对文件进行随意存取操作,简单看来程序通过句柄获得资源的引用,来进行资源的打开和关闭的操作。

ulimit -a 查看当前用户的文件句柄限制

默认情况下root是没有限制的,普通用户默认句柄数是1024。

修改 /etc/security/limits.conf 下面的代码:

*        soft    nproc 65535

*        hard    nproc 65535

*        soft    nofile 65535

*        hard    nofile 65535

有两种限制,一种是soft软限制,在数目超过软限制的时候系统会给出warning警告,但是达到hard硬限制的时候系统将拒绝或者异常了。  修改之后可能需要重启shell生效。

nproc表示最大进程数,nofile表示打开的最大文件句柄数。

[vincen@server120 root]$ ulimit -u

2048

[vincen@server120 root]$ ulimit -n

65536

发现普通用户vincen的最大进程数并不是65535。其实在CentOS6中用户的最大进程数还受到了/etc/security/limits.d/90-nproc.conf的限制。

[root@server120 ~]# cat /etc/security/limits.d/90-nproc.conf | grep -v "^#" | grep -v "^$"

*          soft    nproc     2048

root       soft    nproc     unlimited

然后修改为

*          soft    nproc     65535

root       soft    nproc     unlimited

即可。