Too many open files是linux中常见的错误,出现这种错误,首先要查一下程序代码,最大的可能是打开的文件或是socket没有正常关闭。如果代码没有问题,就是普通用户受到了Linux系统默认的最大打开文件数限制,可以用 ulimit -n 命令来查看,默认是1024。root用户是系统最高用户,虽然显示是1024,但不受这个限制。如果系统用户比较多,为了控制普通用户资源占用,全局最大打开文件数不建议设置太大,如果各别用户有需要建议单独设置。在实际的生产环境中,默认数值太小根本不够用,根据我的实际经验,有以下两种方式加大全局最大打开文件数:

  1. 在/etc/profile 中增加一行 ulimit -SHn 65535 (等同于 ulimit -n 65535,-S指soft,-H指hard)
  2. 在/etc/security/limits.conf最后增加如下两行记录

     * soft nofile 65535
     * hard nofile 65535
    

注意:在centos系统中使用这两种方式都有效果,而在Debian/ubuntu中按照上面的方法只有第一种方式有效果,要使用第二种方法还要在/etc/pam.d/common-session,新增如下内容

session required pam_limits.so

limits.conf中有详细的配置说明(例如指定每个用户的最大打开连接数等)能设置的比较多,这里就不多说了。设置好后不用重启,重新登陆生效。
临时生效的话直接在shell里输入ulimit -n 65535即可,也可以直接写入.bashrc文件中,这样每次登陆就自动生效,退出就失效